Команда cat в Linux: как и когда её использовать

Что такое cat?
cat — сокращение от «concatenate» (объединять). Это простая утилита для склеивания текста из одного или нескольких файлов и отправки результата на стандартный вывод (терминал) или в файл. В большинстве дистрибутивов Linux cat входит в пакет coreutils; в минималках и живых системах часто используется версия из BusyBox.
Краткое определение терминов:
- STDIN — стандартный ввод, обычно клавиатура или вывод предыдущей программы в конвейере.
- STDOUT — стандартный вывод, обычно терминал или ввод следующей программы.
Использование cat со стандартным вводом и выводом
cat принимает данные как из файлов, так и из стандартного ввода, поэтому её удобно использовать в сочетании с перенаправлением и конвейерами.
Примеры команд:
cat | some_programcat file.txtcat file1 file2Если вызвать cat без аргументов, она будет ждать ввода с клавиатуры. Наберите текст и завершите ввод сочетанием Ctrl+D (EOF). Чтобы записать ввод в файл, используйте перенаправление:
cat > some_file
# Введите строки, затем Ctrl+DЧтобы дописать в файл, используйте >>:
cat >> some_fileВажное замечание: многие утилиты могут сами читать файлы и STDIN — поэтому конвейер с cat часто избыточен.
Когда использование cat избыточно (UUOC)
Термин UUOC (Useless Use Of cat) описывает ситуации, когда cat применяется перед командой, которая уже умеет читать файл или STDIN. Примеры “плохого” и “хорошего” использования:
Плохо:
cat file | grep patternЛучше:
grep pattern fileПлохо:
cat file | wc -lЛучше:
wc -l < file
# или
wc -l fileUUOC не всегда ошибка — иногда cat упрощает синтаксис в скриптах или помогает с нестандартными потоками. Но проверяйте man-страницу команды, прежде чем использовать cat в пайплайне.
Практические приёмы и альтернативы
Когда cat хороша:
- Быстро вывести файл в терминал: cat file.txt
- Объединить несколько файлов и перенаправить результат: cat a b > c
- Создать файл из пользовательского ввода: cat > newfile
- Быстро вставить содержимое в другой процесс через конвейер, если это очевиднее, чем использовать редирект
Альтернативы и дополнения:
- less или most — постраничный просмотр больших файлов
- head / tail — показать начало/конец файла
- nl — нумерация строк
- tac — вывод в обратном порядке
- sed/awk — фильтрация и преобразование потока
- pv — показать прогресс при передаче больших файлов
- lolcat — цветное оформление вывода (развлекательный фильтр)
Примеры полезных сочетаний:
# Просмотреть файл с нумерацией строк
nl file.txt | less
# Быстро найти строку в сжатом дампе
zcat dump.gz | grep ERROR
# Выдать первые 100 строк из нескольких файлов
cat a b c | head -n 100Когда cat не подходит — контрпримеры
- При просмотре больших логов лучше использовать less, иначе терминал забьётся.
- При анализе бинарных файлов cat выдаст нечитаемый мусор — используйте hexdump или strings.
- В многопоточных сценариях записи в один файл с помощью cat > может привести к потере данных; применяйте блокировки или atomic-операции.
Мини‑методология: как принять решение — cat или нет
- Нужно ли просто вывести файл в терминал? — Да: cat.
- Нужно ли просмотр постранично? — Нет: less.
- Передаёте ли вы выход в команду, которая может прочитать файл напрямую? — Тогда используйте файл как аргумент.
- Требуется ли предобработка (фильтрация, подсчёт)? — sed/awk/grep лучше подходят.
Чек‑лист по ролям
Sysadmin:
- Используйте cat для объединения конфигураций перед отправкой по сети.
- Избегайте UUOC в автоматизированных скриптах.
Разработчик:
- Для быстрого вывода тестовых данных cat удобна.
- Для парсинга больших файлов используйте стриминг-инструменты (awk, jq для JSON).
Новичок:
- Учитесь отличать STDIN и аргументы команд.
- Пробуйте заменять cat file | cmd на cmd file.
Краткая шпаргалка (cheat sheet)
cat file # вывести файл
cat file1 file2 > out # объединить файлы
cat >> file # дописать в файл (ввод до Ctrl+D)
command < file # подать файл в STDIN команды
cmd file # если команда принимает файл — предпочтительнееКритерии приёмки
- Команда корректно выводит содержимое файла в терминал.
- Скрипты не используют cat в конвейерах там, где команда принимает файл.
- Для больших файлов применён постраничный просмотр (less/most).
Рекомендации по безопасности и совместимости
- Не используйте cat для бинарных файлов без фильтрации — это может испортить терминал.
- Версии cat из coreutils и BusyBox совместимы по базовым функциям, но расширенные опции могут отличаться.
Короткое резюме
cat — простая и удобная утилита для вывода и объединения текстовых файлов. Она остаётся незаменимой для быстрых задач, но в пайплайнах часто избыточна: сначала проверьте, принимает ли целевая команда файлы или STDIN. Для просмотра больших файлов, нумерации строк и фильтрации лучше применять специализированные инструменты.
Важные моменты:
- Проверяйте man-страницы перед использованием cat в пайплайне.
- Используйте less/head/tail для больших файлов.
- Помните о различиях между coreutils и BusyBox при переносе скриптов.
Похожие материалы
Aitum Vertical Plugin для OBS — вертикальный стриминг
Как отформатировать SD‑карту на Mac
Перенос чатов WhatsApp с iPhone на Android
Как снимать ночью: избавляемся от смаза
Как блокировать мошеннические номера и спам‑звонки