Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Перенаправление стандартного вывода

Перенаправление ввода / вывода позволяет нам переопределить направление стандартного вывода. Чтобы перенаправить стандартный вывод в другой файл вместо экрана, мы используем оператор перенаправления «>», за которым следует имя файла. Зачем нам это нужно? Часто бывает полезно сохранить результат выполнения команды в файле. Например, мы могли бы указать оболочке отправить вывод ls команда в файл ls-output.txt вместо экрана:


[я @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt

[я @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt


Здесь мы создали длинный список / USR / бен каталог и отправил результаты в файл

ls-output.txt. Давайте рассмотрим перенаправленный вывод команды:


[я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 167878 2016 02:01 ls-output.txt

[я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 167878 2016 02:01 ls-output.txt


Хороший; красивый большой текстовый файл. Если мы посмотрим на файл с Меньше, мы увидим, что файл

ls-output.txt действительно содержит результаты нашей команды ls:


[я @ linuxbox ~] $ меньше ls-output.txt

[я @ linuxbox ~] $ меньше ls-output.txt


Теперь давайте повторим наш тест перенаправления, но на этот раз с изюминкой. Мы изменим имя каталога на несуществующее:



[я @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt

ls: нет доступа к / bin / usr: нет такого файла или каталога

[я @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt

ls: нет доступа к / bin / usr: нет такого файла или каталога


Мы получили сообщение об ошибке. Это имеет смысл, поскольку мы указали несуществующий каталог / bin / usr, но почему сообщение об ошибке отображается на экране, а не перенаправляется в файл ls-output.txt? Ответ в том, что ls программа не отправляет сообщения об ошибках на стандартный вывод. Вместо этого, как и большинство хорошо написанных программ Unix, он отправляет свои сообщения об ошибках в стандартную ошибку. Поскольку мы перенаправляли только стандартный вывод, а не стандартную ошибку, сообщение об ошибке все равно отправлялось на экран. Посмотрим как

Перенаправление стандартного вывода


чтобы перенаправить стандартную ошибку всего за минуту, но сначала давайте посмотрим, что случилось с нашим выходным файлом:



[я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 0 2016 02:01 ls-output.txt

[я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 0 2016 02:01 ls-output.txt


Теперь файл имеет нулевую длину! Это потому, что, когда мы перенаправляем вывод с помощью оператора перенаправления «>», целевой файл всегда перезаписывается с начала. Поскольку наш ls Команда не выдала результатов, а только сообщила об ошибке, операция перенаправления началась с перезаписи файла, а затем остановилась из-за ошибки, что привело к его усечению. Фактически, если нам когда-нибудь понадобится действительно обрезать файл (или создать новый пустой файл), мы можем использовать такой трюк:



[я @ linuxbox ~] $ > ls-output.txt

[я @ linuxbox ~] $ > ls-output.txt


Простое использование оператора перенаправления без предшествующей команды приведет к усечению существующего файла или созданию нового пустого файла.

Итак, как мы можем добавить перенаправленный вывод в файл вместо перезаписи файла с самого начала? Для этого мы используем оператор перенаправления «>>», например:



[я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt

[я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt


Использование оператора «>>» приведет к добавлению вывода к файлу. Если файл еще не существует, он создается так же, как если бы использовался оператор «>». Давайте проверим это:



[я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 503634 2016 02:01 ls-output.txt

[я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [я @ linuxbox ~] $ ls -l ls-output.txt

-rw-rw-r-- 1 мне я 503634 2016 02:01 ls-output.txt


Мы повторили команду трижды, в результате чего размер выходного файла был втрое больше.


Лучшие облачные вычисления для ОС в OnWorks: