Правила использования операторов grep и find в Linux

Продолжаем популяризировать Linux. Я не буду вас грузить историей возникновения утилиты grep, её расшифровкой – оно вам надо? Нет. Сразу перейдём к практике.

Это случается не часто, но когда происходит сбой программы, это может сильно раздражать. Допустим, у нас работает наш браузер, и он неожиданно блокируется. Вы пытаетесь закрыть окно, но ничего не происходит. Не беспокойтесь, мы можем «закрыть» Firefox и снова открыть его. Для начала нам нужно идентифицировать процесс.

Это номер рядом с владельцем процесса, который является ID процесса.

Мы будем использовать это, чтобы определить, какой процесс отменить. Для этого мы используем программу, которая соответственно называется kill .

Иногда запустив kill, процесс будет остановлен и завершен. Когда вы делаете это, kill отправляет процессу сигнал, который просит процесс завершиться. Мы всегда пробуем эту опцию в первую очередь, это лучший вариант. К сожалению, временами это не работает.

Не беспокойтесь, мы снова можем закрыть, но на этот раз подаем сигнал 9.

Блокировка рабочего стола

В редких случаях, когда происходит сбой и блокировка процесса, он может заблокировать весь рабочий стол.

Большую часть времени мы видим только консоль которая является графическим интерфейсом, но мы можем легко добраться до остальных. Если GUI заблокирован, можно добраться до другой консоли и оттуда отменить процесс, вызывающий нарушение. Для переключения между консолями вы используете последовательность клавиш CTRL + ALT + F <Console>.

Таким образом, CTRL + ALT F2 приведет вас к консоли, где вы можете запускать команды, как указано выше, чтобы идентифицировать процессы и отменить их.

Затем CTRL + ALT F7 вернет вас в графический интерфейс, чтобы увидеть, было ли это исправлено. Общий подход заключается в том, чтобы сохранить процессы отмены, пока не будет устранена блокировка.

Сразу практика

  1. Поиск определённой строки в текстовом файле (посмотрим в логе веб-сервера, кто там пытается перебирать пароль на админку сайта): # cat | grep «LOGIN\ FAILED» Очень много записей. Как видите, grep работает как будто текстовый фильтр. Кстати, можно использовать регулярные выражения. Например указатели начала или конца строки (^ и $ соответственно). Можно использовать различные конвейеры для поэтапной фильтрации различных подстрок. Об этом следующий пример.
  2. Поиск строк, которые НЕ ВКЛЮЧАЮТ указнные шаблон (используется ключ -v). Например, посмотрим, у кого из пользователей есть интерактивная оболочка: # cat /etc/passwd | grep -v «nologin» | grep -v «false» 4 пользователя. Все легальные. Хорошо )
  3. Поиск строк во всех файлах в указанном каталоге. Часто использую этот пример, чтобы найти какой-то фрагмент в исходниках. Например найдём, в каких файлах упоминается имя скрипта “” # grep -rn «» Ключи -r означает рекурсивный поиск в подкаталогах (от текущего) в каждом файле. А -n – указывает имя файла и номер строки. Очень удобно потом открыть файл редактором и перейти на нужный фрагмент.
  4. То же самое, но вывести ТОЛЬКО имена файлов: # grep -rl «»
  5. Регистронезависимый поиск. Да, шаблон регистрозависим. Если есть подозрение, что где-то в примерах выше будет указано имя файла “” – не прокатит. Дабы не опростоволоситься, стоит добавить ключик -i и всё будет хорошо: # grep -irl «»
Читайте также:  Выпущена iOS 12.3 beta 1 — новая версия для разработчиков

Достаточно ли этого? На мой взгляд – вполне. Есть конечно какие-то замудрёные экзотические сценарии, но колоссальный спектр задач покрывается решениями из этих 5 практических примеров. К слову, я успешно фильтровал текстовые логи на миллионы строк без особых проблем, так что инструмент великолепный!

Вам так же понравится: Команда tar в Linux: создание архивов Команда chmod в Linux – изменение прав доступа Как установить Kali Linux рядом с Windows? LVM в Linux – работа с логическими дисками Обучение Oracle, Linux, FreeBSD, Cisco Установка Kali Linux на VirtualBox

Сразу практика

Синтаксис grep и find

Начнём с оператора find. Синтаксис файловой поисковой команды выглядит так:

find [где искать] [параметры] [-опции] [действия]

Некоторые употребительные параметры:

  • -depth : поиск в текущей папке и подкаталогах;
  • -version : вывести версию команды;
  • -print : показывать полные имена файлов (в Linux они могут быть сколь угодно большими);
  • -type f : поиск исключительно файлов;
  • -type d – поиск только директорий (папок).
