От создания к чтению

В прошлых уроках мы научились создавать файлы, копировать, перемещать и удалять их. Но есть одна базовая операция, которую мы пока обходили стороной: чтение. Мы создавали файлы, но ни разу не смотрели, что у них внутри.

В графическом интерфейсе это делается двойным кликом: файл открывается в редакторе, и вы видите содержимое. В терминале редактор открывать не всегда удобно, а иногда и некому: серверы, с которыми приходится работать, зачастую вообще не имеют графического интерфейса. Именно поэтому в Linux есть отдельные команды для чтения файлов прямо в терминале — быстро, без лишних движений.

Таких команд несколько, и каждая подходит для своей ситуации. Прежде чем разбирать их, создадим учебный файл, на котором будем практиковаться. Перейдём в домашнюю директорию и создадим отдельную папку для экспериментов:

cd
mkdir sandbox
cd sandbox

Теперь заполним файл текстом. Для этого используем две вещи, которые нам сейчас нужны в минимальном объёме.

Команда echo выводит строку текста в терминал — она буквально «эхом» повторяет то, что вы ей передали. Сама по себе она просто печатает текст на экран. Но если после неё написать >> и имя файла, вывод уйдёт не на экран, а в конец этого файла. Оператор >> означает «добавить в конец файла».

Полностью echo и операторы перенаправления мы разберём в уроке про перенаправление ввода-вывода. Пока достаточно понять: echo "текст" >> файл — это способ дописать строку в файл.

Добавим строки по очереди. Первая команда создаст файл:

echo "Строка 1: начало файла" > longfile.txt

Остальные команды допишут новые строки в конец:

echo "Строка 2: немного данных" >> longfile.txt
echo "Строка 3: продолжение" >> longfile.txt
echo "Строка 4: середина" >> longfile.txt
echo "Строка 5: ещё данные" >> longfile.txt
echo "Строка 6: ещё немного" >> longfile.txt
echo "Строка 7: почти конец" >> longfile.txt
echo "Строка 8: предпоследняя" >> longfile.txt
echo "Строка 9: последняя запись" >> longfile.txt
echo "Строка 10: конец файла" >> longfile.txt

Теперь у нас есть файл longfile.txt из 10 строк. Этого достаточно, чтобы попробовать все команды и почувствовать разницу между ними.

cat: когда файл небольшой

Представьте: вы подключились к серверу и хотите проверить конфигурационный файл. Он небольшой — строк тридцать. Открывать редактор ради этого долго, да и незачем. Именно для таких случаев существует команда cat.

Название cat происходит от слова concatenate — «объединить, соединить». Изначально команда создавалась для того, чтобы склеивать несколько файлов в один и выводить результат в терминал. Но со временем её стали использовать проще: чтобы быстро посмотреть содержимое одного файла.

cat longfile.txt

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

Проблема возникает, когда файл большой. Если в нём тысячи строк, cat быстро выведет весь текст, и на экране останется только последний кусок. Искать нужное место в таком потоке неудобно. Поэтому cat используют для коротких файлов: конфигов, небольших скриптов, простых текстовых заметок.

Есть полезный флаг -n, который добавляет к каждой строке её номер:

cat -n longfile.txt

Нумерация строк пригождается, когда вы обсуждаете файл с коллегой или ищете конкретное место в конфиге: достаточно сказать «посмотри строку 12», и сразу понятно, о чём речь.

head и tail: когда важен только край файла

Бывают ситуации, когда файл слишком большой для cat, но вам нужен не весь текст, а только его начало или конец. Например, вы получили CSV-файл с данными и хотите посмотреть, какие в нём столбцы. Или вы смотрите лог и вас интересуют только последние записи.

Для первого случая в Linux есть команда head — буквально «голова», то есть начало файла.

head longfile.txt

Десяти строк обычно достаточно, чтобы понять структуру файла: увидеть заголовки, разобраться с форматом, проверить кодировку. Если нужно другое количество, используйте флаг -n — он задаёт точное число строк:

head -n 3 longfile.txt
Строка 1: начало файла
Строка 2: немного данных
Строка 3: продолжение

Зеркальная пара head — это команда tail («хвост»), которая показывает конец файла.

tail longfile.txt

Флаг -n работает точно так же, как у head:

tail -n 3 longfile.txt

На первый взгляд tail может казаться менее полезным, чем head. Зачем смотреть конец файла, если начало обычно информативнее? Ответ кроется в логах.

Логи — это файлы, в которые система и приложения постоянно дописывают новые записи, и всегда в конец. Когда что-то пошло не так на сервере, последние несколько строк лога почти всегда содержат причину. Именно поэтому tail — одна из самых используемых команд в повседневной работе разработчика: head помогает понять структуру файла, а tail — что происходит прямо сейчас.

