Linux. Stdin, Stdout, Stderror: различия между версиями
Cless (обсуждение | вклад) (Новая страница: «= Links = https://habr.com/ru/articles/55136/ = Description = * '''0''': '''stdin''' - стандартный ввод * '''1''': '''stdout''' - стандар...») |
Cless (обсуждение | вклад) |
||
| Строка 3: | Строка 3: | ||
= Description = | = Description = | ||
У каждой программы существует 3 системных потока: '''stdout''', '''stderr''', '''stdin'''. | |||
* '''0''': '''stdin''' - стандартный ввод | *'''0''': '''stdin''' - стандартный ввод | ||
* '''1''': '''stdout''' - стандартный вывод | * '''1''': '''stdout''' - стандартный вывод | ||
* '''2''': '''stderr''' | * '''2''': '''stderr''' | ||
=== stdin === | |||
Поток ввода данных. А вот это довольно интересный и удобный поток. Например, его использует вэб-сервер, когда просит интерпретаторы выполнить скрипты через CGI. Мы тоже можем попробовать: | |||
<code>echo '<?php echo «Hello world»; ?>' | php</code> | |||
Hello world | |||
=== stdout === | |||
Стандартный поток вывода данных для программ. Например, когда мы пишем команду ls, то список папок и файлов она выводит именно в этот поток, который отображается у нас в консоли: | |||
<code>ls</code> | |||
bin incoming pub usr | |||
=== stderr === | |||
Поток вывода ошибок. Если программа не смогла сделать все как надо — она пишет именно в этот поток. Например, когда rm пытается удалить несуществующий файл: | |||
<code>rm example.txt</code> | |||
rm: example.txt: No such file or directory | |||
= Examples = | = Examples = | ||
Текущая версия на 19:38, 19 ноября 2023
Links
https://habr.com/ru/articles/55136/
Description
У каждой программы существует 3 системных потока: stdout, stderr, stdin.
- 0: stdin - стандартный ввод
- 1: stdout - стандартный вывод
- 2: stderr
stdin
Поток ввода данных. А вот это довольно интересный и удобный поток. Например, его использует вэб-сервер, когда просит интерпретаторы выполнить скрипты через CGI. Мы тоже можем попробовать:
echo '<?php echo «Hello world»; ?>' | php
Hello world
stdout
Стандартный поток вывода данных для программ. Например, когда мы пишем команду ls, то список папок и файлов она выводит именно в этот поток, который отображается у нас в консоли:
ls
bin incoming pub usr
stderr
Поток вывода ошибок. Если программа не смогла сделать все как надо — она пишет именно в этот поток. Например, когда rm пытается удалить несуществующий файл:
rm example.txt
rm: example.txt: No such file or directory
Examples
В этом примере мы направили stdout команды ls в файл 1.txt. Читаем его:
ls >1.txt
Здесь мы использовали номер потока stderr (2). По умолчанию оператор > перенаправляет поток stdout, который имеет номер 1. Чтобы направить другой поток, надо перед оператором > поставить его номер.
rm example.txt 2>1.txt
STDOUT и STDERR (весь вывод) скрипта в файл:
/mnt/raid1/data/scripts/zfs_replication_mail02-mail.sh > /mnt/raid1/data/log/zfs_replication_mail02-mail.log 2>&1
Мы можем направлять одни потоки в направлении других.
В этом примере мы направили поток stdout в файл 1.txt, а затем направили stderr туда же, куда направлен stdout с помощью оператора & перед номером потока.
rm exmple.txt >1.txt 2>&1
Команда find с параметром. выводит в stdout все вложенные папки и файлы, которые находит в данной папке и во всех вложенных.
Оператор | перенаправляет stdout одного приложения в stdin следующего. То есть все строки найденные с помощью find пошли в команду grep, которая выбирает строки по определенным условиям и выводит их. Здесь условие — это регулярное выражение, которое говорит о том, что строка должна заканчиваться на "/.svn".
Теперь нам надо выбрать только папки с именем ".svn":
find . | grep -e '/.svn$'