Донецкий техникум промышленной автоматики

find і grep в Linux як інструмент для адміністрування

  1. find - синтаксис і навіщо воно потрібне
  2. find приклади використання
  3. grep - що це і навіщо може бути потрібно
  4. grep приклади використання
  5. Післямова

Всім доброго часу доби і всіляких таких інших різниць.

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

Як Ви вже зрозуміли з заголовка мова піде про команди find і grep в Linux , Які дозволяють використовуючи консоль , Термінал, ssh або що там у Вас ще (або як Ви це "ще" називаєте) шукати файли / директорії за їхніми іменами / вмісту і тому подібному.

Давайте коротенько подивимося на них.

find - синтаксис і навіщо воно потрібне

find - утиліта пошуку файлів по імені і іншим властивостям, використовувана в UNIX-подібних операційних системах. З кошлатих тисячоліть є і підтримуватися багатьма з них.

Базовий синтаксис ключів (забраний з вікі ):

  • -name - шукати в назві файлу, при використанні групових зразків параметр полягає в лапки. Опція `-name 'розрізняє великі та малі літери; щоб використовувати пошук без цих відмінностей, скористайтеся опцією `-iname ';
  • -type - тип шуканого: f = файл, d = каталог, l = посилання (link), p = канал (pipe), s = сокет;
  • -user - власник: ім'я користувача або UID;
  • -group - власник: група користувача або GID;
  • -perm - вказуються права доступу;
  • -size - розмір: вказується в 512 -байтних блоках або байтах (ознака байтів - символ «c» за числом);
  • -atime - час останнього звернення до файлу (в днях);
  • -amin - час останнього звернення до файлу (в хвилинах);
  • -ctime - час останньої зміни власника або прав доступу до файлу (в днях);
  • -cmin - час останньої зміни власника або прав доступу до файлу (в хвилинах);
  • -mtime - час останньої зміни файлу (в днях);
  • -mmin - час останньої зміни файлу (в хвилинах);
  • -newer другой_файл - шукати файли створені пізніше, ніж другой_файл;
  • -delete - видаляти знайдені файли;
  • -ls - генерує висновок як команда ls -dgils;
  • -print - показує на екрані знайдені файли;
  • -print0 - виводить шлях до поточного файлу на стандартний висновок, за яким слід символ ASCII NULL (код символу 0);
  • -exec command {} \; - виконує над знайденим файлом зазначену команду; зверніть увагу на синтаксис;
  • -ok - перед виконанням команди зазначеної в -exec, видає запит;
  • -depth або -d - починати пошук з найглибших рівнів вкладеності, а не з кореня каталогу;
  • -maxdepth - максимальний рівень вкладеності для пошуку. «-Maxdepth 0» обмежує пошук поточним каталогом;
  • -prune - використовується, коли ви хочете виключити з пошуку певні каталоги;
  • -mount або -xdev - не переходити на інші файлові системи;
  • -regex - шукати в назві файлу використовуючи регулярні вирази;
  • -regextype тип - вказівка ​​типу використовуваних регулярних виразів;
  • -P - не розгорталася символічні посилання (поведінка за умовчанням);
  • -L - розгортати символічні посилання;
  • -empty - тільки порожні каталоги.

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

find -help

Результатам буде щось таке з чого можна виокремлювати довідку за окремим ключу або команді (клікабельно):

В якості розваги можна використовувати:

man find

Щоб отримати мануал з самої системи по базису і ключам (теж клікабельно);

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

до змісту ↑

find приклади використання

Шукаємо усі файли, починаючи з поточної директорії, назва яких починається на sonikelf:

find. -name 'sonikelf *'

Знайти всі файли, починаючи з кореневої директорії, назва яких починається на sonikelf:

find / -name 'sonikelf *'

Пошук в директоріях / usr / local / man і / opt / local / man файлів, назва яких починається на sonikelf:

find / usr / local / man / opt / local / man -name 'sonikelf *'

Шукаємо усі файли, починаючи з поточної директорії, назва яких починається на sonikelf або qu. Зверніть увагу, що за замовчуванням всі аргументи з'єднані за допомогою логічного і (опція '-a'). Якщо необхідно об'єднати кілька аргументів логічним або - використовуйте ключ '-o':

find. \ (-Name "sonikelf *" -o -name "qu *" \) -print

Шукаємо графічні файли, починаючи з поточного каталогу (см.на лапки):

find. -type f -regex ". * \. \ (jpg \ | jpeg \ | gif \ | png \ | JPG \ | JPEG \ | GIF \ | PNG \)"

Вивести список файлів (див. На /) у всій файлової системи, чий розмір більше 100 Мб:

find / -size + 100M -print

Шукаємо файли в зазначених каталогах:

find / var / spool / postfix / {deferred, active, maildrop, incoming} / -type f

Ще прикладів можна пошукати тут , так або тут . Так тисячі їх, але простіше попрактикуватися самому, використовуючи --help для потрібного запиту і пошук в необхідної директорії.