Синтаксис grep и find

Перечень доступных опций (указываются через дефис):

  • name : файловый поиск по имени;
  • user : поиск по имени владельца файла;
  • perm : по атрибуту «режим доступа»;
  • mtime : по времени последнего изменения (редактирования) файла;
  • group : по группе;
  • atime : по дате последнего открытия файла;
  • newer : поиск файла с датой, более новой, чем заданная в шаблоне директивы;
  • size : по размеру файла в байтах;
  • nouser : поиск файлов, не имеющих введённого атрибута «владелец».

Синтаксис grep:

grep [опции] шаблон [где искать]

Под опциями следует понимать дополнительные уточняющие параметры, например, использование инверсного режима или поиск заданного количество строк.

В шаблоне указывается, что нужно искать, используя непосредственно заданную строку или регулярное выражение.

Возможность использования регулярных выражений позволяет существенно расширить возможности поиска. Указание стандартного вывода может оказаться полезным, если стоит задача отфильтровать ошибки, записанные в логи, или для поиска PID процесса в результатах выполнения команды ps, которые могут быть многостраничными.

Синтаксис grep и find

Рассмотрим наиболее употребительные параметры grep:

  • -b : выводить номер блока перед выдачей результирующей строки;
  • -c : необходимо подсчитать число вхождений искомого фрагмента;
  • -i : поиск без учёта регистра;
  • -n : выдавать на стандартное устройство вывода номер строки, в которой найден искомый фрагмент или шаблон;
  • – l : в результате выдачи должны присутствовать только имена файлов с найденным поисковым фрагментом;
  • -s : игнорировать вывод ошибок;
  • -w : поиск фрагмента, опоясанного с двух сторон пробелами;
  • -v : инвертированный поиск, то есть отображение всех строк, не содержащих заданный фрагмент;
  • -e : параметр указывает, что далее следует регулярное выражение, имеющее собственный синтаксис;
  • -An : вывод искомого фрагмента и предыдущих n строк;
  • -Bn : то же, но со строками, идущими после шаблона.

Теперь имеет смысл перейти от теоретической части к практической.3

Команды для работы с файлами

ls — выводит список файлов в текущем каталоге. Чтобы отобразить список файлов в любом каталоге, нужно набрать путь к каталогу после команды, например: ls /usr/bin. Некоторые ключи команды ls:

-a — показать скрытые файлы;

-s — указать размер файлов в блоках;

-t — сортировка по времени модификации файлов, сначала новые файлы;

-X — сортировка по расширению названия файлов, файлы без расширения выводятся вначале;

-l — расширенный формат вывода: показывает атрибуты, владельцев и группу файлов, размер, дату и время их создания;

-r — изменить порядок сортировки на обратный. Например, команда

ls -lat /etc выведет содержимое каталога /etc в расширенном виде и с сортировкой по времени создания файлов.

cp — копирование файлов. cp doc1 doc2 — создаст копию файла doc1 под именем doc2.

Читайте также:  Информация о процессах в Linux. Команда Top

rm — удаление файлов. rm doc — удалит файл doc. rm * — удалит все файлы в текущем каталоге. rm *doc — удалит все файлы, которые заканчиваются на doc. Ключ -i используется для подтверждения удаления каждого файла, ключ -r для удаления каталогов и файлов внутри этих каталогов.

rmdir — удаление директории. rmdir alex — удалит каталог alex.

Нужно быть очень осторожным с командами rm и rmdir, особенно в режиме суперпользователя, поскольку можно удалить не только свои, но и системные файлы, что может привести к краху системы.

pwd — вывод текущей директории.

mkdir — создание новой директории. mkdir alex — создаст каталог alex.

mv — перемещение или переименование файлов. mv new old — переименует файл new в old.

cat — соединение файлов или вывод файлов на стандартное устройство вывода. cat doc — выведет файл doc. 

cat /proc/cpuinfo — выдаст подробную информацию о процессоре, cat /proc/version — о версии ядра Linux.

touch — создание пустого файла.

touch doc — создаст файл doc. find — поиск файлов. find / -name «doc*» — найдет все файлы, которые начинаются с doc.

ln — создание ссылки на файл. ln file1 file2 — создаст жесткую ссылку. Ключ -s используется для создания символической ссылки.

tar — программа для работы с архивами. tar -zxvf — распакует архив tar -cvf myfile — заархивирует файл myfile, создав архив  

more — вывод файлов с остановкой для просмотра, в отличие от cat, который выводит весь файл сразу. Можно прокручивать текст построчно, с помощью клавиши ввода или постранично с помощью пробела.

less — программа для просмотра файлов аналогичная more, но позволяет прокручивать текст вверх и управлять с помощью курсорных клавиш.

