*КУБ - повний комплекс хмарних послуг!

Пошук Linux за допомогою команди find

Утиліта find — це універсальний і функціональний спосіб пошуку в Linux . Ця стаття — це шпаргалка з описом і прикладами її використання.

Загальний синтаксис

find <where to look> <options>

<where to search> шлях до кореневого каталогу, з якого слід розпочати пошук. Наприклад, find /home/user — пошук у відповідному каталозі. Для поточного каталогу використовуйте крапку «.».

<options> — це набір правил для пошуку.

* За замовчуванням пошук є рекурсивним. Для пошуку в певному каталозі можна використовувати опцію maxdepth .

Опис опцій

Опція

Опис

-nameПошук за назвою.
-inameCaseнечутливий пошук за назвою.
-type

Тип об’єкта пошуку. Можливі варіанти:

  • f – файл;
  • d – каталог;
  • l – посилання;
  • p – канал;
  • s – сокет.
-sizeРозмір об’єкта. Вказується в блоках по 512 байт або просто в байтах (з символом «c»).
-mtimeЧас модифікації файлу. Вказується в днях.
-mminЗмінити час у хвилинах.
-atimeЧас останнього доступу до об’єкта в днях.
-aminЧас останнього доступу в хвилинах.
-ctimeОстання зміна власника або прав на об’єкт за останні дні.
-cminОстанній власник або зміна прав за останні хвилини.
-userПошук за власником.
-groupЗа групами.
-permЗ певними правами доступу.
-depthПошук слід починати не з кореневого каталогу, а з найглибше вкладеного каталогу.
-maxdepthМаксимальна глибина пошуку в каталозі. -maxdepth 0 — пошук тільки в поточному каталозі. За замовчуванням пошук є рекурсивним.
-pruneВиключити перелічені каталоги.
-mountНе переходьте на інші файлові системи.
-regexЗа іменем із регулярним виразом.
-regextype <type>Тип регулярного виразу.
-L or -followВідображає вміст символічних посилань (symlinks).
-emptyПошук порожніх каталогів.
-deleteВидалити знайдено.
-lsВивід як ls -dgils
-printЗнайдено шоу.
-print0Шлях до знайдених предметів.
-exec <command> {} \;Виконати команду на знайденому.
-okВидавати запит перед виконанням -exec.

Також доступні логічні оператори:

Оператор

Опис

-aЛогічне І. Поєднайте кілька критеріїв пошуку.
-oЛогічне АБО. Нехай команда пошуку виконує пошук на основі одного з критеріїв пошуку.
-not or !Логічне НЕ. Інвертує пошуковий термін.

Повний набір доступних опцій можна отримати за допомогою команди man find .


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

Пошук файлу за назвою

1. Простий пошук за назвою:

find / -name “file.txt”

* Цей приклад буде шукати у всій файловій системі файл з іменем file.txt, починаючи з кореневого каталогу / .

2. Пошук файлу за частиною імені:

find / -name “*.tmp”

* ця команда буде шукати всі папки або файли в кореневому каталозі /, що закінчуються на .tmp

3. Кілька умов.

a) Логічне І. Наприклад, файли, що починаються з sess_ і закінчуються на cd :

find. -name “sess_*” -a -name “*cd”

б) Логічне АБО. Наприклад, файли, що починаються з sess_ або закінчуються на cd :

find. -name “sess_*” -o -name “*cd”

c) Регулярні вирази мають більш компактну форму, наприклад:

find. -regex ‘.*/\(sess_.*cd\)’

find. -regex ‘.*/\(sess_.*\|.*cd\)’

* де в першому пошуку використовується вираз, подібний до прикладу а), а в другому – б).

4. Знайти всі файли, крім .log:

find. ! -name “*.log”

* У цьому прикладі ми використовували логічний оператор !.

Пошук за датою

1. Пошук файлів, які були змінені певну кількість днів тому:

find. -type f -mtime +60

* ця команда знайде файли, які були змінені більше ніж 60 днів тому.

Або між:

find. -mmin -20 -mmin +10 -type f

* знайти всі файли, які були змінені більше ніж 10 хвилин тому, але не більше ніж 20 хвилин тому .

