6.4.7 Пошук за допомогою find

Зображення

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

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

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

Рекомендується спочатку тестувати команди на невеликому наборі файлів або використовувати опцію -print для перевірки результатів перед виконанням будь-яких деструктивних дій. Також варто створювати резервні копії важливих даних перед масовими операціями з файлами.

Основні операції пошуку

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

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

Пошук файлів за ім’ям

  • Пошук файлів за ім’ям:

    Пояснення: команди шукають файл report.txt або всі файли з розширенням .txt у директорії /home/user/documents/.

    1. find /home/user/documents/ -name "report.txt"
    1. find /home/user/documents/ -name "*.txt"
  • Пошук без урахування регістру:

    Пояснення: команда шукає файл project.conf у директорії /home/user/projects/, ігноруючи регістр букв.

    1. find /home/user/projects/ -iname project.conf

Примітка: пошук у системних директоріях може вимагати прав адміністратора (root).

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

  • Пошук за розміром файлів:

    Пояснення: команда знаходить всі файли розміром більше 10 мегабайт у директорії /home/user/downloads/.

    1. find /home/user/downloads/ -size +10M

Пошук за правами доступу

  • Пошук за маскою прав:

    Пояснення: команда знаходить всі файли з правами доступу 700 (читання, запис і виконання тільки для власника) у директорії /home/user/scripts/.

    1. find /home/user/scripts/ -perm 700

Пошук за датою модифікації

  • Пошук за датою файлів, створених або змінених протягом останніх 5 днів:

    Пояснення: команда знаходить файли, створені або змінені протягом останніх 5 днів у директорії /home/user/documents/.

    1. find /home/user/documents/ -type f -mtime -5
  • Файли створені або змінені протягом останніх 5 хвилин:

    Пояснення: команда знаходить файли, створені або змінені протягом останніх 5 хвилин у директорії /home/user/temp/.

    1. find /home/user/temp/ -type f -mmin -5
  • Знайти файли, створені або змінені старше 30 днів (пошук застарілих файлів):

    Пояснення: команда знаходить файли, які не змінювалися більше 30 днів у директорії /home/user/archives/.

    1. find /home/user/archives/ -type f -mtime +30
  • Видалити створені або змінені файли старше 30 днів:

    Пояснення: команда видаляє файли, які не змінювалися більше 30 днів у директорії /home/user/temp/.

    1. find /home/user/temp/ -type f -mtime +30 -delete

Увага: видалення файлів є незворотною операцією. Будьте обережні при використанні опції -delete.

  • Час останнього звернення до яких понад 5 днів:

    Пояснення: команда знаходить файли, до яких не зверталися більше 5 днів у директорії /home/user/logs/.

    1. find /home/user/logs/ -type f -atime +5

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

  • Пошук рядка у файлах:

    Пояснення: команда шукає слово TODO (без урахування регістру) у всіх файлах в директорії /home/user/projects/.

    1. find /home/user/projects/ -type f -exec grep -i -H "TODO" {} \;
  • Знайти всі файли php в яких зустрічається рядок STRING:

    Пояснення: команда шукає слово STRING у всіх PHP файлах в директорії /var/www/html/.

    1. find /var/www/html/ -type f -name "*.php" -exec grep -i -H "STRING" {} \;
  • Також можна використовувати команду grep з опцією -R для пошуку файлів за вмістом:

    Пояснення: команда рекурсивно шукає STRING у всіх файлах в директорії /home/user/documents/.

    1. grep "STRING" -R /home/user/documents/

Заміна тексту у файлах

  • Заміна тексту у файлах:

    Пояснення: команда замінює всі входження old_server на new_server у всіх .conf файлах в директорії /home/user/configs/.

    1. find /home/user/configs/ -type f -name "*.conf" -exec sed -i 's/old_server/new_server/g' {} \;

Важливо: будьте обережні при використанні цієї команди, оскільки вона змінює вміст файлів.

Зміна прав доступу

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

    Пояснення: команда встановлює права доступу 644 на всі файли в директорії /home/user/public_html/ та її піддиректоріях.

    1. find /home/user/public_html/ -type f -exec chmod 644 {} \;
  • Встановлення прав доступу 755 на всі папки в поточній директорії та всіх піддиректоріях:

    Пояснення: команда встановлює права доступу 755 на всі директорії в /home/user/public_html/ та її піддиректоріях.

    1. find /home/user/public_html/ -type d -exec chmod 755 {} \;

Складні операції пошуку

  • Пошук всіх файлів html, що містять код: 0; URL = http і встановлення для них всіх прав 000 (корисно для пошуку шкідливого коду):

    Пояснення: команда шукає HTML файли, які містять потенційно шкідливий код перенаправлення, і змінює їх права доступу на 000.

    1. find /var/www/html/ -type f -name "*.html" -exec grep -i -H "0;URL=http" {} \; -exec chmod -R 000 {} \;
  • Пошук усіх php файлів у вказаному каталозі wp-content/uploads до 3-х вкладень усіх користувачів всіх сайтів сервера та встановлення їм усім прав 000:

    Пояснення: команда знаходить всі PHP файли в директоріях завантажень WordPress і змінює їх права доступу на 000, що може бути корисним для безпеки.

    1. find /var/www/*/wp-content/uploads/*/*/*.php -exec chmod -R 000 {} \;

Примітка: більшість команд вимагають прав адміністратора (root) для виконання. Також, будьте обережні при зміні прав доступу до файлів. Помилкова зміна права на системні директорії може пошкодити працездатність ОС.