6.4.7 Поиск с помощью find
Команда find является хорошим инструментом для поиска файлов и директорий в Unix-подобных операционных системах. Она позволяет пользователям осуществлять сложные поисковые операции, основываясь на различных критериях, таких как имя файла, размер, дата модификации, права доступа и многое другое.
Использование find может значительно упростить многие задачи системного администрирования и управления файлами. Например, Вы можете быстро найти все файлы определенного типа, удалить старые файлы, изменить права доступа для группы файлов или даже выполнить команду для каждого найденного файла.
Важное примечание:
хотя команда find
чрезвычайно полезна, она также может быть потенциально опасной при неправильном использовании. Будьте особенно осторожны при работе с системными файлами или при выполнении операций, которые могут изменить или удалить данные.
Рекомендуется сначала тестировать команды на небольшом наборе файлов или использовать опцию -print
для проверки результатов перед выполнением любых деструктивных действий. Также стоит создавать резервные копии важных данных перед массовыми операциями с файлами.
Основные операции поиска
Для начала Вам нужно подключиться к серверу с помощью терминала SSH. Если Вы не знакомы с процессом подключения через SSH, рекомендуем ознакомиться с нашей подробной инструкцией по указанной ссылке.
После успешного подключения Вы получите доступ к командной строке сервера. Именно в ней Вы сможете использовать команду find
для поиска файлов и папок. Эта команда чрезвычайно гибкая и позволяет осуществлять поиск по различным критериям.
Поиск файлов по имени
-
Поиск файлов по имени:
Объяснение: команды ищут файл
report.txt
или все файлы с расширением.txt
в директории/home/user/documents/
.- find /home/user/documents/ -name "report.txt"
- find /home/user/documents/ -name "*.txt"
-
Поиск без учета регистра:
Объяснение: команда ищет файл
project.conf
в директории/home/user/projects/
, игнорируя регистр букв.- find /home/user/projects/ -iname project.conf
Примечание: поиск в системных директориях может требовать прав администратора (root).
Поиск по размеру файлов
-
Поиск по размеру файлов:
Объяснение: команда находит все файлы размером более
10 мегабайт
в директории/home/user/downloads/
.- find /home/user/downloads/ -size +10M
Поиск по правам доступа
-
Поиск по маске прав:
Объяснение: команда находит все файлы с правами доступа 700 (чтение, запись и выполнение только для владельца) в директории
/home/user/scripts/
.- find /home/user/scripts/ -perm 700
Поиск по дате модификации
-
Поиск по дате файлов, созданных или измененных в течение последних 5 дней:
Объяснение: команда находит файлы, созданные или измененные в течение последних
5 дней
в директории/home/user/documents/
.- find /home/user/documents/ -type f -mtime -5
-
Файлы, созданные или измененные в течение последних 5 минут:
Объяснение: команда находит файлы, созданные или измененные в течение последних
5 минут
в директории/home/user/temp/
.- find /home/user/temp/ -type f -mmin -5
-
Найти файлы, созданные или измененные более 30 дней назад (поиск устаревших файлов):
Объяснение: команда находит файлы, которые не изменялись более
30 дней
в директории/home/user/archives/
.- find /home/user/archives/ -type f -mtime +30
-
Удалить созданные или измененные файлы старше 30 дней:
Объяснение: команда удаляет файлы, которые не изменялись более
30 дней
в директории/home/user/temp/
.- find /home/user/temp/ -type f -mtime +30 -delete
Внимание: удаление файлов является необратимой операцией. Будьте осторожны при использовании опции -delete
.
-
Время последнего обращения к которым более 5 дней:
Объяснение: команда находит файлы, к которым не обращались более
5 дней
в директории/home/user/logs/
.- find /home/user/logs/ -type f -atime +5
Поиск по содержимому
-
Поиск строки в файлах:
Объяснение: команда ищет слово
TODO
(без учета регистра) во всех файлах в директории/home/user/projects/
.- find /home/user/projects/ -type f -exec grep -i -H "TODO" {} \;
-
Найти все файлы php, в которых встречается строка STRING:
Объяснение: команда ищет слово
STRING
во всех PHP файлах в директории/var/www/html/
.- find /var/www/html/ -type f -name "*.php" -exec grep -i -H "STRING" {} \;
-
Также можно использовать команду grep с опцией
-R
для поиска файлов по содержимому:Объяснение: команда рекурсивно ищет
STRING
во всех файлах в директории/home/user/documents/
.- grep "STRING" -R /home/user/documents/
Замена текста в файлах
-
Замена текста в файлах:
Объяснение: команда заменяет все вхождения
old_server
наnew_server
во всех.conf
файлах в директории/home/user/configs/
.- find /home/user/configs/ -type f -name "*.conf" -exec sed -i 's/old_server/new_server/g' {} \;
Важно: будьте осторожны при использовании этой команды, поскольку она изменяет содержимое файлов.
Изменение прав доступа
-
Массовое изменение прав доступа, установка прав доступа 644 на все файлы в текущей директории и всех поддиректориях:
Объяснение: команда устанавливает права доступа 644 на все файлы в директории
/home/user/public_html/
и ее поддиректориях.- find /home/user/public_html/ -type f -exec chmod 644 {} \;
-
Установка прав доступа 755 на все папки в текущей директории и всех поддиректориях:
Объяснение: команда устанавливает права доступа 755 на все директории в
/home/user/public_html/
и ее поддиректориях.- find /home/user/public_html/ -type d -exec chmod 755 {} \;
Сложные операции поиска
-
Поиск всех файлов html, содержащих код:
0; URL = http
и установка для них всех прав 000 (полезно для поиска вредоносного кода):Объяснение: команда ищет HTML файлы, которые содержат потенциально вредоносный код перенаправления, и изменяет их права доступа на 000.
- 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, что может быть полезным для безопасности.
- find /var/www/*/wp-content/uploads/*/*/*.php -exec chmod -R 000 {} \;
Примечание: большинство команд требуют прав администратора (root) для выполнения. Также, будьте осторожны при изменении прав доступа к файлам. Ошибочное изменение прав на системные директории может повредить работоспособность ОС.