2. Пошук файлів з новішими . Ця опція доступна з версії 4.3.3 (її можна побачити за допомогою команди find –version ).

a) дата зміни:

find. -type f -newermt “2019-11-02 00:00”

* покаже всі файли, які були змінені з 02.11.2019 00:00.

find. -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* знайде всі файли, які були змінені в період з 31.10.2019 по 01.11.2019 (включно).

б) дата застосування:

find. -type f -newerat 2019-10-08

* всі файли, до яких було здійснено доступ з 10.08.2019.

find. -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* всі файли, до яких було здійснено доступ у жовтні.

c) дата створення:

find. -type f -newerct 2019-09-07

* всі файли, створені з 7 вересня 2019 року.

find. -type f -newerct 2019-09-07 ! -newerct “2019-09-09 07:50:00”

* файли, створені з 09/07/2019 00:00:00 до 09/09/2019 07:50

Тип

Шукати в поточному каталозі та всіх його підкаталогах тільки файли:

find. -type f

* f – пошук тільки файлів.

Пошук за дозволами

1. Ми шукаємо всіх, хто вміє читати і писати:

find / -perm 0666

2. Знайти файли, до яких має доступ тільки власник:

find / -perm 0600

Пошук файлів за змістом

find / -type f -exec grep -i -H “content” {} \;

* У цьому прикладі виконується рекурсивний пошук усіх файлів у каталозі / і відображається список тих, що містять рядок content .

Відсортовано за датою модифікації

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort-r

* команда знайде всі файли в каталозі /data , додасть дату модифікації до імені та відсортує дані за іменем. В результаті ми отримаємо, що файли будуть розташовані в порядку, в якому вони були змінені.

Обмеження кількості результатів виводу

Найпоширенішим прикладом є вивід одного файлу, який був змінений останнім. Візьмемо приклад сортування та додамо наступне:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort-r | head -n 1

Пошук з дією (exec)

1. Знайдіть тільки файли, що починаються з sess_, і видаліть їх:

find. -name “sess_*” -type f -print -exec rm {} \;

-print не є обов’язковим, але він покаже все, що буде видалено, тому ця опція корисна, коли команда виконується вручну.

2. Перейменуйте знайдені файли:

find. -name “sess_*” -type f -exec mv {} new_name \;

або:

find. -name “sess_*” -type f | xargs -I ‘{}’ mv {} new_name

3. Перемістіть знайдені файли:

find. -name “sess_*” -type f -exec mv {} /new/path/ \;

* У цьому прикладі ми перемістимо всі знайдені файли до каталогу /new/path/ .

4. Відобразити кількість знайдених файлів і папок, які закінчуються на .tmp :

find. -name “*.tmp” | wc -l

5. Змінити дозволи:

find /home/user/* -type d -exec chmod 2700 {} \;

* У цьому прикладі ми шукаємо всі каталоги ( тип d ) у каталозі /home/user і встановлюємо для них права доступу 2700 .

6. Передайте знайдені файли в конвеєр (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’

* У цьому прикладі ми використовували find для пошуку рядка test у файлах, що знаходяться в каталозі /etc і мають розширення .conf . Для цього ми передали список знайдених файлів команді grep , яка вже виконала пошук у вмісті цих файлів.

7. Заміна файлів за допомогою команди sed:

find /opt/project -type f -exec sed -i -e “s/test/production/g” {} \;

* знайдіть усі файли в каталозі /opt/project і змініть їхній вміст з test на production .

Заплановане очищення

Команда find корисна для автоматичного видалення застарілих файлів.

Відкрийте завдання cron для редагування:

crontab -e

І додайте:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} \;

* У цьому прикладі ми видаляємо всі файли та папки з каталогу /tmp, які старіші за 14 днів. Завдання виконується щодня о 00:00 .

* Ми переглядаємо повний шлях до виконуваного файлу find за допомогою команди which find — він може бути розташований у різних місцях на різних системах UNIX.

VPS Linux

VPS-хостинг з віртуалізацією KVM

Віддалений доступ/керування

Готове рішення

Віртуалізація KVM

Підтримка 24 години на добу