cat
Вывод содержимого файла в стандартный поток вывода
Описание
cat (сокращение от concatenate) — одна из самых базовых утилит Unix/Linux, появившаяся ещё в первых версиях Unix в начале 1970-х годов. Команда читает один или несколько файлов и выводит их содержимое последовательно в стандартный поток вывода (stdout). Несмотря на кажущуюся простоту, cat чрезвычайно универсальна и используется ежедневно системными администраторами и разработчиками.
Основных сценария использования три: быстрый просмотр небольшого файла прямо в терминале, склейка нескольких файлов в один (именно для этого команда и получила своё название) и создание файлов путём перенаправления ввода с клавиатуры. Кроме того, cat часто служит «источником данных» в конвейерах (pipelines) — её вывод передаётся другим командам через символ |.
Важно помнить, что cat выводит весь файл сразу — если файл большой, терминал «пролистнет» его целиком. Для постраничного просмотра больших файлов используйте less или more. Для просмотра только начала или конца файла — head и tail соответственно.
Синтаксис
Компоненты команды:
- cat — имя команды
- [ОПЦИИ] — необязательные флаги, изменяющие поведение (нумерация строк, отображение спецсимволов и т.д.)
- [ФАЙЛ]... — один или несколько файлов для вывода; если файл не указан,
catчитает из стандартного ввода (stdin), что позволяет набирать текст с клавиатуры и завершать ввод по Ctrl+D
Примеры базового синтаксиса
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-n |
Нумеровать все строки вывода, начиная с 1. Полезно при отладке скриптов и при указании номеров строк в сообщениях об ошибках. | cat -n script.sh |
-b |
Нумеровать только непустые строки. В отличие от -n, пустые строки номер не получают. |
cat -b file.txt |
-s |
Сжать последовательные пустые строки: несколько подряд идущих пустых строк заменяются одной. Полезно для «уплотнения» файлов с лишними пустыми строками. | cat -s file.txt |
-A |
Показать все непечатаемые символы: эквивалент -vET. Знак $ обозначает конец строки, ^I — символ табуляции. |
cat -A config.txt |
-v |
Показать непечатаемые символы в виде ^X или M-X нотации, кроме символов табуляции и перевода строки. |
cat -v binary.dat |
-E |
Отображать символ $ в конце каждой строки. Помогает выявить скрытые пробелы в конце строк. |
cat -E file.txt |
-T |
Отображать символы табуляции как ^I. Удобно при проверке отступов в Makefile или Python-коде. |
cat -T Makefile |
-e |
Эквивалент -vE: показывает непечатаемые символы и маркеры конца строки одновременно. |
cat -e file.txt |
-t |
Эквивалент -vT: показывает непечатаемые символы и маркеры табуляции. |
cat -t script.py |
--help |
Вывести краткую справку по использованию команды. | cat --help |
--version |
Вывести информацию о версии утилиты. | cat --version |
Паттерны использования
Быстрый просмотр файла
Вывод небольшого конфига или скрипта прямо в терминал:
# Просмотр конфигурационного файла cat /etc/hostname cat ~/.bashrc # С нумерацией строк для удобной отладки cat -n script.sh
Конкатенация файлов
Склейка нескольких файлов в один — основное предназначение команды:
# Объединить части в один файл cat header.html body.html footer.html > page.html # Добавить лог-файл к общему архиву cat /var/log/app.log >> /var/log/archive.log
Создание файла из stdin
Ввод текста прямо с клавиатуры в файл (завершение — Ctrl+D):
# Создать новый файл интерактивно cat > notes.txt Первая строка заметки Вторая строка ^D ← Ctrl+D для сохранения # Добавить строки к существующему файлу cat >> notes.txt
Отладка скрытых символов
Выявление скрытых пробелов, табуляций и различий окончаний строк (Windows CRLF vs Unix LF):
# Показать конец строк (выявить CRLF) cat -A file.txt # Windows-строки будут выглядеть как: text^M$ # Unix-строки: text$ # Показать только табуляции cat -T Makefile
Использование в конвейере
cat как источник данных для grep, sort, wc и других команд:
# Найти строки с ошибками в логе cat /var/log/syslog | grep ERROR # Подсчитать строки в файле cat file.txt | wc -l # Отсортировать содержимое файла cat words.txt | sort | uniq
Heredoc для создания конфигов
Использование cat с heredoc в скриптах для генерации файлов:
#!/bin/bash # Создать конфиг в скрипте cat > /etc/myapp/config.conf << EOF host=localhost port=8080 debug=false log_level=info EOF echo "Конфиг создан"
Советы и предупреждения
При обсуждении кода с коллегами используйте
cat -n file.py — так удобно ссылаться на конкретные строки: «посмотри на строку 42».
Если файл, пришедший с Windows, ведёт себя странно в Unix-скриптах, запустите
cat -A file.txt. Символ ^M перед $ означает Windows-окончания строк (CRLF). Исправляется командой dos2unix file.txt или sed -i 's/\r//' file.txt.
Для копирования содержимого файла в буфер обмена на Linux используйте
cat file.txt | xclip -selection clipboard или cat file.txt | xsel --clipboard --input.
Конструкция
cat file.txt | grep pattern называется «бесполезным cat» (UUOC — Useless Use Of Cat). Правильнее писать grep pattern file.txt — это быстрее и не создаёт лишний процесс. Однако в учебных целях и для читаемости конвейера использование cat допустимо.
Если файл содержит тысячи строк,
cat выведет всё сразу и «смоет» терминал. Используйте less file.txt для постраничного просмотра или head -n 50 file.txt / tail -n 50 file.txt для просмотра фрагментов.