*Cube-Host — повний спектр хмарних послуг!!

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

Практичний довідник з пошуку файлів на серверах Linux

Команда find — один із найкорисніших інструментів Linux для адміністрування VPS: вона допомагає знаходити файли за назвою, розміром, часом створення, власником, правами доступу та навіть вмістом, а потім виконувати безпечні дії (переміщення, chmod, архівування, видалення) над отриманими результатами.

Якщо ви адмініструєте веб-сайт, поштовий сервер або будь-яку програму на VPS під Linux, володіння find заощадить вам години під час інцидентів: «Куди поділося місце на диску?», «Які файли змінилися минулої ночі?», «Які папки мають небезпечні права доступу?»


find, locate та grep: виберіть правильний інструмент

Багато завдань «пошуку» вирішуються швидше за допомогою правильної команди:

ІнструментНайкраще підходить дляКлючова деталь
findТочний пошук файлів дії (видалення/переміщення/chmod)Переглядає каталоги в режимі реального часу
знайтиМиттєвий пошук за іменем файлуВикористовує індекс (може бути застарілим)
grepПошук у файлах за змістомЧасто використовується разом із find (-exec grep)

Загальна синтаксис та як find обчислює вирази

find  

Місце пошуку — це шлях до каталогу. Використовуйте . для поточного каталогу. Тести визначають, що відповідає (ім’я, тип, час, власник, права доступу). Дії визначають, що робити з відповідностями (вивести, виконати, видалити).

Важлива особливість: find оцінюється зліва направо. Коли ви поєднуєте умови за допомогою AND/OR, використовуйте дужки (з екрануванням у оболонці), щоб уникнути несподіванок.

# Example: (A OR B) AND type file
find . ( -name "*.log" -o -name "*.txt" ) -type f

Найкорисніші рецепти find (готові до копіювання/вставлення)

1) Пошук за іменем (з урахуванням регістру та без урахування регістру)

# Exact name
find /var/www -name "wp-config.php"

# Pattern (all .tmp files)
find / -name "*.tmp"

# Case-insensitive
find /home -iname "*.JPG"

Порада: завжди беріть шаблони в лапки, як-от "*.tmp" щоб оболонка не розгортала їх занадто рано.

2) Пошук за типом (файли, каталоги, символічні посилання)

# Files only
find . -type f

# Directories only
find . -type d

# Symlinks
find /etc -type l

3) Пошук за розміром (знайдіть, що займає місце на диску на VPS)

# Files larger than 1 GB
find / -type f -size  1G

# Files smaller than 10 KB
find /var/www -type f -size -10k

На виробничих серверах уникайте сканування всієї файлової системи, якщо це не потрібно. Почніть з ймовірних «гарячих точок»: /var/log, /var/lib, /home, /tmpта каталог вашого проєкту.

4) Пошук за часом (mtime, mmin, newer)

Прапорці часу надзвичайно корисні для реагування на інциденти та очищення:

# Files modified more than 60 days ago
find /var/log -type f -mtime  60

# Files modified in the last 30 minutes
find /var/www -type f -mmin -30

# Files modified between 10 and 20 minutes ago
find /var/www -type f -mmin  10 -mmin -20

Порада: -mtime вказується в днях. -mmin виражається в хвилинах. Для підозрілої активності на VPS -mmin часто є більш практичним.

5) Пошук за власником та групою (корисно для кореневих каталогів веб-сайтів)

# Files owned by a user
find /var/www -type f -user www-data

# Files owned by a group
find /var/www -type f -group www-data

6) Пошук за правами доступу (безпека та зміцнення захисту)

Ці перевірки є типовими під час перевірок безпеки Linux:

# World-writable files (potential risk)
find /var/www -type f -perm -0002

# Directories with 777 (almost always a mistake)
find /var/www -type d -perm 0777

# Files readable/writable by everyone
find / -type f -perm 0666

Якщо ви використовуєте бізнес-сервіси (WordPress, поштовий сервер, панелі управління) на VPS, наведення порядку в правах доступу є частиною базового зміцнення безпеки.

7) Пошук за вмістом (find grep)

Щоб шукати всередині файлів, поєднайте find з grep. Це часто використовується під час пошуку секретних даних, прапорців конфігурації або підозрілих вставлень.

# Search for a string inside all .conf files
find /etc -type f -name "*.conf" -exec grep -Hn "listen" {} ;

# Case-insensitive search inside PHP files (project folder)
find /var/www/project -type f -name "*.php" -exec grep -Hin "base64_decode" {} ;

Поради щодо продуктивності для великих файлових систем VPS

  • Обмежте глибину, щоб уникнути дорогої рекурсії: -maxdepth та -mindepth.
  • Залишайтеся в одній файловій системі, щоб уникнути підключених томів: -xdev.
  • Виключіть каталоги за допомогою -prune (ідеально підходить для node_modules, кеш, резервні копії).
  • Використовуйте -print0 xargs -0 для безпечної обробки пробілів/нових рядків в іменах файлів.
# Exclude node_modules and vendor directories
find /var/www/project 
  ( -path "*/node_modules/*" -o -path "*/vendor/*" ) -prune -o 
  -type f -name "*.log" -print

Дії над знайденими об’єктами: -exec, -ok, -delete (використовуйте обережно)

Найпотужніша частина find — це автоматизація. Але з великою силою приходить «ой, я видалив робочу версію». Використовуйте безпечний робочий процес:

  1. Запустіть пошук спочатку з -print спочатку та перегляньте результат.
  2. Потім запустіть дію з підтвердженням (-ok) або запишіть результати.
  3. Тільки після цього використовуйте -delete для безпечних, добре перевірених шаблонів.
# SAFE: show what would be removed first
find /tmp -type f -mtime  14 -print

# Semi-safe: ask before executing
find /tmp -type f -mtime  14 -ok rm -f {} ;

# Fast but risky: delete immediately (use only when confident)
find /tmp -type f -mtime  14 -delete

Порада від професіонала: за можливості віддавайте перевагу -exec ... {} (plus), коли це можливо — це ефективніше, ніж запускати команду один раз для кожного файлу.

Приклад автоматизації: заплановане очищення за допомогою cron

Класичне завдання для VPS: не давати тимчасовим папкам рости безкінечно. Заплануйте нічне очищення:

crontab -e

# Remove files older than 14 days from /tmp daily at 00:00
0 0 * * * /usr/bin/find /tmp -type f -mtime  14 -delete

Використовуйте повний шлях до find (перевірте за допомогою which find) і завжди починайте з -print пробного запуску на тестовій папці.

Поширені помилки та як їх уникнути

  • Забули поставити лапки навколо *.log: оболонка розширює це неправильно. Виправлення: використовуйте "*.log".
  • Запуск find з / за замовчуванням: повільно і багато шуму. Виправлення: спочатку вкажіть потрібний каталог.
  • Занадто раннє використання -delete: випадкова втрата даних. Виправлення: спочатку перегляньте вихідні дані за допомогою -print .
  • Неправильне розуміння прапорців часу: -mtime означає дні, а не години. Виправлення: використовуйте -mmin для коротких проміжків часу.
  • Порушення пріоритету логічних операторів OR/AND. Вирішення: групуйте за допомогою ( ... ).

Чому це важливо для адміністрування VPS

На VPS під управлінням Linux find є щоденним інструментом: досліджуйте використання диска, очищайте старі файли, знаходьте конфігурації та виконуйте перевірки безпеки. У поєднанні з інструментами моніторингу (такими як Zabbix) це стає набором інструментів реагування на інциденти, якому можна довіряти.

Prev
Menu