Блог компанії 3v-Hosting

Як використовувати команду find в Linux

Адміністрування

8 хв.


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

 

 

 

 

База до команди find

 

Команда find в Linux - це універсальний інструмент, призначений для пошуку файлів і каталогів на основі різних умов, таких як ім'я, розмір, тип, дозволи, дата модифікації та багато іншого. Команда find більш потужна, ніж інші інструменти пошуку, оскільки вона обходить дерева каталогів рекурсивно. Це забезпечує ретельну перевірку файлової системи, починаючи із зазначеного каталогу.


Основний синтаксис такий:

    find [starting-point] [options] [expression]

    starting-point: Шлях до каталогу, в якому починається пошук.
    options: Прапори, що змінюють поведінку пошуку.
    expression: Критерій для пошуку файлів або каталогів.

Незважаючи на те, що для пошуку файлів можна використовувати й інші утиліти, як-от locate або grep, find у Linux унікальний тим, що завжди шукає в режимі реального часу і підтримує складнішу фільтрацію та виконання дій.

 

 

 

 

Базовий пошук файлів за допомогою find

 

У найпростішому вигляді команда linux find може використовуватися для пошуку файлу за іменем. Наприклад:

    find /home/user -name «report.txt»

Ця команда починає пошук з адреси /home/user і рекурсивно шукає файл із точним ім'ям report.txt. За замовчуванням параметр -name чутливий до регістру. Якщо вам потрібен пошук без урахування регістру, ви можете використовувати -iname:

    find /home/user -iname «Report.txt»

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


Для пошуку каталогів замість файлів можна використовувати параметр -type d:

    find /var/log -type d -name «apache2»

Щоб обмежити результати пошуку звичайними файлами, використовуйте параметр -type f:

    find /var/log -type f -name «*.log»

Цей приклад поверне всі файли, що закінчуються на .log, в каталозі /var/log і його підкаталогах.

 

 

 

 

Використання фільтрів за розміром, часом і дозволами

 

Справжня сила команди find у linux полягає в її здатності фільтрувати за різними атрибутами файлів, крім імен.


1. Пошук за розміром

Ви можете знаходити файли за їхнім розміром, використовуючи параметр -size:

    find /home -size +100M

Це дасть змогу знайти всі файли розміром понад 100 мегабайт. Аналогічно:

    -size -10k - знаходить файли розміром менше 10 кілобайт;
    -size 1G - знаходить файли розміром рівно 1 гігабайт.

 

2. Пошук за часом

Ви можете знайти файли, ґрунтуючись на часі їхнього останнього доступу (-atime), зміни (-mtime) або зміни (-ctime).

    find /var/log -mtime -7

Ця команда знаходить файли, змінені протягом останніх 7 днів.

 

3. Пошук на основі дозволів

Пошук файлів із певними дозволами можна виконати за допомогою параметра -perm:

    find /home -perm 644

Це дасть змогу знайти файли з правами доступу rw-r--r--r--. Щоб знайти файли, які доступні для читання всім, незалежно від прав власника:

    find /home -perm -o=r

Така гнучкість робить команду linux find надзвичайно корисною для аудиту файлів у різних системах.

 

 

 

 

Виконання команд на знайдених файлах

 

Однією з найбільш просунутих функцій команди bash find є її здатність виконувати дії над кожним файлом, який відповідає критеріям пошуку. Для цього використовується опція -exec.

 

Наприклад, щоб видалити всі файли .tmp:

    find /tmp -type f -name «*.tmp» -exec rm {} \;

Тут {} - це місце для поточного файлу, а \; позначає кінець команди.


Інший практичний приклад - зміна прав доступу:

    find /var/www -type f -name «*.php» -exec chmod 644 {} \;


Ви також можете об'єднати кілька команд у ланцюжок:

    find /home/user/docs -name «*.txt» -exec cp {} /home/user/backup/ \; -exec rm {} \;

Ця команда копіює файли .txt у каталог резервного копіювання і видаляє оригінали.


Як альтернативу можна використовувати команду -exec ... + замість \;, щоб виконати команду один раз з усіма файлами як аргументами (ефективніше для великої кількості файлів).

 


 

Інші корисні статті з адміністрування в нашому Блозі:


    - 10 найчастіше вживаних прикладів для IPTABLES

    - Cron - Плануй завдання на Linux-серверах правильно

    - Помилка 502 Bad Gateway: що це таке та як її виправити

    - Як перевірити версію Ubuntu

 


 

 

Комбінування умов за допомогою логічних операторів

 

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


Оператор AND (-a)

    find /etc -type f -name «*.conf» -a -size +10k

Знаходить файли конфігурації розміром понад 10 кілобайт.


Оператор OR (-o)

    find /etc -name «*.conf» -o -name «*.cfg»

Знаходить файли з розширеннями .conf або .cfg.


Часто потрібне групування за допомогою круглих дужок:

    find /etc \( -name «*.conf» -o -name «*.cfg»\) -a -size +10k

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

 

 

 

 

Спеціальні опції та міркування з приводу продуктивності

Інструмент find linux надає додаткові спеціальні опції для підвищення продуктивності та точного налаштування пошуку.


Виключення каталогів

Ви можете уникнути спуску в певні каталоги, використовуючи опцію -prune:

    find / -path /proc -prune -o -name «core» -print

Це не дозволить find втрачати час усередині /proc.


Контроль глибини

Керуйте глибиною пошуку за допомогою опцій -maxdepth і -mindepth:

    find /home/user -maxdepth 2 -name «*.jpg»

Це обмежує пошук двома рівнями каталогів.

 


Дотримання символьних посилань

За замовчуванням find не переходить за символічними посиланнями. Щоб змінити цю поведінку, використовуйте параметр -L:

    find -L /home/user -name «*.txt»

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

 

 

 

 

Інтеграція з іншими командами Linux

 

Здатність find в linux легко інтегруватися з іншими утилітами оболонки робить його ще ціннішим.


Наприклад, пошук великих файлів та їх сортування за розміром:

    find /var -type f -exec du -h {} + | sort -rh | head -n 10

Цей конвеєр знаходить файли в каталозі /var, обчислює їхнє використання диска, сортує їх у зворотному порядку за розміром і показує 10 найбільших файлів.


Інший приклад - використання xargs для підвищення ефективності:

    find /tmp -name «*.log» | xargs rm

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


Зверніть увагу, що якщо імена файлів містять пробіли, то краще використовувати:

    find /tmp -name «*.log» -print0 | xargs -0 rm

Тут -print0 і -0 дозволяють безпечно обробляти файли зі спеціальними символами в іменах.

 

 

 

 

Практичні приклади використання

 

1. Очищення старих резервних копій

    find /backup -type f -name «*.tar.gz» -mtime +30 -exec rm {} \;

Видаляє архіви резервних копій старше 30 днів.


2. Пошук записуваних файлів

    find / -type f -perm -o=w

Корисно для аудиту безпеки.


3. Знаходження порожніх каталогів

    find /var/www -type d -empty

Допомагає виявити непотрібні папки.


4. Пошук файлів, змінених за певний період

    find /home/user -type f -newermt 2025-04-01 ! -newermt 2025-04-15

Знаходить файли, змінені в період з 1 по 14 квітня 2025 року.

 

 

 

 


Висновок

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

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

Опануйте команду bash find, щоб досягти справжньої майстерності роботи з командним рядком і відкрити можливості для автоматизації та створення сценаріїв у середовищах Linux.