Как использовать перенаправление вывода, чтобы продемонстрировать, что делает 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 + F1 tree >/dev/tty1: работает tree перенаправление stdout на символьное устройство (первый псевдотерминал);
Другие вопросы по тегам