Содержание:
- Просмотр текстовых файлов
- Редактирование текстовых файлов
- Apt
Существует несколько утилит для просмотра текстовых файлов в консоли, такие как cat, less, и немного специфичные head, tail. Давай посмотрим на них подробнее:
Название этой утилиты не имеет ничего общего с котами и кошками и является сокращением от concatenate (конкатенация). При помощи этой утилиты можно конкатенировать файлы. Воу воу, что же такое конкатенация? Давайте обратимся к википедии:
Конкатена́ция (лат. concatenatio «присоединение цепями; сцепле́ние») — операция склеивания объектов линейной структуры, обычно строк. Например, конкатенация слов «микро» и «мир» даст слово «микромир».
Строка - объект линейной структуры??? Ну, да, в терминах многих языков программирования строка представляет собой одномерный массив с символами. Массив (Array на английском), на всякий случай, представляет собой множество однотипных элементов, как, например, дома на улице. Каждый дом похож друг на друга и имеет порядковый номер:
array = [дом1, дом2, дом3, ...]
Строка (Обычно, String на английском) привет! будет содержать символы:
string_hello = ['п', 'р', 'и', 'в', 'е', 'т', '!',]
Допустим, у нас есть ещё одна строка c текстом Вася, :
string_vasya = ['В', 'а', 'с', 'я', ',', ' ', ]
Давай проведём конкатенацию этих строк!
string_vasya + string_hello
Получится строка Вася, привет!
Что произошло при сложении строк? Общими словами была создана новая строка (массив с символами) размером в 13 символов, в которую в начале поместили символы первой строки, затем символы второй строки. Почему 13? Потому что это минимальное число символов, которое сможет уместить в себя обе строки (привет! - 7 символов, Вася, - 6 символов).
Запутанно, и как это связано с чтением файлов? Давайте глянем в man cat:
Утилита cat не только конкатенирует файлы, но и печатает их на консоль, чем собственно мы и воспользуемся. Если мы передадим всего один файл в эту утилиту, то она просто напечатает его на экране (и впрямь, конкатенировать его ведь не с чем):

Давай попробуем объединить два файла и вывести их на экран:

Эта утилита выводит несколько первых строк из файла. Просто и удобно. Зачем это нужно, скажешь ты? Допустим, у нас есть файл, причем файл довольно объемный, мегабайт так на 50. При помощи cat его не просмотришь, он просто не влезет в консоль (да да, вывод в консоль ограничивается некоторым числом строк, число выставляется в настройках эмулятора терминала) и будет показан только его конец.
Настройка числа строк в iTerm 2. Есть опция неограниченного числа строк (unlimited srollback), но в нашем случае это не панацея
Давай попробуем head в деле. Для начала сделаем файл с несколькими строками:

Вначале объединим два наших файла и вывод утилиты cat направим в новый файл. Затем добавим новую строку при помощи команды echo.
Проверим содержимое файла:
Затем глянем в man head:
Очень важно научиться читать документацию. Да, она на английском языке, поэтому вооружаемся словариками. Пройдемся по разделам и попробуем понять, что же из себя представляет такая простая6 с виду, утилита head:
NAME
Приведено название команды и что она в принципе делает. Вольный перевод:
head --отоборажает первые строки файла
SYNOPSIS
Синопсис содержит в себе информацию о том, как можно использовать команду. Синопсис утилиты head выглядит следующим образом:
head [-n count | -c bytes] [file ...]
Как это понимать? Для начала взглянем на то, что он разделён на блоки:
head- имя утилиты[-n count | -c bytes]- флаги с параметрами[file ...]- основные параметры утилиты
Давайте попробуем разобраться что к чему. С первым блоком должно быть все понятно.
Второй блок заключен в квадратные скобки. Что это значит? Квадратные скобки означают то, что находиться в них является необязательным!. Мы можем вызвать команду без этого блока.
С квадратными скобками мы разобрались и можем их опустить. Теперь можно представить второй блока как -n count | -c bytes. Как было уже сказанно выше, этот блок содержит флаги. Флаги обычно начинаются со знака - и позволяют передать утилите дополнительные параметры. Здесь есть два флага:
-n count- устанавливаем количество выводимых строк (как мы помним,headвыводит несколько первых строк файла)-c bytes- устанавливает количество выводимых байт (например, мы хотим вывести первые 1024 байта, иногда полезно)
Как можно заметить, флаги разделяет символ вертикальной черты | . Данный символ принято читать как ИЛИ . Мы выводим несколько строк ИЛИ некоторое количество байт, но вместе эти параметры использовать нельзя.
Взглянем на поледний блок [file ..]. Внутри него можно передать файл или несколько файлов, из которых будут выведены первые строки. По квадратным скобкам становится ясно, что он тоже не обязателен к написанию. Но как же так, если мы не напишем из какого файла выводить строки, что же будет??? Читаем документацию дальше
Description
Тут уже идет нормальная, человекочитаемая документация на английском языке.
This filter displays are the first count lines or bytes for each of the specified files, or of the standart input if no files are specified - Этот фильтр отображает заданное число первых строк или байт из каждого указанного файла или использует стандартный поток ввода если файлы не заданы.
Как видно, head назвали фильтром. При помощи него можно фильтровать информацию в так называемых пайплайнах (pipe-line) или как их ещё называют конвеерах. Это отдельная глава, сейчас мы коснёмся её лишь вскользь. И так же мы поняли, что если мы не укажем третий блок с файлами, то утилита head будет брать информацию из stdin.
If count is omitted it defaults to 10. - Если число строк не указано, будет использованно значение по-умолчанию равное 10.
Ага, если мы пропускаем второй блок, и не указываем число строк или число байт, то по-умолчанию выводятся первые десять строк.
If more than a single file is specified, each file is preceded by a header consisting of the string ``==> XXX <=='' where ``XXX'' is the name of the file. - Если указанно более одного файла, каждый файл будет начинаться со строки вида ==> XXX <==, где XXX - имя файла. Ну, сделанно это явно для удобства.
EXIT STATUS
Exit Status - число, которое возвращает утилита по завершению своей работы. По этому числу можно определить, закончила ли программа работу корректно, или случилась какая-то ошибка.
The head utility exits 0 on success, and >0 if an error occurs. - Утилита head возвращает 0 в случае успешного завершения работы и число большее нуля в случае возникновения ошибок.
SEE ALSO
Схожие по функционалу утилиты. В данном случае приведена утилита tail
HISTORY История утилиты
Прочёв документацию можно начать пользоваться утилитой head:
head -n 5 foo- читаем 5 первых строк из файлаfoohead -b 2048 foo- читаем 2048 байт из файлаfoohead foo- читаем 10 (по-умолчанию) строк изfoocat my_big_file | head -n 20- это один из примеров использования конвеера. Не дай себя запутать, если ты читал про стандартные потоки, то знаешь что тут символ прямой линии | связывает выходной поток предшествующей ему программы с входным потоком следующим за ним программы. В данном случае в начале мы читаем большой файлmy_big_fileпри помощи утилитыcatи направляем выходной поток не в консоль для вывода текста, а соединяем его с входным потоком утилитыhead(заметь, мы вызвалиheadбез указания файла). В данном случае вheadпопадает текст из утилитыcat,headберёт из него 20 первых строк и выводит на экран
Задание домой: разобраться в работе tail самостоятельно, утилита схожа с head





