Команда cat – одна из самых популярных и часто используемых утилит в операционных системах Linux и Unix-подобных системах. Название команды произошло от английского слова concatenate, что переводится как «объединять» или «сцеплять». Основное назначение утилиты – вывод содержимого файлов в терминал и объединение нескольких файлов в один поток данных.
С помощью cat можно:
- просматривать содержимое текстовых файлов;
- объединять несколько файлов;
- создавать новые файлы;
- перенаправлять вывод в другой файл;
- работать со стандартным вводом данных;
- отображать строки с нумерацией и дополнительными символами;
- очищать содержимое существующих файлов.
Синтаксис команды cat
Общий синтаксис команды выглядит следующим образом:
cat [опции] файл1 файл2 ...После команды можно указать один или несколько файлов. Их содержимое будет выведено последовательно без дополнительных разделителей.
Если файлы не указаны, cat перейдет в режим ожидания ввода данных с клавиатуры.
Что делает команда cat: основные опции
Команда cat в Linux поддерживает различные параметры, расширяющие стандартные возможности вывода. Наиболее используемые опции:
-b– нумеровать только непустые строки;-n– нумеровать все строки;-s– удалять повторяющиеся пустые строки;-E– показывать символ$в конце каждой строки;-T– отображать символы табуляции как^I;-v– использовать^иM-нотацию, кроме LFD и TAB;-A– эквивалент-vET, показывает сразу все непечатаемые символы.
Примеры использования команды cat
Просмотр содержимого файла
Вывод содержимого файла в терминал:
cat file.txtПросмотр нескольких файлов
Можно вывести содержимое сразу нескольких файлов:
cat file1.txt file2.txt file3.txtИнформация будет отображаться последовательно в порядке перечисления файлов.
Нумерация непустых строк
Для отображения номеров только у строк с данными используется опция -b:
cat -b file.txtНумерация всех строк
Чтобы пронумеровать абсолютно все строки, включая пустые:
cat -n file.txtУдаление повторяющихся пустых строк
Опция -s позволяет убрать подряд идущие пустые строки:
cat -s file.txtСоздание файла через cat
Команда позволяет создать файл и записать в него текст напрямую из терминала:
cat > file.txtПосле ввода команды cat в консоли можно печатать текст. Для завершения ввода необходимо нажать сочетание клавиш Ctrl + D.
Объединение файлов
Чтобы объединить содержимое нескольких файлов в новый файл:
cat file1.txt file2.txt > file3.txtПосле выполнения команды данные из file1.txt и file2.txt будут записаны в file3.txt.
Добавление данных в конец файла
Для добавления содержимого без перезаписи файла используется оператор >>:
cat file1.txt >> file2.txtОчистка содержимого файла
Иногда требуется не удалить файл, а полностью очистить его содержимое, сохранив сам файл, права доступа и открытые на него дескрипторы (например, лог, в который пишет работающий процесс). Для этого удобно перенаправить в файл вывод псевдоустройства /dev/null:
cat /dev/null > access.logПосле выполнения команды файл access.log останется на месте, но станет пустым. Формально это пример Useless Use of Cat (см. раздел ниже) и cat здесь не нужен. Данный вариант стоит рассматривать как пример, а для очистки содержимого файла лучше использовать команду:
> access.logОбратный вывод файла с помощью tac
В комплекте с cat поставляется «зеркальная» утилита tac – ее название читается задом наперед и отражает суть работы: команда выводит содержимое файла в обратном порядке, начиная с последней строки.
tac file.txtВажный нюанс – tac читает файл целиком. На больших логах размером в сотни мегабайт это медленно и создает лишнюю нагрузку на диск. Если нужно посмотреть только последние записи лога в обратном порядке, эффективнее сначала отрезать «хвост» через tail, а перевернуть уже его:
tail -n 20 /var/log/syslog | tacКоманда покажет 20 последних строк лога, начиная с самой свежей, и при этом не будет вычитывать файл с самого начала.
Чем cat отличается от less и more
cat – не единственный способ посмотреть содержимое файла. На практике для просмотра часто используют утилиты less и more, и важно понимать разницу между ними.
cat выводит файл целиком в терминал и сразу возвращает управление в командную строку. Это удобно для коротких файлов и для конвейерной обработки (когда вывод передается другой команде через |). Но если открыть через cat файл на десятки тысяч строк, то часть содержимого может выйти за пределы буфера.
more – постраничный просмотрщик. Файл выводится по одному экрану за раз, перелистывание вперед выполняется клавишей Space, построчно – клавишей Enter. Утилита простая, но движение назад по файлу в ней ограничено.
less – более современный и функциональный аналог more. Поддерживает прокрутку в обе стороны (стрелки, Page Up / Page Down), поиск по тексту (/ для поиска вперед, ? – назад), переход в начало (g) и конец (G) файла, а также открывает большие файлы мгновенно, не загружая их целиком в память. Выход из режима просмотра – клавиша q.
Краткое правило выбора:
cat– если файл маленький или вывод нужно передать другой команде;less– если файл большой и его нужно изучить вручную.
Антипаттерн «useless use of cat»
В сообществе Linux существует устойчивое выражение Useless Use of Cat (UUOC) – «бесполезное использование cat». Так называют ситуацию, когда cat применяется только для того, чтобы передать содержимое файла другой команде через конвейер, хотя эта команда сама умеет читать файлы.
Типичный пример антипаттерна:
cat file.txt | grep "ошибка"Здесь cat лишний, grep (как и большинство классических Unix-утилит – awk, sed, sort, wc и др.) принимает имя файла как аргумент. Корректный вариант:
grep "ошибка" file.txtТакой запуск:
- работает быстрее, потому что не порождает лишний процесс;
- дает
grepдоступ к имени файла, что важно при поиске сразу в нескольких файлах (имя выводится перед каждой найденной строкой).
cat действительно нужен в конвейере только тогда, когда требуется объединить несколько файлов перед обработкой:
cat file.txt log.txt access.txt | grep "ошибка"В остальных случаях стоит передавать файл напрямую той утилите, которая его читает.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.