Способы оплаты Abuse

Команда cat в Linux: работа с содержимым файлов

12.11.2025, 20:01

Когда работаешь с Linux-сервером, постоянно приходится открывать и смотреть разные файлы. Конфиги, логи, скрипты - всего этого накапливается много. И вот тут появляется команда cat, которая стала одним из первых инструментов, которые осваивает любой администратор.

Название cat расшифровывается как "concatenate", то есть объединять. Но по факту большинство людей используют её просто для быстрого просмотра файлов в терминале. Хотя возможностей у неё намного больше - можно и файлы создавать, и склеивать несколько документов в один, и много чего ещё.

Что делает cat

Утилита входит в стандартный набор GNU coreutils, так что присутствует во всех дистрибутивах по умолчанию. Основные задачи:

  • Вывести содержимое файла на экран.
  • Склеить несколько файлов воедино.
  • Создать новый файл прямо из командной строки.
  • Дописать что-то в конец существующего файла.
  • Пронумеровать строки в документе.
  • Убрать лишние пустые строки.

Звучит просто, но когда разберешься во всех нюансах, понимаешь насколько это мощный инструмент для повседневной работы.

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

Синтаксис максимально простой:

cat [опции] [файл...]

Самый частый вариант - просто показать файл:

cat filename.txt

Вот и всё. Содержимое выводится в терминал, можешь сразу посмотреть что там внутри.

Просмотр файлов

Начнем с самого распространенного применения - когда нужно быстро глянуть что внутри файла.

Один файл

Допустим, нужно посмотреть файл hosts:

cat /etc/hosts

Или проверить конфигурацию nginx:

cat /etc/nginx/nginx.conf

Логи тоже можно посмотреть:

cat /var/log/syslog

Правда с логами осторожнее - если файл огромный, вся эта портянка текста выльется на экран. Для больших файлов лучше использовать less или tail, об этом чуть позже.

Несколько файлов сразу

Можно указать несколько файлов подряд:

cat file1.txt file2.txt file3.txt

Cat выведет их один за другим, без всяких разделителей. Иногда удобно, когда нужно быстро пробежаться глазами по нескольким конфигам.

Пример из практики - посмотреть все сайты в nginx:

