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) для выполнения. Также, будьте осторожны при изменении прав доступа к файлам. Ошибочное изменение прав на системные директории может повредить работоспособность ОС.