У tail есть особый флаг — -f, от слова follow («следить»). Он превращает команду из одноразового просмотра в непрерывное наблюдение:

tail -f longfile.txt

Команда не завершается. Она показывает конец файла и продолжает ждать новых строк: как только в файл добавляется запись, она тут же появляется на экране. Чтобы остановить наблюдение, нужно нажать Ctrl+C.

less: когда файл нужно листать

cat выбрасывает всё содержимое разом, head и tail показывают только края. Но что делать, если файл большой и нужно просмотреть его целиком, не торопясь, с возможностью вернуться назад?

В Unix-системах долгое время была команда more, которая выводила файл постранично — нажимаешь пробел, переходишь на следующую страницу. Но more умела листать только вперёд: вернуться назад было нельзя. В 1983 году программист Марк Нудлман написал улучшенную версию и назвал её less — по принципу «меньше ограничений». Отсюда и шутка, которую до сих пор любят повторять в сообществе: «less is more», то есть less умеет больше, чем more.

less longfile.txt

После запуска терминал переключается в режим просмотра: файл открывается как отдельный экран, и обычная командная строка пропадает. Управление идёт с клавиатуры:

Клавиша Действие
Пробел или Page Down Следующая страница
b или Page Up Предыдущая страница
/ Построчная прокрутка
/текст Поиск вперёд по файлу
n Следующее совпадение поиска
N Предыдущее совпадение поиска
g Перейти в начало файла
G Перейти в конец файла
q Выйти из режима просмотра

Особенно полезна функция поиска. Когда вы смотрите большой лог и ищете конкретное слово — например, error или имя упавшего сервиса — наберите /error прямо в less и нажмите Enter. Программа найдёт первое совпадение и подсветит его. Клавиша n переходит к следующему совпадению, N — к предыдущему. Это быстрее, чем прокручивать тысячи строк вручную.

Попробуйте прямо сейчас: откройте less longfile.txt, наберите /конец и нажмите Enter.

Важная техническая особенность less: он не загружает файл целиком в память. Это означает, что с его помощью можно открыть даже гигабайтный лог — less прочитает только ту часть, которую вы сейчас смотрите, и не заставит систему тратить лишние ресурсы. После практики уберём учебную директорию:

cd ~
rm -r sandbox

В этом уроке мы разобрали четыре команды для чтения файлов в терминале — каждая подходит для своей ситуации.

cat выводит содержимое файла целиком. Это самый простой и быстрый способ прочитать небольшой файл — конфиг, скрипт, короткую заметку. Флаг -n добавляет нумерацию строк. На больших файлах cat бесполезен: текст промелькнёт, и вы увидите только конец.

head показывает первые строки файла (по умолчанию 10), tail — последние. Оба принимают флаг -n с нужным количеством строк. head удобен, когда нужно быстро понять структуру или формат файла. tail незаменим при работе с логами, потому что новые записи всегда добавляются в конец. Флаг tail -f переводит команду в режим непрерывного наблюдения: терминал будет выводить каждую новую строку по мере её появления в файле. Выйти — Ctrl+C.

less открывает файл в интерактивном режиме просмотра, где можно листать в обе стороны и искать текст через /. Он не загружает файл целиком в память, поэтому работает даже с очень большими файлами. Выйти — q.

Простое правило для выбора команды:

Ситуация Команда
Короткий файл — конфиг, скрипт cat
Проверить начало — формат, заголовки head
Посмотреть последние записи лога tail
Следить за логом в реальном времени tail -f
Большой файл — листать и искать less

В следующем уроке мы перейдём к редактированию файлов в терминале. Посмотреть содержимое мы уже умеем — теперь разберём, как его изменить, и познакомимся с текстовыми редакторами nano и vim.

Последние записи

11

Вы хотите посмотреть последние 20 строк файла app.log. Какая команда подходит лучше всего?

Команды просмотра

Соотнесите команду с ситуацией.

cat
head
tail
less
Показать последние строки файла
Листать большой файл без открытия редактора
Вывести небольшой файл целиком
Показать первые строки файла

Практика просмотра файлов

Создайте небольшой файл и проверьте разные способы просмотра.

  1. Создайте файл notes.txt с несколькими строками через echo и > / >>.
  2. Выведите файл целиком через cat.
  3. Посмотрите первые 2 строки через head -n 2.
  4. Посмотрите последние 2 строки через tail -n 2.
  5. Откройте файл через less и выйдите клавишей q.
Рабочая область

Введите ровно тот вывод, который напечатает программа.

Подсказка

Подсказка: Если не помните синтаксис, начните с `echo "строка" > notes.txt`, а следующие строки добавляйте через `>>`.

Вопросы для самоконтроля

Ответьте своими словами.

1Почему `cat` неудобен для очень больших файлов?
2Чем `head` отличается от `tail`?
3Что даёт `less`, чего нет у простого вывода через `cat`?

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.