Как использовать перенаправление вывода, чтобы продемонстрировать, что делает TREE
Это вопрос, который я нашел в тесте:
Запустите дерево из вашего домашнего каталога.
Объясните и продемонстрируйте, что он делает.
Используйте перенаправление вывода, чтобы сделать это.
Я не понимаю часть перенаправления вывода. Не могли бы вы объяснить это мне, пожалуйста?
2 ответа
дерево: tree
перечисляет содержимое каталогов в древовидном формате. Это действительно аккуратная и полезная программа, которую вы можете использовать в командной строке для просмотра структуры вашей файловой системы.
перенаправление вывода означает сохранение команды вывода в другом месте, кроме простой печати на терминале. если вы хотите хранить tree
вывод команды в файл, затем используйте команду
tree > test
это перенаправит вывод в этот файл. эта команда создаст файл test
и если это уже выходит, то оно заменит контент на tree
вывод команды. если вы не хотите заменять и просто хотите добавить, используйте команду
tree >> test
это добавит вывод tree
команда в файл test
, Вы можете указать полный путь к файлу, в котором вы хотите сохранить вывод.
Возможно, в этом контексте перенаправление вывода = перенаправление стандартного вывода ( stdout
) в обычный файл.
tree >tree_output.txt
Однако перенаправление вывода в целом означает перенаправление одного из выходных потоков по умолчанию (стандартный вывод (stdout
) и стандартная ошибка (stderr
), как правило, оба направлены на терминал) ко всему, что можно считать файлом (обычный файл, stderr
если stdout
это поток, о котором идет речь, stdout
если stderr
это рассматриваемый поток, канал, именованный канал (FIFO), блочное устройство, символьное устройство...), и он не ограничен перенаправлением стандартного вывода (stdout
) в обычный файл, как в примере.
Таким образом, существует множество возможных перенаправлений вывода;
Для краткости предположим, что рассматриваемый результат является стандартным (stdout
), это наиболее распространенные возможные перенаправления:
echo foo >file
:stdout
перенаправлен в обычный файл;echo foo >&2
:stdout
перенаправлен наstderr
;echo foo | cat
:stdout
перенаправлен на трубу;mkfifo fifo && echo foo >fifo
:stdout
перенаправлен на именованный канал (FIFO);echo foo >/dev/sdX
:stdout
перенаправлен на блочное устройство (НЕ ДЕЛАЙТЕ ЭТОГО - он ничего не мог сделать, кроме как испортить таблицу разделов рассматриваемого блочного устройства);
Более эзотерические перенаправления:
echo foo >/dev/tty
:stdout
перенаправляется на символьное устройство, которое является текущим псевдотерминалом;- Нажмите Ctrl + Alt + F1, войдите в систему, нажмите Ctrl + Alt + F7, нажмите Ctrl + Alt + T, запустите
echo foo>/dev/tty1
и нажав Ctrl + Alt + F1;stdout
перенаправляется на символьное устройство, которое оказывается первым псевдотерминалом;
Таким образом, перенаправление вывода вообще означает перенаправление одного из выходных потоков по умолчанию (стандартный вывод (stdout
) и стандартная ошибка (stderr
), как правило, оба направлены на терминал) ко всему, что можно считать файлом;
Для того, чтобы бежать tree
Используя перенаправление вывода (и фактически показывая что-то на терминале), существует несколько способов:
tree >tree_output.txt && cat tree_output.txt
: работаетtree
перенаправлениеstdout
в обычный файл;tree >&2
: работаетtree
перенаправлениеstdout
вstderr
;tree | cat
: работаетtree
перенаправлениеstdout
к трубе;mkfifo fifo && tree >fifo
: работаетtree
перенаправлениеstdout
в именованную трубу;tree >/dev/tty
: работаетtree
перенаправлениеstdout
на символьное устройство (текущий псевдотерминал);- Нажмите Ctrl + Alt + F1, войдите в систему, нажмите Ctrl + Alt + F7, нажмите Ctrl + Alt + T, запустите
echo foo>/dev/tty1
и нажав Ctrl + Alt + F1tree >/dev/tty1
: работаетtree
перенаправлениеstdout
на символьное устройство (первый псевдотерминал);