TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #153 7.7K
Операторы перенаправления ввода-вывода [1]

Недавно мы вот узнали, через какие потоки процесс пишет и читает данные. Теперь пора глянуть на операторы оболочки, которые позволяют перенаправлять потоки на разные источники данных. Например, вывод одной команды подать на вход другой либо записать stdout, stderr в файл.

Сделаем серию из 3 постов. Сегодня рассмотрим операторы для перенаправления вывода STDOUT и STDERR: >, >>. В следующие разы поговорим про STDIN и завершим тему оператором '|'.

Перенаправление потоков вывода:

Предположим, вы хотите создать файл, в который будет записан вывод STDOUT какой-то программы (разберем на примере date).

Для того, чтобы данные оказались в файле, нужно добавить символ '>' после команды и перед именем целевого файла:


$ date > date.txt
$ cat date.txt
Sat Dec 14 20:50:46 MSK 2024


Перенаправление вывода с использованием '>' создаст новый файл или полностью перезапишет содержимое существующего.

Использование '>>' позволяет также создать новый файл при отсутствии и добавить данные в его конец - без полной перезаписи:


$ date >> date.txt
$ cat date.txt
Sat Dec 14 20:50:46 MSK 2024
Sat Dec 14 20:51:40 MSK 2024


Подчеркну, что перенаправляется только STDOUT. Если программа писала ошибки в поток STDERR, они так и выведутся в терминал:


$ find /etc -type f > ~/results.txt
find: ‘/etc/ssl/private’: Permission denied


Давайте дополнительно обработаем и STDERR - для этого нам явно нужно указать номер целевого дескриптора "2>":


$ find /etc -type f > ~/results.txt 2> ~/errors.txt

$ cat ~/errors.txt
find: ‘/etc/ssl/private’: Permission denied


Также бывает полезно подчистить вывод какой-нибудь команды от всех ошибок. Для этого нам нужно перенаправить STDERR в "/dev/null":


$ find /etc -type f 2> /dev/null


Все, что попадает в "/dev/null" исчезает на веки вечные. Такой себе "black hole".

И, наконец, если нужно, чтобы всё попало в один файл, можно перенаправить оба потока в одно и то же место:


$ ls > /tmp/lsdata 2>&1
$ ls &> /tmp/lsdata


Выражение "2>&1" означает «отправлять stderr туда, куда направляется stdout».

LinuxCamp
  • 👍 41
  • 🔥 8
  • ❤‍🔥 5
  • 🤝 2
  • 🌭 1
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →