diff --git a/src/homework/3.2/readme.md b/src/homework/3.2/readme.md new file mode 100644 index 0000000..4aef6f5 --- /dev/null +++ b/src/homework/3.2/readme.md @@ -0,0 +1,55 @@ +Выполнение [домашнего задания](https://github.com/netology-code/sysadm-homeworks/blob/devsys10/03-sysadmin-02-terminal/README.md) по теме "Работа в терминале, лекция 2". + +## Q/A + +1. Какого типа команда `cd`? + +При вызове `type cd` будет выведено, что `cd is a shell builtin`, то есть команда встроенная в оболочку. +Данная команда необходима для работы пользователя с терминалом и для работы других команд, именно поэтому она встроена в ядро операционной системы. + +2. Какая альтернатива без pipe команде `grep | wc -l`? + +Альтернативой является команда `grep -c `. + +3. Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04? + +Найти родителя всех процессов можно вызвав команду `pstree -p | grep \(1\)`. +Ответ: процесс с PID 1 - `systemd`. + +4. Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала? + +Откроем два терминала на виртуальной машине. Для каждого из них будет создан новый файл в директории `/dev/pts/`. +Таким образом, если мы хотим перенаправить stderr команды, то нужно выполнить следующие действия: +перенаправить вывод stderr в stdout, затем перенаправить stdout в `/dev/pts/`, где - целое число, идентификатор сессии терминала. +Полный пример команды: + +```shell +ls /some/invalid/dir 2>&1 1>&/dev/pts/ +``` + +5. Получится ли одновременно передать команде файл на stdin и вывести ее stdout в другой файл? + +Да, подобное можно реализовать следующим способом. + +```shell +touch in_file +echo "abc" > in_file +echo "bcd" >> in_file +grep abc < in_file 1>&out_file +cat out_file +``` + +Содержимое out_file является выводом команды grep, а именно одна строка `abc`. + +6. Получится ли находясь в графическом режиме, вывести данные из PTY в какой-либо из эмуляторов TTY? Сможете ли вы наблюдать выводимые данные? + +Да, подобное возможно. Достаточно, например, открыть новую сессию терминала в графической оболочке и выполнить перенаправление потока в `/dev/pts/`. +Так же любая программа с графическим интерфейсом может выполнить данное действие. Наблюдать данные возможно, +если открыт терминал, подключённый к конкретной сессии. + +7. Выполните команду `bash 5>&1`. К чему она приведет? Что будет, если вы выполните `echo netology > /proc/$$/fd/5`? Почему так происходит? + +Насколько я понимаю, команда `bash 5>&1` создаёт перенаправление потока из `5` в `1`, то есть в `stdout`. +Но так как `5` - это не стандартный идентификатор потока, поэтому оболочка создаст новый файл `/proc/$$/fd/5`. +Данный файл будет алиасом для stdout, поэтому выполнение `echo` выведет содержимое в терминал, +как это сделал бы обычный вызов команды без перенаправлений потока. \ No newline at end of file