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