Стандартные потоки: ввода/вывода/ошибок
- В Linux любая работающая программа, или процесс имеют три канала связи:
- Канал получения данных (стандартный поток ввода, №0 или "stdin");
- Канал вывода данных (стандартный поток вывода, №1 или "stdout");
- Канал для вывода информации об ошибках (стандартный поток ошибок, №2 или "stderr").
Перенаправление стандартных потоков
Один символ > означает, что файл будет перезаписан. Два символа >> означает, что файл будет дополнен.
Перенаправление потока stdout в файл:
Файл будет создан или перезаписан
Файл будет создан или перезаписан
> file.txtФайл будет создан или дополнен
>> file.txtнапример
ls > file.txtОбъединение файлов
cat file1.txt file2.txt > file3.txt
Перенаправление потока stderr в файл:
Файл будет создан или перезаписан
Файл будет создан или перезаписан
2> file.txtФайл будет создан или дополнен
2>> file.txtнапример
ls 2> file.txtЕсли ошибки не интересуют, можно их перенаправить в /dev/null
ls 2> /dev/null
Комбинированное перенаправление вывода. Stdout в один файл, stderr - в другой:
> file1.txt 2> file2.txtнапример
ls > file1.txt 2> file2.txt
Объединение потоков stdout и stderr и перенаправление их в один файл:
&> file.txtнапример
ls &> file.txt
Перенаправление потока стандартного ввода stdin:
<например
cat <
wc < file.txt
Конвейеры
Конвейер – это последовательность команд разделенных символом |, связь их каналов стандартного вывода с каналом стандартного ввода. То есть перенаправление stdout одной команды в stdin другой команды.
Перенаправление вывода первой команды в less
ls -l /usr/bin | less
Разветвление конвейера. Взять данные из середины конвейера можно с помощью tee, например
ls -l /usr/bin | tee test5.out | lessвывод и на экран и в файл
ls -l /usr/bin | tee test5.outвывод ошибок в файл
ls -l /usr/bin 2>&1 | tee test5.out