Некоторые практические примеры внесут больше ясности: ls > dirlist 2>&1 направит как стандартный вывод, так и стандартную ошибку в файл dirlist, в то время как команда ls 2>&1 > dirlist направит только стандартный вывод в dirlist. Это может быть полезным вариантом для программистов. Существует сложность: не следует путать использование амперсанда здесь с использованием его в разделе "Интерактивные процессы", где амперсанд используется для запуска процесса в фоновом режиме. В данном случае он просто служит признаком того, что число, которое следует за ним, является не именем файла, а местом, на которое указывается потоку данных. Также отметим, что символ "больше, чем" не должен быть отделен пробелами от номера дескриптора файла. Если он будет отделен, мы снова укажем на вывод в файл. Пример ниже демонстрирует это: [nancy@asus /var/tmp]$ ls 2> tmp [nancy@asus /var/tmp]$ ls -l tmp -rw-rw-r-- 1 nancy nancy 0 Sept 7 12:58 tmp [nancy@asus /var/tmp]$ ls 2 > tmp ls: 2: No such file or directoryПервая команда, которую выполняет nancy, правильна (даже несмотря на отсутствие ошибок, и поэтому файл, в который перенаправлялась стандартная ошибка пуст). Вторая команда предполагает, что 2 - это имя файла, которого в данном случае нет, поэтому отображается ошибка. Все эти особенности подробно описаны в info-страницах Bash. ПримерыАнализ ошибокЕсли ваш процесс порождает много ошибок, есть способ тщательно их изучить:command 2>&1 | less Такое часто используется при создании нового программного обеспечения с использованием команды make, так как здесь: andy:~/newsoft> make all 2>&1 | less --output ommitted-- Отделение стандартного вывода от стандартной ошибкиКонструкции подобные этим часто используется программистами, в результате вывод отображается в одном окне терминала, а ошибки в другом. Сначала выясняется, какой псевдо терминал вы используете выдачей команды tty.andy:~/newsoft> make all 2> /dev/pts/7 Одновременная запись в вывод и в файлыВы можете использовать команду tee для копирования ввода на стандартный вывод и один или несколько выходных файлов за один раз. Использование опции -a c tee в результате добавляет ввод в файл(ы). Эта команда полезна, если вы хотите как увидеть, так и сохранить вывод. Операторы > и >> не позволяют выполнить оба действия одновременно.Этот инструмент обычно называется подачей на конвейер (|), что демонстрируется в следующем примере: mireille ~/test> date | tee file1 file2 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> cat file1 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> cat file2 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> uptime | tee -a file2 11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26 mireille ~/test> cat file2 Thu Jun 10 11:10:34 CEST 2004 11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26 ФильтрыКогда программа выполняет операции с вводом и записывает результат в стандартный вывод, она называется фильтром. Одним из наиболее распространенных видов использования фильтров является использование по реогранизованному выводу. Ниже мы обсудим несколько наиболее важных фильтров.Дополнительная информация о grepКак мы уже видели в разделе "Команда grep", grep сканирует строку вывода через строку поиска по определенным шаблонам. Все строки, содержащие шаблон будут распечатаны на стандартном выводе. Такое поведение может быть отменено путем использования опции -v.Некоторые примеры: допустим, мы хотим знать, какие файлы в определенной директории были изменены в феврале: jenny:~> ls -la | grep Feb Команда grep, как и большинство команд, учитывает регистр. Используйте опцию -i, чтобы не учитывать различие между верхним и нижним регистром. Также доступны многие расширения GNU, например --color, который полезен для подсветки терминов поиска в длинных строках, и --after-context, который печатает число строк после последней совпавшей строки. Вы можете оформить рекурсивных grep, который ищет во всех подкаталогах встречающихся каталогов, с помощью опции -r. Как обычно, опции могут быть объединены. Регулярные выражения могут быть использованы для более подробной детализации совпадений, которые вы хотите выбрать из всех строк ввода. Лучшим способом познакомиться с регулярными выражениями является чтение документации по grep. Отличная глава включена в info-страницу grep. Поскольку обсуждение вводов и выводов регулярных выражений завело бы нас слишком далеко, настоятельно рекомендуется начать с документации, если вы хотите знать о них больше. Поиграйте немного с grep, это займет у вас какое-то время для изучения этой самой базовой, но очень мощной команды фильтрации. Упражнения в конце этой главы помогут вам начать работу, см. раздел 5.5. "Упражнения". Фильтрация выводаКоманда sort по умолчанию сортирует строки в алфавитном порядке:thomas:~> cat people-I-like | sort Auntie Emmy Boyfriend Dad Grandma Mum My boss Но есть множество другого, что sort может делать. Просмотр размера файла, например. С помощью этой команды, содержимое каталога сортируется от наименьших файлов в начале, до самых больших в конце: ls -la | sort -nk 5
Старый синтаксис sort.
Команда sort также используется в сочетании с программой uniq (или sort -u) для сортировки вывода и отфильтровывания двойных записей:Вы можете получить тот же результат с ls -la | sort +4n, но это старая форма, которая не соответствует текущим стандартам. thomas:~> cat itemlist 1 4 2 5 34 567 432 567 34 555 thomas:~> sort itemlist | uniq 1 2 34 4 432 5 555 567 |