Шпаргалка

# === 1. ВЫВОД (STDOUT / STDERR) ===
command > file            # stdout => file (перезапись)
command >> file           # stdout => file (добавление)
command 2> file           # stderr => file (перезапись)
command 2>> file          # stderr => file (добавление)
 
command &> file           # bash: stdout+stderr => file (перезапись)
command &>> file          # bash: stdout+stderr => file (добавление)
command > file 2>&1       # stdout => file, stderr => туда же (универсально для sh/bash)
 
# === 2. ВВОД (STDIN) ===
command < file            # stdin <= file
command <<EOF             # here-doc: stdin <= строки до EOF (с подстановкой $переменных)
... текст, $USER ...
EOF
 
command <<'EOF'           # here-doc без подстановки переменных (кавычки отключают $)
$USER останется как $USER
EOF
 
command <<-EOF            # here-doc: удаляет начальные ТАБЫ (удобно для отступов в скриптах)
	строка с отступом табом
EOF
 
command <<< "text"        # here-string: stdin <= "text\n"
 
# === 3. ИГНОРИРОВАНИЕ ВЫВОДА ===
command > /dev/null       # отбросить stdout
command 2> /dev/null      # отбросить stderr
command &> /dev/null      # отбросить оба потока (bash)
command > /dev/null 2>&1  # отбросить оба потока (универсально)
 
# === 4. ГРУППИРОВКА КОМАНД ===
{ cmd1; cmd2; } > file    # группа в ТЕКУЩЕМ shell (обязательны пробелы и ';' в конце!)
( cmd1; cmd2 ) > file     # группа в SUBSHELL (изолированное окружение)
 
# === 5. ДЕСКРИПТОРЫ И УПРАВЛЕНИЕ СЕССИЕЙ (EXEC) ===
exec > file 2>&1          # перенаправить stdout+stderr ВСЕГО текущего shell/скрипта
exec 3> log               # открыть log как FD 3 на запись
echo "msg" >&3            # писать в FD 3
exec 3>&-                 # закрыть FD 3 (полезно закрывать за собой!)
 
# === 6. КОНВЕЙЕРЫ (PIPES) ===
command 2>&1 | other      # объединить stdout+stderr и направить в stdin 'other'
command |& other          # bash: то же самое (сокращение)
 
# === 7. ПОДСТАНОВКА ПРОЦЕССОВ (PROCESS SUBSTITUTION) ===
diff <(cmd1) <(cmd2)      # чтение: вывод команд оформляется как временные файлы
command | tee >(cmd1) >(cmd2)  # запись: разветвление вывода в несколько команд

Чуть объяснений

= 1. ВЫВОД (STDOUT / STDERR) =

command > file            # Очищает file и пишет туда то, что команда вывела бы на экран
command >> file           # Не удаляет старое, а ДОПИСЫВАЕТ новый вывод в конец file
command 2> file           # Пишет в file ТОЛЬКО ошибки (сообщения об ошибках)
command 2>> file          # ДОПИСЫВАЕТ только ошибки в конец file
 
command &> file           # (Bash) Пишет И обычный вывод, И ошибки в один file (перезапись)
command &>> file          # (Bash) ДОПИСЫВАЕТ и обычный вывод, и ошибки в file
command > file 2>&1       # (Стандарт) Сначала направил вывод в file, а потом ошибки туда же

= 2. ВВОД (STDIN) =

command < file            # Заставляет команду читать данные ИЗ файла, а не ждать ввода с клавиатуры
command <<EOF             # Ввод прямо из терминала: передаёт всё, что ты пишешь, пока не встретит слово EOF
... текст, $USER ...      # ($USER превратится в твоё имя)
EOF
 
command <<'EOF'           # Всё то же самое, но кавычки отключают подстановку
$USER останется как $USER # ($USER останется просто текстом "$USER")
EOF
 
command <<-EOF            # То же самое, но игнорирует табуляцию в начале строк (удобно для красивых отступов в коде)
	строка с отступом
EOF
 
command <<< "text"        # Вбрасывает одну строку "text" на вход команде (быстрее, чем echo "text" | ...)

= 3. ИГНОРИРОВАНИЕ ВЫВОДА =

command > /dev/null       # Прячет обычный вывод (выкидывает в виртуальное «ведро»)
command 2> /dev/null      # Прячет только ошибки (чтобы не засорять экран)
command &> /dev/null      # (Bash) Полная тишина: выкидывает ВСЁ (и вывод, и ошибки)
command > /dev/null 2>&1  # (Стандарт) Полная тишина для любых командных оболочек

= 4. ГРУППИРОВКА КОМАНД =

{ cmd1; cmd2; } > file    # Запускает команды по очереди в текущем терминале и пишет их ВСЕХ общий вывод в file
( cmd1; cmd2 ) > file     # Создает изолированную «песочницу» (subshell), выполняет там команды и пишет вывод в file

= 5. ДЕСКРИПТОРЫ И УПРАВЛЕНИЕ СЕССИЕЙ (EXEC) =

exec > file 2>&1          # Переключатель: отныне ВСЕ следующие команды в скрипте будут писать в file вместо экрана
exec 3> log               # Создает твой личный виртуальный канал №3, привязанный к файлу log
echo "msg" >&3            # Шлёт строку "msg" напрямую в твой канал №3 (а значит, в log)
exec 3>&-                 # Закрывает канал №3 (убирает за собой мусор)

= 6. КОНВЕЙЕРЫ (PIPES) =

command 2>&1 | other      # Берёт И обычный вывод, И ошибки первой команды и отправляет на вход второй
command |& other          # (Bash) То же самое, но записано в 2 раза короче

= 7. ПОДСТАНОВКА ПРОЦЕССОВ (PROCESS SUBSTITUTION) =

diff <(cmd1) <(cmd2)      # Запускает cmd1 и cmd2 и подсовывает их результаты в diff так, будто это два готовых файла на диске
command | tee >(cmd1) >(cmd2) # Берёт вывод первой команды и отправляет его КОПИИ одновремен