cat, less, head, tail
Тема дорожной карты · Linux & Unix Fundamentals
cat склеивает файлы и выводит их содержимое на стандартный вывод, что эффективно для небольших файлов, но может стать антипаттерном при использовании в пайпах с grep или awk. Для постраничного просмотра текстовых файлов лучше всего подходит команда less, которая также поддерживает ANSI-цвета при использовании опции -R. Команда less позволяет навигировать по тексту с помощью команд /, n, g/G. Команды head и tail используются для отображения начала и конца файлов соответственно. Например, head -n 50 выводит первые 50 строк файла, а tail -n 50 — последние 50 строк. Команда tail -F /var/log/syslog позволяет отслеживать логи даже после их ротации. Дополнительно, комбинация этих команд с опциями --bytes/-c и tail -n +2 позволяет эффективно работать с бинарными файлами и пропускать заголовки CSV-файлов.
Эти четыре команды — основа для анализа логов и обработки текстовых данных. Они предоставляют мощные инструменты для быстрого анализа и манипулирования данными, что делает их незаменимыми для системного администрирования и разработки.
Как это работает
cat, less, head, tail — это инструменты, которые делают пайплайны мощными и эффективными. Они используются в сочетании с другими командами, такими как grep (поиск по регулярным выражениям), sed (потоковый редактор), awk (мини-язык для работы с записями), cut/paste (нарезка данных по столбцам), sort/uniq (работа с множествами), tr (трансляция символов), head/tail (нарезка данных), wc (счётчик строк, слов и байтов), xargs (преобразование стандартного ввода в аргументы командной строки). С помощью пайпов (символ |), можно создать сложные командные строки для выполнения различных задач, например, cat access.log | grep 404 | awk '{print $7}' | sort | uniq -c | sort -rn | head, которая отвечает на вопрос "Какие URL чаще всего вызывают ошибку 404?" без необходимости писать скрипт на языке программирования.
Когда применять
Эти инструменты идеальны для выполнения быстрых и временных операций, таких как анализ логов, обработка CSV-файлов, сбор статистики и выполнение мелких трансформаций данных. Они позволяют быстро получить ответ на вопрос без необходимости писать сложный скрипт. Например, awk используется, когда данные представляют собой записи с полями, а sed используется для замены данных на основе регулярных выражений. grep -E и grep -P используются для более сложных поисков с использованием расширенных регулярных выражений или PCRE.
Для более сложных и многократно повторяющихся задач, которые требуют более сложной логики, следует использовать shell-скрипты или перейти на полноценные языки программирования.
Типичные ошибки
Использование команд cat, less, head, tail может привести к ряду типичных ошибок, если не соблюдать определённые правила. Например, использование жадных регулярных выражений (.*) может привести к нежелательным результатам. Также, сортировка данных может зависеть от локали, что может привести к непредсказуемым результатам. Команда sed -i "" может работать по-разному на разных системах (GNU vs BSD). Необходимо также учитывать, что не закавыченные команды подстановки ($(command substitution)) могут привести к проблемам с разделением слов. Наконец, использование команды cat перед grep (cat file | grep ...) является примером "useless use of cat" (UUOC), когда можно просто использовать grep ... file.