Основы программирования в Linux | страница 33



Если вы предпочитаете собрать оба набора выводимых данных в одном файле, можно применить оператор >>& для соединения двух выводных потоков. Таким образом, команда

>$ kill -1 1234 >killerr.txt 2>&1

поместит свой вывод и стандартный поток ошибок в один и тот же файл. Обратите внимание на порядок следования операторов. Приведенный пример читается как "перенаправить стандартный вывод в файл killerr.txt, а затем перенаправить стандартный поток ошибок туда же, куда и стандартный вывод". Если вы нарушите порядок, перенаправление выполнится не так, как вы ожидаете.

Поскольку обнаружить результат выполнения команды >kill можно с помощью кода завершения (который будет подробно обсуждаться далее в этой главе), часто вам не потребуется сохранять какой бы то ни было стандартный вывод или стандартный поток ошибок. Для того чтобы полностью отбросить любой вывод, вы можете использовать универсальную "мусорную корзину" Linux, /dev/null, следующим образом:

>$ kill -l 1234 >/dev/null 2>&1

Перенаправление ввода

Также как вывод вы можете перенаправить ввод. Например,

>$ more < killout.txt

Понятно, что это тривиальнейший пример для ОС Linux; команда >more в системе Linux в отличие от своего эквивалента командной строки в ОС Windows с радостью принимает имена файлов в качестве параметров.

Каналы 

Вы можете соединять процессы с помощью оператора канала (>|). В ОС Linux, в отличие от MS-DOS, процессы, соединенные каналами, могут выполняться одновременно и автоматически переупорядочиваться в соответствии с потоками данных между ними. Как пример, можно применить команду >sort для сортировки вывода команды >ps.

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

>$ ps > psout.txt

>$ sort psout.txt > pssort.out

Соединение процессов каналом даст более элегантное решение:

>$ ps | sort > pssort.out

Поскольку вы, вероятно, захотите увидеть на экране вывод, разделенный на страницы, можно подсоединить третий процесс, >more, и все это в одной командной строке:

>$ ps | sort | more

Практически нет ограничений на допустимое количество процессов. Предположим, что вы хотите видеть все имена выполняющихся процессов, за исключением командных оболочек. Можно применить следующую командную строку:

>$ ps -хо соmm | sort | uniq | grep -v sh | more

В ней берется вывод команды >ps, сортируется в алфавитном порядке, из него извлекаются процессы с помощью команды >uniq, применяется утилита >grep -v sh для удаления процесса с именем