add homework 3.2 questions 1-7

This commit is contained in:
2022-02-09 10:25:46 +07:00
parent 2272f0eb4c
commit 9a7cce46fa

View File

@@ -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 <some_string> <some_file> | wc -l`?
Альтернативой является команда `grep -c <some_string> <some_file>`.
3. Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04?
Найти родителя всех процессов можно вызвав команду `pstree -p | grep \(1\)`.
Ответ: процесс с PID 1 - `systemd`.
4. Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала?
Откроем два терминала на виртуальной машине. Для каждого из них будет создан новый файл в директории `/dev/pts/`.
Таким образом, если мы хотим перенаправить stderr команды, то нужно выполнить следующие действия:
перенаправить вывод stderr в stdout, затем перенаправить stdout в `/dev/pts/<n>`, где <n> - целое число, идентификатор сессии терминала.
Полный пример команды:
```shell
ls /some/invalid/dir 2>&1 1>&/dev/pts/<n>
```
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/<n>`.
Так же любая программа с графическим интерфейсом может выполнить данное действие. Наблюдать данные возможно,
если открыт терминал, подключённый к конкретной сессии.
7. Выполните команду `bash 5>&1`. К чему она приведет? Что будет, если вы выполните `echo netology > /proc/$$/fd/5`? Почему так происходит?
Насколько я понимаю, команда `bash 5>&1` создаёт перенаправление потока из `5` в `1`, то есть в `stdout`.
Но так как `5` - это не стандартный идентификатор потока, поэтому оболочка создаст новый файл `/proc/$$/fd/5`.
Данный файл будет алиасом для stdout, поэтому выполнение `echo` выведет содержимое в терминал,
как это сделал бы обычный вызов команды без перенаправлений потока.