Linux notes #5 — Стандартные потоки

Стандартные потоки — основная форма общения между пользователем, ОС и ПО.

Существует 3 вида:

  • Стандартный ввод (stdin) — предназначен для чтения ввода данных, например с клавиатуры (по сути когда вы вводите команды в терминале, вы вводите их в stdin)
  • Стандартный вывод (stdout) — предназначен для вывода данных. По умолчанию данные выводятся на экран, но можно перенаправить их в файл или другой поток. Как пример работы stdout — команда ls.
  • Стандартный поток ошибок (stderr) — предназначен для вывода сообщений об ошибках. Бывает полезен при отладке, так как сообщения об ошибках можно перенаправить в отдельный файл.

Символ stdin знак меньше (<). Например считаем данные командой cat из стандартного потока ввода и передадим на стандартный поток вывода.

[root@almalinux linux_rhca]# cat < file
text1
text2
text3

Символ stdout знак больше (>). Например направим результат работы команды ls в файл

[root@almalinux devops]# ls > file
[root@almalinux devops]# cat file
ansible
file
linux_rhca

Как видите результат работы команды вместо вывода на экран, сохранился в файле

Команда echo выводит на экран аргумент, переданный ей в командной строке, а с помощью перенаправления мы можем записать все это в файл

[root@almalinux devops]# echo "Hello" > result.txt
[root@almalinux devops]# cat result.txt
Hello

Стоит отметить, что при использовании > содержимое файл перезаписывается, но мы можем и добавить текст в него. Для этого есть знак >>

[root@almalinux devops]# echo "Hello Hello" >> result.txt
[root@almalinux devops]# cat result.txt
Hello
Hello Hello

Стандартный поток ошибок можно также перенаправить в файл, для этого используется 2>

[root@almalinux devops]# ls /nofolder 2> error.log
[root@almalinux devops]# cat error.log
ls: cannot access '/nofolder': No such file or directory

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

Как видите, стандартные потоки ввода и вывода в Linux позволяют обмениваться данными между командами и файлами.