От создания к чтению
В прошлых уроках мы научились создавать файлы, копировать, перемещать и удалять их. Но есть одна базовая операция, которую мы пока обходили стороной: чтение. Мы создавали файлы, но ни разу не смотрели, что у них внутри.
В графическом интерфейсе это делается двойным кликом: файл открывается в редакторе, и вы видите содержимое. В терминале редактор открывать не всегда удобно, а иногда и некому: серверы, с которыми приходится работать, зачастую вообще не имеют графического интерфейса. Именно поэтому в 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.
Последние записи
Вы хотите посмотреть последние 20 строк файла app.log. Какая команда подходит лучше всего?
Команды просмотра
Соотнесите команду с ситуацией.
Практика просмотра файлов
Создайте небольшой файл и проверьте разные способы просмотра.
- Создайте файл
notes.txtс несколькими строками черезechoи>/>>. - Выведите файл целиком через
cat. - Посмотрите первые 2 строки через
head -n 2. - Посмотрите последние 2 строки через
tail -n 2. - Откройте файл через
lessи выйдите клавишейq.
Введите ровно тот вывод, который напечатает программа.
Подсказка
Подсказка: Если не помните синтаксис, начните с `echo "строка" > notes.txt`, а следующие строки добавляйте через `>>`.
Вопросы для самоконтроля
Ответьте своими словами.