Изучаем GNU/Linux часть 9. Чтение текстовых файлов (RHCSA)

Продолжаем изучать GNU/Linux и готовиться к сертификации от Red Hat (RHCSA).


Для тех, кто видит мои посты впервые - я стараюсь очень лёгким языком с нуля научить вас работать с операционной системой GNU/Linux. Зачем? Потому что - Стоит ли делать курс по RHCSA?


Все предыдущие части -

Изучаем GNU/Linux часть 1. Операционные системы и GNU/Linux

Изучаем GNU/Linux часть 2. Виртуализация

Изучаем GNU/Linux часть 3. Установка CentOS на VirtualBox

Изучаем GNU/Linux часть 4. О файловых системах

Изучаем GNU/Linux часть 5. Текстовой интерфейс пользователя (RHCSA)

Изучаем GNU/Linux часть 6. Пути и директории (RHCSA)

Изучаем GNU/Linux часть 7. Создание и копирование файлов (RHCSA)

Изучаем GNU/Linux часть 8. Перемещение, переименование, удаление. Жесткие и символические ссылки. (RHCSA)


Середина года, а мы так читать и не научились. Беда. Быстро навёрстываем упущенное вместе с кошкой, у которой голова меньше чем хвост - cat head less tail (рубрика тупые шутки за 50). Ну и еще немножко про grep.

GNU/Linux

1K постов15.5K подписчик

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

15
Автор поста оценил этот комментарий

Как вы, возможно, поняли, в текстовом интерфейсе всё есть текст – команды, файлы, устройства и всё что угодно. В том числе это касается настроек и логов большинства программ, которые хранятся в виде текстовых файлов. Поэтому инструментов для работы с текстом на UNIX-подобных системах просто дофига. Какие-то из них очень простые, а о каких-то пишут книги на сотни страниц. Ну и чтобы работать с текстом, нам нужен какой-то подопытный файл – и для этого идеально подойдёт файл /etc/passwd – файл, в котором хранится информация о пользователях в системе.


Для начала нам стоит посмотреть содержимое этого файла. С помощью команды cat мы можем вывести содержимое этого файла в терминал – cat /etc/passwd . Как вы видите, в терминале появилось много текста. Мы можем прокрутить его c помощью колёсика мыши, либо с помощью клавиш shift+pgup, либо shift+pgdn. Запомните эти клавиши, потому что в виртуальном терминале мышка не работает.


Команда cat подойдёт, когда у вас есть относительно небольшой текстовой файл и вам просто нужно посмотреть его содержимое. Но в целом cat – от слова конкатенация – может объединять вывод содержимого нескольких файлов. Допустим, возьмём еще один файл - /etc/group – и выведем оба файла разом - cat /etc/passwd /etc/group. Если покрутим вверх, то увидим, что как только закончился один файл, начинается другой. Еще cat может пронумеровать строки с помощью ключа -n – cat -n /etc/passwd. Ну и обратите внимание, как эта опция работает при выводе двух файлов. У команды cat есть противоположная команда – tac, которая выводит текст реверсивно, то есть с конца – tac /etc/passwd


Как вы заметили, команда cat просто вывела содержимое файла на экран и всё. Если там сотни строк – придётся крутить вверх, вниз. Если у вас задача прочесть какой-то большой файл, то вам больше подойдёт программа читалка, например, less – less /etc/passwd, такие программы часто называют пейджерами. Стрелки, энтер, pgup-pgdn, пробел – с помощью всего этого можно листать. Если написать слэш (/) и текст, то less поищет этот текст в файле, а с помощью n маленького или N большого можно перейти на следующий или предыдущий вариант соответственно. Ну и q чтобы выйти. Похоже на man? А это потому что man использует less в качестве читалки. Если в man или в less нажать h, то откроется небольшой гайд по командам управления читалкой.


Но жизнь слишком коротка, чтобы читать большие файлы, поэтому часто используются две дкоманды – head и tail – они показывают определённое количество строк с начала и с конца файла соответственно. head /etc/passwd или tail /etc/passwd. По умолчанию они показывают 10 строк, но можно указать и что-то своё - head -7 /etc/passwd, tail -3 /etc/passwd. Еще tail может читать с определённой строки, допустим всё что ниже 35 строки – tail -n +35 /etc/passwd.