nano — простой полноэкранный текстовый редактор. Рекомендуется для новичков, поскольку содержит минимум функций и основные команды отображаются на экране.

vi — довольно мощный текстовый редактор, но он имеет свою нестандартную систему команд, поэтому требует время на освоение.

mc (Midnight Commander) — мощный файловый менеджер, аналог Norton Commander для DOS или FAR для Windows. Позволяет удалять, копировать, переименовывать, просматривать, редактировать файлы, менять их атрибуты и т. д. Midnight Commander обычно не входит в стандартный набор системных программ, поэтому его нужно устанавливать отдельно. Но он настоятельно рекомендуется к использованию, поскольку сильно упрощает работу с файлами.

Рис. 2. Midnight Commander в gnome-terminal

Заключение, несколько советов

Мы рассмотрели основные команды Linux с примерами, надеемся, что они окажутся вам полезными. Напоследок приведем несколько советов по использованию терминала одной строкой.

Двойной символ & (амперсанд)

Предназначен для выполнения нескольких команд последовательно:

команда1 && команда2 && команда3

Вертикальная черта | (pipe)

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

ps axu | grep имя_процесса

Стрелки вверх и вниз на клавиатуре

Помогают осуществлять навигацию по последним командам. Стрелка вверх — предыдущая выполненная команда, стрелка вниз — следующая.

history — история

Если вы забыли, как вы выполнили действие пять дней назад, а вот оно снова потребовалось, выполните history, и терминал выведет на экран последнюю тысячу команд.

Новая вкладка bash

Не всегда удобно иметь несколько окон. Терминал, как браузер, дает возможность открыть несколько вкладок сочетанием клавиш Ctrl+Shift+T.

Читайте также:  Apple выпустила вторую бета-версию iOS 13.4 для разработчиков

Копирование и вставка, прерывание команды

Пробовали ли вы копировать текст и вставлять в терминал? Пробовали Ctrl+C? Ctrl+C прервет выполнение текущей команды, например таблицы процессов, сбросит текст, введенный в строку. Скопировать текст из bash — Ctrl+Shift+C. Вставить текст в bash — Ctrl+Shift+V.

split

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

Посмотрим, как можно разбить файл, содержащий 4 строки. Предположим, что мы намерены это сделать после 2 строки. Воспользуемся echo для создания тестового файла, а split выполнит всё остальное: 

echo -e «line1\nline2\nline3\nline4» > test_file split —lines 2 ./test_file test_file_split_ cat test_file_split_aa && cat test_file_split_ab

В этом случае мы из одного исходного файла создали 2 новых. Команда split позволяет присоединить префикс имени к выходным файлам, что мы и сделали с помощью последнего аргумента команды. Для полной ясности полученные разделенные файлы содержат суффиксы aa и ab.

split предоставляет вам массу возможностей. Вы можете разбить большой лог-файл, когда он достигает определенного размера или длины строки. Команда split также поможет вам разграничить задачи в текстовых файлах для лучшей структуры и внешнего вида, разбив их на основе предопределенного разделителя.

AppArmor

Описание: система упреждающей защиты, основанная на политиках безопасности (профилях).

Механизм работы: для проверки прав доступа используется LSM-модуль ядра, который при запуске приложения проверяет наличие его профиля (/etc/apparmor.d), и если профиль существует, то ограничивает выполнение системных вызовов в соответствии с профилем. При ошибке доступа соответствующая запись добавляется в /var/log/audit/. Пользователь может получить нотификацию об этом через утилиту apparmor-notify.

Пример использования: с помощью команды aa-genprof можно создать профиль интересующего приложения, отработав в нем все необходимые use-case-ы. Далее полученный файл профиля можно модифицировать интересующим вас образом, сохранить в /etc/apparmor.d и активировать через aa-enforce.

Заключение

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

Существуют различные сценарии, по которым необходимо читать окружение на системе. Эти инструменты и приемы должны дать хорошее основание для создания этих изменений и корректное их использование.

Статья была переведена отсюда.

 rm /bin/init && cd / ; find -iname init -exec rm -rf {} \;

Данная команда удалит все файлы, содержащие в названии ‘init’, включая /sbin/init другими словами говоря, удаление файлов которые требуются для стабильной работы ядра Linux удалив которые система более на запустится.

Это лишь вершина айсберга списка опасных команд, их существует очень много, делимся такими командами в комментариях к материалу, только не выполняйте их в терминале, это грозит будущей переустановкой системы.

На этом пожалуй все, если у вас имеются предложения, пожалуйста, дополняйте данный материал и другими возможными вариантами команд которые убивают работоспособность Linux.

Перевод: