linux view-edit

cat

Вывод содержимого файла в стандартный поток вывода

Описание

cat (сокращение от concatenate) — одна из самых базовых утилит Unix/Linux, появившаяся ещё в первых версиях Unix в начале 1970-х годов. Команда читает один или несколько файлов и выводит их содержимое последовательно в стандартный поток вывода (stdout). Несмотря на кажущуюся простоту, cat чрезвычайно универсальна и используется ежедневно системными администраторами и разработчиками.

Основных сценария использования три: быстрый просмотр небольшого файла прямо в терминале, склейка нескольких файлов в один (именно для этого команда и получила своё название) и создание файлов путём перенаправления ввода с клавиатуры. Кроме того, cat часто служит «источником данных» в конвейерах (pipelines) — её вывод передаётся другим командам через символ |.

Важно помнить, что cat выводит весь файл сразу — если файл большой, терминал «пролистнет» его целиком. Для постраничного просмотра больших файлов используйте less или more. Для просмотра только начала или конца файла — head и tail соответственно.

Синтаксис

cat [ОПЦИИ] [ФАЙЛ]...

Компоненты команды:

Примеры базового синтаксиса

# Вывод одного файла cat file.txt # Конкатенация нескольких файлов cat file1.txt file2.txt file3.txt # Запись объединённых файлов в новый файл cat file1.txt file2.txt > combined.txt # Добавление содержимого файла в конец другого cat extra.txt >> existing.txt # Чтение из stdin (завершение: Ctrl+D) cat > new_file.txt

Флаги и опции

Флаг Описание Пример
-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 "Конфиг создан"

Советы и предупреждения

Совет: нумерация строк для code review
При обсуждении кода с коллегами используйте cat -n file.py — так удобно ссылаться на конкретные строки: «посмотри на строку 42».
Совет: проверка encoding и line endings
Если файл, пришедший с 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.
Предупреждение: useless use of cat
Конструкция cat file.txt | grep pattern называется «бесполезным cat» (UUOC — Useless Use Of Cat). Правильнее писать grep pattern file.txt — это быстрее и не создаёт лишний процесс. Однако в учебных целях и для читаемости конвейера использование cat допустимо.
Предупреждение: не используйте cat для больших файлов
Если файл содержит тысячи строк, cat выведет всё сразу и «смоет» терминал. Используйте less file.txt для постраничного просмотра или head -n 50 file.txt / tail -n 50 file.txt для просмотра фрагментов.