Linux

6.1 Стандартные потоки

В Linux каждый процесс имеет три стандартных потока для ввода и вывода данных.

stdin (0) — стандартный ввод

Поток для чтения данных. По умолчанию это клавиатура.

cat                    # читает из stdin (клавиатура)
# Нажмите Ctrl+D для завершения ввода

stdout (1) — стандартный вывод

Поток для вывода обычных данных. По умолчанию это экран терминала.

echo "Hello World"     # выводит в stdout
ls                    # выводит список файлов в stdout

stderr (2) — стандартный поток ошибок

Поток для вывода сообщений об ошибках. По умолчанию это тоже экран терминала.

ls nonexistent_file   # ошибка выводится в stderr
# ls: cannot access 'nonexistent_file': No such file or directory

Разделение потоков

Важно понимать: stdout и stderr — это разные потоки. Это позволяет обрабатывать обычный вывод и ошибки отдельно.
# Команда выводит и обычные данные, и ошибки
ls existing_file nonexistent_file
# existing_file          ← stdout
# ls: cannot access...   ← stderr

6.2 Перенаправление вывода

Перенаправление позволяет отправлять вывод команд в файлы или другие программы.

Перенаправление stdout

echo "Hello" > file.txt    # записать в файл (перезаписать)
echo "World" >> file.txt   # добавить в файл
ls > files.txt             # сохранить список файлов

Перенаправление stderr

ls nonexistent 2> error.log    # перенаправить ошибки в файл
ls existing 2> error.log       # ошибок нет, файл останется пустым

Перенаправление обоих потоков

ls existing nonexistent > output.log 2>&1
# Перенаправить и stdout, и stderr в один файл

ls existing nonexistent &> output.log
# Сокращенная запись (bash)

Отбрасывание вывода

ls > /dev/null              # отбросить stdout
ls 2> /dev/null            # отбросить stderr
ls > /dev/null 2>&1        # отбросить все
/dev/null — это специальный файл, который "поглощает" все данные. Полезен для подавления нежелательного вывода.

6.3 Перенаправление ввода

Перенаправление ввода позволяет читать данные из файла вместо клавиатуры.

Перенаправление stdin

cat < file.txt              # читать из файла
sort < unsorted.txt         # сортировать файл
wc -l < file.txt            # подсчитать строки в файле

Heredoc — многострочный ввод

cat << EOF
Строка 1
Строка 2
Строка 3
EOF
# Создает временный файл с содержимым между EOF

Here-string — ввод из переменной

text="Hello World"
wc -w <<< "$text"           # подсчитать слова в переменной

Практические примеры

# Отправить письмо из файла
mail user@example.com < message.txt

# Создать архив из списка файлов
tar -czf archive.tar.gz -T filelist.txt

# Выполнить команды из файла
bash < script.sh

6.4 Конвейеры (Pipes)

Конвейер (|) передает stdout одной команды в stdin другой команды. Это основа мощных командных конструкций.

Базовое использование

ls -la | grep "txt"         # найти файлы .txt
ps aux | grep firefox       # найти процессы firefox
cat file.txt | sort         # отсортировать файл

Цепочки команд

ls -la | grep "txt" | wc -l     # подсчитать .txt файлы
ps aux | grep firefox | awk '{print $2}'  # получить PID firefox
cat log.txt | grep ERROR | sort | uniq    # уникальные ошибки

Полезные команды для конвейеров

grep — поиск текста

ps aux | grep python        # найти процессы python
ls -la | grep -v "txt"      # исключить .txt файлы
cat file.txt | grep -i error # поиск без учета регистра

sort — сортировка

ls -la | sort -k5 -nr       # сортировать по размеру (убывание)
cat names.txt | sort        # отсортировать имена

uniq — удаление дубликатов

cat file.txt | sort | uniq  # уникальные строки
cat file.txt | sort | uniq -c  # с подсчетом

head и tail — начало и конец

ls -la | head -10           # первые 10 файлов
ps aux | tail -5            # последние 5 процессов

Сложные примеры

# Найти 5 самых больших файлов
find /home -type f -exec ls -la {} \; | sort -k5 -nr | head -5

# Мониторинг логов в реальном времени
tail -f /var/log/syslog | grep ERROR

# Статистика использования команд
history | awk '{print $2}' | sort | uniq -c | sort -nr | head -10
Обратите внимание: stderr не передается через конвейер. Для передачи ошибок используйте 2>&1.

Настройки

Цветовая схема

Тема