Одна из самых используемых опций tail – ключ f - может показывать то, что добавляется в файл в реальном времени – tail -f logfile. Это часто применяется при решении проблем, когда вы видите кучу логов и вам нужно понять, что именно происходит при выполнении каких-то действий. Допустим, я запустил tail -f /var/log/wtmp и тут у меня какой-то текст. Это лог файл, в котором отображается информация о входах и выходах из системы. Обычно его так не читают, но для теста сейчас сойдёт. Так вот, я открываю виртуальный терминал через правый ctrl+f5 и логинюсь. Потом возвращаюсь ctrl+f2 и вижу, что у меня добавилась строчка. Когда текста много, не всегда понятно, что где куда добавилось, поэтому я могу зажать Enter и у меня появляется пустое пространство. Не беспокойтесь, это никак не влияет на сам файл, это просто для удобства. Теперь возвращаюсь на виртуальный терминал, выхожу и возвращаюсь – и вот теперь у меня хорошо видна новая строчка. Чтобы выйти, нажмите Ctrl+c. Возможно вам пока это не понятно, но просто запомните – если вам нужно открыть конец файла и ждать появления новых строчек, например в случае чтения логов, то используется tail с ключом f.


Вообще одна из лучших фишек команд less, head и tail – то что они не пытаются прочесть весь файл целиком. Вы когда-нибудь пытались открыть текстовой файл на 100 мегабайт? А админы иногда сталкиваются с файлами с размером в пару гигабайт. Это иногда бывает, когда утром пришел на работу, а там сервер не работает. Смотришь – нет места на диске. Почему? А там лог файл на десяток гигабайт забил весь диск за одну ночь. Да, конечно, по хорошему такие ситуации легко предотвратить, но всё же речь о другом. И вот тебе нужно понять, что это там в логах такого на пару гигов. Не знаю как сейчас, но пару лет назад сервера просто зависали при попытке открыть такие файлы. По крайней мере на Windows серверах. Возможно сейчас есть какая-то защита от дурака, не знаю. Но это проблемы Windows, а на линуксах есть эти утилиты, с помощью которых можно запросто прочитать файл любого размера. И так как обычно такие большие лог файлы забиваются одними и теми же строчками, то достаточно вывести, допустим, последние строк 50 файла и понять, что там произошло.


Ну и давайте напоследок затронем еще одну команду – grep, хотя мы о ней еще поговорим подробно в другой раз. grep позволяет нам искать строки текста по шаблону. Допустим, в нашем файле /etc/passwd есть пользователи, которые пользуются интерпретатором bash. Я могу написать grep bash /etc/passwd и команда выдаст мне только строки, в которых есть слово bash. Я могу добавить опцию n - grep -n bash /etc/passwd – тогда я еще увижу номера строк. grep может искать рекурсивно, то есть я могу указать grep-у, чтобы он нашел мне все упоминания bash в директории /etc – grep -rn bash /etc/ . Как вы видите, вывода много, много где ошибки, потому что не хватает прав. Я могу использовать ключ l – чтобы просто выводить имена файлов, в которых он встречается – grep -rl bash /etc/ . Ну или я могу найти все строки, в которых не содержится это слово, то есть реверсировать поиск с помощью ключа v – grep -v bash /etc/passwd.

И вот мы затронули 4 команды для чтения текста – это cat, less, head и tail, и даже научились искать текст с помощью команды grep. Осталось научиться писать.

7
Автор поста оценил этот комментарий

Вот снимаю шляпу, на халяву балбесам расписывать все и разжевывать )

Автор поста оценил этот комментарий

tailf заменяет tail -f

раскрыть ветку
Автор поста оценил этот комментарий

Что то мне весь этот Linux очень DOS напоминает. Помоему даже команды чуть ли не один в один.

Отличие в том, что, как мне помнится в досе это все делалось из команднной строки , то есть один единственный сеанс на весь пк. А в Linuxe это делается в некоем "терминале" -  некоем запущенном  экземпляре сеанса как бы того же DOS?

раскрыть ветку