Ранее в цикле статей о работе в командной строке Mac OS X мы рассмотрели:
- перемещение по фaйловой системе,
- создание, копирование, перемещение и удаление файлов,
- изменение прав доступа к файлам.
Теперь осталось разобраться с тем, как просматривать и редактировать файлы при помощи командной строки.
Конечно, редактировать файлы можно и в текстовых редакторах с графическим интерфейсом, например, в TextEdit, но если вы работаете на удалённом сервере, куда вы имеете доступ только по ssh, умение просматривать и редактировать файлы в консоли окажется совсем не лишним.
Просмотр содержимого файла
Иногда бывает нужно только посмотреть на содержимое файла, а не редактировать его. Для этого можно использовать утилиту less.
less
Консольная программа less является расширенной версией программы more, которая позволяла просматривать файл только в одном направлении — от начала файла к его концу. То что less позволяет просматривать файлы и в обратном направлении, послужило основой для её названия less (англ. меньше).
Чтобы открыть файл в less, используется следующий синтаксис:
less [параметры] имя_файла
параметры указывать необязательно, а имя_файла
— это файл, который необходимо просмотреть.
Открыв файл в less, вы увидите (да, вы правильно предположили) содержимое файла, а также путь до открытого файла внизу на небольшой информационной панели. Если вы достигли конца файла, то там будет также надпись (END)
.
Чтобы перемещаться по файлу, можно использовать следующие клавиши:
Клавиша | Действие |
---|---|
F или Пробел | Следующая страница |
B | Предыдущая страница |
Enter или J или стрелка вниз ↓ | Следующая строка |
K или стрелка вверх ↑ | Предыдущая строка |
G | Начало файла (первая строка) |
Shift + G | Конец файла (последняя строка) |
nG | Переход к n-й строке файла |
Также в less можно искать по содержимому файла, в том числе, используя RegExp.
Клавиша | Действие |
---|---|
/ | Открывает панель для ввода строки (текста) или регулярного выражения для поиска его в содержимом файла. Поиск происходит в направлении к концу файла. |
? | То же, что и по нажатию /, но в направлении к началу файла. |
N | Перейти к следующему найденному паттерну (совпадению текста). |
Shift + N | Перейти к предыдущему найденному паттерну (совпадению текста). |
Клавиша | Действие |
---|---|
Q | Выход. |
Shift + F | Постоянно переходить к концу файла (например, если это лог и в него происходит запись). Работает также как tail ‑f . |
= | Отобразить информацию об открытом файле. |
H | Отобразить файл справки less. Для выхода из помощи, нажмите Q. |
Также у less есть очень полезные опции, которые можно указать при запуске.
Опция | Что делает |
---|---|
‑g |
При поиске будет подсвечиваться только текущее найденное вхождение текста. |
‑I |
Поиск без учёта регистра. |
‑M |
На информационной плашке будет отображаться кроме имени файла ещё и текущая позиция курсора. |
‑N |
Будут отображаться номера строк. |
‑S |
Не переносить длинные строки. Для их просмотра необходимо будет использовать скроллинг. |
‑? |
Показать файл справки less. |
cat
cat — это ещё одна полезная утилита для просмотра файлов. Её название является сокращением от catenate, что в переводе с английского значит «соединять». Это потому что она при выводе также может соединять несколько файлов.
Синтаксис команды cat:
cat [параметры] имена_файлов
где параметры
— это необязательные параметры команды, а имена_файлов
— это файлы, которые указываются через пробел или же только один файл.
Например, чтобы вывести содержимое файла hello.txt
, который находится на рабочем столе, в стандартный вывод или, говоря проще, в консоль, необходимо выполнить: cat Desktope/hello.txt
. Если же указать несколько файлов, то они будут выведены в том же порядке, как они были указаны.
cat удобно использовать для вывода файла на вход какой-либо другой утилиты или для соединения нескольких файлов друг с другом и потоком стандартного ввода. Ну и конечно же, для быстрого просмотра содержимого файла.
Самый простой пример объединения: cat file_1 file_2 > file_12
создаст новый файл, который будет объединять в себе данные из файлов file_1 и file_2.
tail
Также в хозяйстве может пригодиться утилита tail. Она существует не совсем для просмотра файлов, а для вывода последних строк (по умолчанию 10-и последних строк) файла или нескольких файлов, поэтому у неё такое название tail (англ. хвост, заключительная часть). Это может быть очень удобно для слежения за файлом лога, если указать утилите tail
параметр ‑f
, то она будет выводить все новые строки записанные другим процессом в конец файла.
Например, tail ‑f /var/log/any_log_file
будет отслеживать файл /var/log/any_log_file
. Чтобы прекратить процесс отслеживания, надо нажать Ctrl+C
Опция | Что делает |
---|---|
‑f |
Продолжать выводить данные файла по мере их появления. |
‑F |
Тоже что и -f , но также пытаться открыть файл, если он стал недоступен (удалён, переименован и т.п.). |
‑n число_строк |
Выводить не последние 10, а столько строк, сколько указано после параметра. |
Редактирование файлов в командной строке
Для несложного редактирования файлов, например, файла конфигурации на сервере, на мой взгляд, проще всего использовать nano — простой консольный текстовый редактор. Конечно, существуют более продвинутые и мощные консольные текстовые редакторы, например Vim, но я очень сомневаюсь, что затраченное время на его изучение окупится. Конечно, если ваше занятие не заключается в постоянном редактировании файлов :)
nano был создан в 1999 году, как бесплатная замена редактору Pico. Также nano имеет открытый исходный код. В системе приставок СИ (метрической системы) нано в 1000 раз больше, чем пико, что стало источником имени редактора.
Чтобы открыть файл в nano, достаточно в командной строке выполнить:
nano имя_файла
где имя файла — это файл, который необходимо отредактировать.
Также как и less, nano является полноэкранным приложением. После запуска вы увидите имя файла в заголовке, содержимое файла и под панелью с числом строк в файле будет таблица с сочетаниями клавиш, которые используются для управления редактором. Знак вставки ^
(англ. caret) обозначает клавишу Control.
Перемещение курсора можно осуществить при помощи стрелок на клавиатуре.
Клавиша | Действие |
---|---|
Control + X | Выход из nano. Если в файл были внесены изменения, то надо будет выбрать: сохранить изменения Y или нет N, а можно вернуться к редактированию Control + C. |
Control + G | Отобразить файл справки nano с полным списком команд. Если вы там увидите сочетание клавиш, которое начинается с M- — это значит, что надо использовать мета-клавишу, но поскольку на клавиатуре Mac’а такой кнопки нет, то вместо неё используется Esc. Например, чтобы добавить отступ слева для строки текста, существует комбинация M-}, чтобы это выполнить, надо использовать такое сочетание: Shift + Esc + ]. |
Control + O | Сохранить изменения, внесённые в файл. |
Control + A | Перейти в начало текущей строки. |
Control + E | Перейти в конец текущей строки. |
Control + W | Искать в файле строку или регулярное выражение. |
Control + K | Вырезать из текста текущую строку или выделенный текст и поместить его в буфер обмена. |
Shift + Esc + 6 | Копировать текущую строку или выделенный текст в буфер обмена. |
Control + U | Вставить текст или строку из буфер обмена. |
Esc + A | Включить режим выделения текста. |
Shift + Control + _ | Позволяет ввести номер строки и столбца, куда переводит курсор по нажатию на Enter. |
Control + C | Отобразить текущее положение (номер строки и столбца) курсора. |
Полезные ссылки
Ссылки на руководства на русском языке для рассмотренных в статье команд:
- Полное руководство по less на русском, к сожалению, я не нашёл.
- Руководство cat
- Руководство tail
- Руководство nano
Надеюсь, что помог вам познакомиться с основами просмотра и редактирования файлов в командной строке. Если у вас есть какие-либо вопросы, я готов ответить на них в комментариях.
У tail есть ещё полезная опция: tail -n +1000 /some/big/file выведет всё за исключением первых 1000 строк. Аналогичная (но с «-» вместо «+») опция есть и у head. Вместе их удобно использовать, когда хочется от файла отрезать заголовок и хвост: cat file.txt | tail -n +1000 | head -n -1000 > newfile.txt
Интересно, спасибо, Дим!
Кроме nano, есть ещё vim ! Не все конечно имеют им пользоваться.
Я боялся, что после Linux mac os мне покажется неудобной, но когда увидел что тут установлен vim по-умолчанию сразу успокоился =)