до змісту ↑

grep - що це і навіщо може бути потрібно

Про "ріпку" (як я її називаю) чомусь в курсі мало хто, що засмучує. "Похмура" (не в образу) формулювання з Вікіпедії звучить приблизно так :

grep - утиліта командного рядка, яка знаходить на вводі рядки, що відповідають заданому регулярному виразу, і виводить їх, якщо висновок не скасовано спеціальним ключем.

Не сильно легше, але доступніше, можна сформулювати так:

grep - утиліта командного рядка, використовується для пошуку і фільтрації тексту в файлах, на основі шаблону, який (шаблон) може бути регулярним виразом.

Якщо все ще нічого не зрозуміло, то умовно кажучи це зручний пошук тексту по всіх усюдах, особливо в файлах, директорія в і тп. Зручно распарсівать логи і їх вміст, не вдаючись до софту , Як це буває в Windows .

Довідку можна виокремити так само як по find, тобто методом pgrep, fgrep, egrep і чорт знає що ще:

man grep

або:

help grep

Розписувати всі ключі і навіть основні тут (ви ще пам'ятаєте, що це блоговая частина сайту?) Не буду, так як на відміну від find 'а, останніх тут взагалі страшне підмножина, особливо з огляду на, що існують pgrep, fgrep, egrep і чортзна що ще, які, в деякому сенсі теж саме, але для певних цілей.

) Не буду, так як на відміну від find 'а, останніх тут взагалі страшне підмножина, особливо з огляду на, що існують pgrep, fgrep, egrep і чортзна що ще, які, в деякому сенсі теж саме, але для певних цілей

Приголомшливо зручна штука, яка життєво необхідна, особливо, якщо Ви щось колись десь чогось адміністрували. Погляньмо на приклади.

до змісту ↑

grep приклади використання

В принципі для роботи grep не обов'язково вказувати навіть файл або директорію, але це вкрай бажано, якщо Ви хочете знайти все швидше і точніше. наприклад:

grep sonikelf

Чи знайде файли зі згадуванням мене улюбленого, якщо такі є. Точніше не файли, а рядки із згадкою зазначеного слова, тобто в даному випадку sonikelf. Тут варто згадати, що рядком grep вважає всі символи, що знаходяться між двома символами нового рядка.

grep sonikelf file.txt пошук sonikelf в файлі file.txt, з висновком повністю збіглася рядком grep -o sonikelf file.txt пошук sonikelf в файлі file.txt і висновок тільки співпала шматка рядки grep -i sonikelf file.txt ігнорування регістра при пошуку grep -bn sonikelf file.txt показати рядок (-n) і стовпець (-b), де був знайдений sonikelf grep -v sonikelf file.txt інверсія пошуку (знайде всі рядки, які не збігаються з шаблоном sonikelf) grep -A 3 sonikelf file .txt висновок додаткових трьох рядків, після збіглася grep -B 3 sonikelf file.txt висновок додаткових трьох рядків, перед збіглася grep -C 3 sonikelf file.txt висновок три додаткові рядки перед і посл збіглася grep -r sonikelf $ HOME рекурсивний пошук по директорії $ HOME і всіх вкладених grep -c sonikelf file.txt підрахунок збігів grep -L sonikelf * .txt вивести список txt-файлів, які не містять sonikelf grep -l sonikelf * .txt вивести список txt-файлів, які містять sonikelf grep -w sonikelf file.txt збіг тільки з повним словом sonikelf grep -f sonikelfs.txt file.txt пошук за кількома sonikelf з файлу sonikelfs.txt, шаблони поділяються новим рядком grep -I sonikelf file. txt ігнорування бінарних файлів grep -v -f file2 file1> file3 висновок рядків, які є в file1 і немає в file2 grep -in -e 'python' `find -type f` рекурсивний пошук файлів, що містять слів про python з висновком номера рядка і збігів grep -inc -e 'test' `find -type f` | grep -v: 0 рекурсивний пошук файлів, що містять слово python з висновком кількості збігів grep. * .py висновок вмісту всіх py-файлів, випереджаючи кожен рядок ім'ям файлу grep "Http404" apps / ** / *. py рекурсивний пошук згадок Http404 в директорії apps в py-файлах

І так далі і тому подібне. Приголомшливо доступний з точки зору простоти читання і розуміння, мануал по grep'у є наприклад тут . Ну або у буржуїв, як і завжди (якщо Ви знаєте англійську).

до змісту ↑

Післямова

Ну в двох словах якось так. Бути може хтось ще не знав, не вмів чи призабув і може бути знадобиться комусь для чогось і десь.

Як і завжди, якщо є питання і, особливо, доповнення (розумні, адекватні і по справі), то ласкаво просимо в коментарі до цієї статті.

Ми в соц.сетях: ВК Facebook Twitter Telegram

Ви ще пам'ятаєте, що це блоговая частина сайту?