Согласно центральной идее Unix, что «все сущее есть файл», такие программы, как ls, в действительности выводят свои результаты в специальный файл, который называется
Кроме того, многие программы принимают ввод из специального файла с названием
Механизм перенаправления ввода/вывода позволяет изменять направление вывода и ввода. Обычно вывод осуществляется на экран, а ввод — с клавиатуры, но механизм перенаправления ввода/вывода позволяет изменить этот порядок вещей.
Перенаправление стандартного вывода
Механизм перенаправления ввода/вывода позволяет явно указать, куда должен осуществляться стандартный вывод. Чтобы перенаправить стандартный вывод в другой файл вместо экрана, нужно добавить в команду оператор перенаправления > и имя файла. Где это может пригодиться? Иногда полезно сохранить вывод команды в файл. Например, можно сообщить командной оболочке, что она должна направить вывод команды ls в файл
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Здесь мы создали длинный список содержимого файла
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 167878 2012-02-01 15:07 ls-output.txt
Неплохой файл получился. Если вывести содержимое
[me@linuxbox ~]$ less ls-output.txt
Давайте теперь повторим эксперимент с перенаправлением, но с небольшим усложнением: укажем имя несуществующего каталога:
[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt
ls: невозможно получить доступ к '/bin/usr': Нет такого файла или каталога
Мы получили сообщение об ошибке. Все логично — мы указали несуществующий каталог
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 0 2012-02-01 15:08 ls-output.txt
Файл очистился! Это объясняется тем, что при перенаправлении вывода с помощью оператора > файл назначения всегда перезаписывается с самого начала. Поскольку команда ls не вывела никаких результатов, а только сообщение об ошибке, оператор перенаправления перезаписал файл, а затем остановился из-за ошибки, что привело к его очистке. Получается, что если вам понадобится очистить какой-нибудь файл (или создать новый, пустой файл), это можно сделать с помощью следующего трюка:
[me@linuxbox ~]$ > ls-output.txt
Простой оператор перенаправления, без предшествующей ему команды, очистит существующий файл или создаст новый, пустой файл.
Так как же добавить вывод в конец существующего файлa, не затерев его? Для этого используем оператор перенаправления >>:
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
Оператор >> просто добавит результаты в конец файла. Если файл не существует, он будет создан, как при использовании оператора >. Давайте протестируем его:
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 503634 2012-02-01 15:45 ls-output.txt
Мы повторили команду трижды и получили файл втрое большего размера.
Перенаправление стандартного вывода ошибок