Читаем Командная строка Linux. Полное руководство полностью

выводит содержимое каталогов нерекурсивно и пропускает файлы с именами,

начинающимися с `.’. Для других аргументов без параметров по умолчанию `ls’

выводит только указанный файл. В отсутствие аргументов без параметров `ls’ выводит содержимое текущего каталога, действуя, как если бы была вызвана с единственным аргументом `.’.

По умолчанию вывод сортируется в алфавитном порядке, согласно

--zz-Info: (coreutils.info.gz)команда ls, 63 строки --Top----------

<p>6. Перенаправление</p>

В этом уроке мы познакомимся с самой крутой возможностью командной строки: перенаправлением ввода/вывода. Благодаря этой возможности мы сможем перенаправлять ввод и вывод команд из файлов и в файлы, а также составлять из команд целые конвейеры. Для демонстрации этой возможности введем в обиход следующие команды:

• cat — объединяет файлы.

• sort — сортирует строки текста.

• uniq — сообщает о повторяющихся строках или удаляет их.

• wc — выводит число символов перевода строки, слов и байтов в каждом указанном файле.

• grep — находит и выводит строки, соответствующие шаблону.

• head — выводит первые строки из файла.

• tail — выводит последние строки из файла.

• tee — читает данные со стандартного ввода и записывает в стандартный вывод и в файлы.

<p>Стандартный ввод, вывод и вывод ошибок</p>

Многие программы, которыми мы уже пользовались, что-нибудь выводят на консоль. Этот вывод часто делится на два типа. Первый — результаты работы программы, то есть данные, для получения которых создавалась программа. Второй — сообщения о состоянии или об ошибках, извещающие нас о самочувствии программы. Например, если взглянуть на вывод программы ls, можно увидеть, что она выводит на экран результаты своей работы и иногда сообщения об ошибках.

Согласно центральной идее Unix, что «все сущее есть файл», такие программы, как ls, в действительности выводят свои результаты в специальный файл, который называется стандартным выводом (standard output, часто обозначается как stdout), а сообщения о состоянии — в специальный файл стандартный вывод ошибок (standard error, stderr). По умолчанию оба файла, стандартный вывод и стандартный вывод ошибок, связаны с экраном и не сохраняются на диске.

Кроме того, многие программы принимают ввод из специального файла с названием стандартный ввод (standard input, stdin), который по умолчанию связан с клавиатурой.

Механизм перенаправления ввода/вывода позволяет изменять направление вывода и ввода. Обычно вывод осуществляется на экран, а ввод — с клавиатуры, но механизм перенаправления ввода/вывода позволяет изменить этот порядок вещей.

<p>Перенаправление стандартного вывода</p>

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

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

Здесь мы создали длинный список содержимого файла /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

Неплохой файл получился. Если вывести содержимое ls-output.txt с помощью коман­ды less, можно увидеть, что он действительно содержит результаты работы команды ls:

[me@linuxbox ~]$ less ls-output.txt

Давайте теперь повторим эксперимент с перенаправлением, но с небольшим усложнением: укажем имя несуществующего каталога:

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

ls: невозможно получить доступ к '/bin/usr': Нет такого файла или каталога

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

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

-rw-rw-r-- 1 me me 0 2012-02-01 15:08 ls-output.txt

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители