Найти в Дзене
Легко в’IT

Потоки ввода и вывода в консоли

#Технологии #ОС #Компьютер #Команды На своем курсе по ОС Linux, я достаточно много внимания уделяю перенаправлению потоков вывода от одной команды к другой, так как именно умение объединив несколько команд получить какой-нибудь сложный результат - это и есть та магия, которая становится доступной тебе в терминале. Но обо всем по порядку. Базово в командной строке, есть два потока: поток ввода, когда ты что-то пишешь с клавиатуры и поток вывода, когда команда отдает тебе результат своей работы. если ты просто выполнишь команду из тех, что я уже когда-то давал, например, ping ya.ru, то увидишь что-то вроде: PING ya.ru (77.88.55.242): 56 data bytes 64 bytes from 77.88.55.242: icmp_seq=0 ttl=247 time=22.227 ms 64 bytes from 77.88.55.242: icmp_seq=1 ttl=247 time=17.139 ms 64 bytes from 77.88.55.242: icmp_seq=2 ttl=247 time=20.239 ms 64 bytes from 77.88.55.242: icmp_seq=3 ttl=247 time=17.235 ms ... Это команда ping отправила в стандартный поток вывода результат своей работы. Признаюсь: я нем

#Технологии #ОС #Компьютер #Команды

На своем курсе по ОС Linux, я достаточно много внимания уделяю перенаправлению потоков вывода от одной команды к другой, так как именно умение объединив несколько команд получить какой-нибудь сложный результат - это и есть та магия, которая становится доступной тебе в терминале. Но обо всем по порядку.

Базово в командной строке, есть два потока: поток ввода, когда ты что-то пишешь с клавиатуры и поток вывода, когда команда отдает тебе результат своей работы. если ты просто выполнишь команду из тех, что я уже когда-то давал, например, ping ya.ru, то увидишь что-то вроде:

PING ya.ru (77.88.55.242): 56 data bytes
64 bytes from 77.88.55.242: icmp_seq=0 ttl=247 time=22.227 ms
64 bytes from 77.88.55.242: icmp_seq=1 ttl=247 time=17.139 ms
64 bytes from 77.88.55.242: icmp_seq=2 ttl=247 time=20.239 ms
64 bytes from 77.88.55.242: icmp_seq=3 ttl=247 time=17.235 ms
...

Это команда ping отправила в стандартный поток вывода результат своей работы.

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

ping ya 2> error.log

напишет ошибку не в консоль, а уже в файл error.log. Попробуй самостоятельно. Такая штука бывает полезна, когда тебе нужно где-то сохранить поток ошибок, чтобы потом их проанализировать, например при компилляции программы или запуске пакетного менеджера, того же npm.

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

echo "Привет" > hi.txt
echo "Мир" >> hi.txt

Опять же, попробуй ввести эти команды и посмотри, что получится в файлике hi.txt

На этом пока все, чтобы не распылять твое внимание, завтра будем строить целые конвейеры из команд