cat /etc/nginx/sites-available/*

Нумерация строк

Часто бывает полезно видеть номера строк. Для этого есть опция -n:

cat -n /etc/passwd

Получится примерно так:

  1. root:x:0:0:root:/root:/bin/bash
  2. daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  3. bin:x:2:2:bin:/bin:/usr/sbin/nologin

Если в файле много пустых строк и не хочется их нумеровать, используй опцию -b:

cat -b file.txt

Она пронумерует только строки с текстом, пустые пропустит.

Создание файлов

Тут начинается интересное. Cat умеет не только читать, но и писать.

Создать файл с клавиатуры

Простой способ быстро создать текстовый файл:

cat > newfile.txt

После этого просто начинаешь печатать текст. Каждая строка с Enter. Когда закончишь, жми Ctrl+D - файл сохранится.

Готово, файл test.txt создан.

Heredoc синтаксис

Когда нужно создать файл со скриптом или конфигом, удобнее использовать heredoc:

cat > config.txt << EOF
server {
    listen 80;
    server_name example.com;
    root /var/www/html;
}
EOF

Всё что между << EOF и EOF попадет в файл. Очень удобно в bash-скриптах, когда нужно налету создавать конфиги.

Пустой файл

Можно создать пустой файл через cat:

cat > empty.txt < /dev/null

Хотя проще через touch:

touch empty.txt

Но вариант с cat тоже работает, знать полезно.

Склейка файлов

Вот ради чего cat и получила своё название - concatenate, объединять.

Соединить два файла

Допустим есть file1.txt и file2.txt, нужно их соединить:

cat file1.txt file2.txt > combined.txt

Всё содержимое первого файла, потом второго - всё это окажется в combined.txt.

Собрать все логи

Частая задача - собрать все логи из директории в один файл:

cat /path/to/logs/*.log > all_logs.txt

Получается один большой файл со всеми логами, удобно для анализа или отправки кому-то.

С разделителями

Если нужно различать где кончается один файл и начинается другой:

cat file1.txt <(echo "---") file2.txt <(echo "---") file3.txt > merged.txt

Между файлами появятся разделители из трёх дефисов.

Дописать в конец

Важный момент - оператор > перезаписывает файл полностью. Если нужно дописать в конец, используй >>:

cat file1.txt >> existing_file.txt

Содержимое file1.txt добавится в конец existing_file.txt, ничего не затрётся.

Полезные опции

Разберем основные флаги команды cat.

-n - нумеровать все строки

cat -n file.txt

-b - нумеровать только непустые строки

cat -b file.txt

-s - схлопнуть несколько пустых строк подряд в одну

cat -s file.txt

Полезно когда в файле куча лишних пустых строк.

-E - показать знак доллара в конце каждой строки

cat -E file.txt

Помогает увидеть где на самом деле заканчиваются строки.

-T - показать табы как ^I

cat -T file.txt

-A - показать вообще все невидимые символы

cat -A file.txt

Покажет и концы строк ($), и табы (^I), и возвраты каретки (^M). Последнее особенно полезно когда файл создавался в Windows.

-v - показать непечатаемые символы, кроме табов и переводов строк

cat -v file.txt

Практический пример - убрать дублирующиеся пустые строки:

cat -s messy_file.txt > clean_file.txt

Или проверить файл на скрытые символы:

cat -A suspicious_file.txt

Большие файлы

Тут у cat есть проблема. Если файл весит несколько гигабайт, команда выплюнет его весь в терминал. Неудобно.

Есть несколько решений.

Вариант первый - использовать less для постраничного просмотра:

cat large_file.log | less

Или вообще без cat:

less large_file.log

Второй вариант - посмотреть только начало через head:

cat large_file.log | head -100

Третий - только конец через tail:cat large_file.log | tail -100

Можно комбинировать, чтобы вытащить кусок из середины:

cat large_file.log | head -1000 | tail -100

Покажет строки с 901 по 1000.

Связка с другими командами

Cat хорошо работает в связке с другими утилитами через pipe.

С grep

Найти в файле строки со словом "error":

cat /var/log/syslog | grep -i error

Правда можно обойтись и без cat:

grep -i error /var/log/syslog

Работает одинаково, второй вариант чуть эффективнее.

С wc

Посчитать сколько строк в файле:

cat file.txt | wc -l

Или слов:

cat file.txt | wc -w

Или символов:

cat file.txt | wc -c

С sort

Отсортировать содержимое:

cat names.txt | sort

Отсортировать и убрать дубли:

cat names.txt | sort | uniq

С sed

Заменить текст на лету:

cat file.txt | sed 's/old/new/g'

Все вхождения "old" станут "new".

С awk

Вытащить первую колонку из файла:

cat data.txt | awk '{print $1}'

Реальные примеры

Несколько сценариев из жизни админа.

Быстро глянуть SSH конфиг:

cat /etc/ssh/sshd_config

Создать конфиг для nginx:

cat > /etc/nginx/sites-available/mysite.conf << EOF
server {
    listen 80;
    server_name mysite.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host \$host;
    }
}
EOF

Собрать логи за несколько дней:

cat /var/log/nginx/access.log.1 /var/log/nginx/access.log > all_logs.txt

Дописать запись в лог:

echo "New entry at $(date)" >> /var/log/myapp.log

Хотя тут cat вообще не нужен, echo справится сам.

Скопировать файл:

cat source.txt > destination.txt

Работает как cp, но через перенаправление.

Проверить кодировку:

cat -v file.txt

Если увидишь странные ^M в конце строк - файл из Windows, надо конвертировать.

Создать bash скрипт:

cat > backup.sh << 'EOF'
#!/bin/bash
tar -czf backup-$(date +%Y%m%d).tar.gz /home/user/data
EOF
chmod +x backup.sh

Кавычки вокруг EOF нужны чтобы переменные не раскрывались сразу.

Альтернативы

В зависимости от задачи, может быть есть команда получше.

Для просмотра файлов:

  • less - когда файл большой и нужна навигация
  • more - простой постраничный просмотр
  • head - только начало файла
  • tail - только конец
  • nano или vim - если нужно ещё и отредактировать

Для объединения:

  • cat - простое склеивание текстовых файлов
  • paste - склеить файлы по столбцам
  • join - объединить по общему полю

Производительность

Cat работает быстро, но есть нюансы.

Когда cat неэффективен:

  • Большие файлы - лучше head, tail, less
  • Бинарные файлы - нужен hexdump или xxd
  • Поиск в файлах - grep работает напрямую
  • Редактирование - sed, awk, редакторы

Есть такое понятие - UUOC, Useless Use of Cat. Бесполезное использование cat.

Неэффективно:

cat file.txt | grep "search"

Эффективно:

grep "search" file.txt

Разница в том, что в первом случае создаётся лишний процесс. Grep умеет сам читать файлы.

То же самое с wc:

Неэффективно:

cat file.txt | wc -l

Эффективно:

wc -l < file.txt

Хотя если честно, для небольших файлов разница незаметна. И вариант с cat часто более понятен новичкам.

Когда использовать cat

Подытожим когда cat подходит, а когда нет.

Используй cat:

  • Быстро посмотреть небольшой файл
  • Объединить несколько файлов
  • Создать простой текстовый файл
  • Дописать что-то в конец файла
  • Передать файл другой команде через pipe

Не используй cat:

  • Файл огромный - бери less
  • Нужно редактировать - открой vim или nano
  • Нужен поиск - используй grep напрямую
  • Бинарный файл - нужен hexdump

Заключение

Команда cat - один из базовых инструментов Linux. Простая, быстрая, универсальная. Выучил её в первый день работы с терминалом, используешь каждый день годами.

Основное что надо запомнить:

  • cat file.txt - посмотреть файл
  • cat file1 file2 > merged - склеить файлы
  • cat > newfile - создать новый файл
  • cat -n file.txt - с нумерацией строк
  • Комбинируй с grep, wc, sort для обработки данных

Освоив cat, сразу почувствуете себя увереннее в командной строке.

Дополнительно

Полная документация в man:

man cat

Или краткая справка:

cat --help

Похожие команды которые стоит изучить:

  • less - постраничный просмотр
  • head - начало файла
  • tail - конец файла
  • tac - вывод в обратном порядке
  • nl - нумерация строк
  • paste - объединение по столбцам

Полезные связки команд

Конфиг без комментариев:

cat config.conf | grep -v "^#"

Сортировка без дублей:

cat list.txt | sort | uniq

Подсчёт уникальных строк:

cat file.txt | sort | uniq | wc -l

Замена во всех файлах:

cat *.txt | sed 's/old/new/g'

На этом всё. Теперь вы знаете про cat больше чем 90 процентов пользователей Linux.