Команда find
является одним из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие над каждым совпадающим файлом.
Вы можете использовать find
команду для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и т. д. Его также можно комбинировать с другими инструментами, такими как grep
или sed
.
В этой статье вы узнаете о том, как найти файлы и каталоги в Linux.
Синтаксис команды
Общий синтаксис find
команды следующий:
find [options] [path...] [expression]
- Атрибут
options
управляет обработкой символических ссылок, параметрами отладки и методом оптимизации. - Атрибут
path...
определяет начальный каталог или каталоги, в которых find будет искать файлы. - Атрибут
expression
состоит из параметров, шаблонов поиска и действий, разделенных операторами.
Для поиска файлов в каталоге пользователь, вызывающий find
команду, должен иметь права на чтение этого каталога.
find -L /var/www -name "*.js"
- Опция
-L
(опции) указываетfind
команде переходить по символическим ссылкам. - ( Путь
/var/www
…) указывает каталог, в котором будет выполняться поиск. - (Выражение)
-name "*.js
указываетfind
на поиск файлов, оканчивающихся на.js
(файлы JavaScript).
Найти файлы по имени
Поиск файлов по имени, вероятно, является наиболее распространенным использованием find
команды. Чтобы найти файл по его имени, используйте -name
параметр, за которым следует имя файла, который вы ищете.
Например, чтобы найти файл с именем file.docx в /home/www-php
каталоге, вы должны использовать следующую команду:
find /home/www-php -type f -name file.docx
Чтобы запустить поиск без учета регистра, измените -name
параметр на -iname
:
find /home/www-php -type f -iname file.docx
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, оканчивающиеся на .log.gz
внутри /var/log/nginx
каталога, введите:
find /var/log/nginx -type f -name '*.log.gz'
Важно отметить, что вы должны либо заключать шаблон в кавычки, либо экранировать *
символ звездочки обратной косой чертой \
, чтобы он не интерпретировался оболочкой при использовании подстановочного знака.
Чтобы найти все файлы, которые не соответствуют регулярному выражению *.log.gz
, вы можете использовать -not
опцию. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz
вы, используйте:
find /var/log/nginx -type f -not -name '*.log.gz'
Найти файлы по типу
Иногда вам может понадобиться искать определенные типы файлов, такие как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.
Для поиска файлов по их типу используйте -type
параметр и один из следующих дескрипторов, чтобы указать тип файла:
f
: обычный файлd
: каталогl
: символическая ссылкаc
: символьные устройстваb
: блокировать устройстваp
: именованный канал (FIFO)s
: разъем
Например, чтобы найти все каталоги в текущем рабочем каталоге, вы должны использовать:
find . -type d
Типичным примером может быть рекурсивное изменение прав доступа к файлам веб-сайта 644
и разрешений каталогов с 755
помощью chmod
команды:
find /var/www-php -type d -exec chmod 0755 {} \;
find /var/www-php -type f -exec chmod 0644 {} \;
Найти файлы по размеру
Чтобы найти файлы по размеру файла, передайте -size
параметр вместе с критериями размера. Для указания размера файла можно использовать следующие суффиксы:
b
: блоки по 512 байт (по умолчанию)c
: байтw
: двухбайтовые словаk
: КилобайтыM
: МегабайтыG
: Гигабайты
Следующая команда найдет все файлы ровно в 1024
байтах внутри /tmp
каталога:
find /tmp -type f -size 1024c
Команда find
также позволяет искать файлы, размер которых больше или меньше указанного.
В следующем примере мы ищем все файлы меньше, чем 1MB
внутри текущего рабочего каталога. Обратите внимание на символ минус -
перед значением размера:
find . -type f -size -1M
Если вы хотите найти файлы размером более 1MB
, вам нужно использовать +
символ плюс:
find . -type f -size +1M
Вы даже можете искать файлы в диапазоне размеров. Следующая команда найдет все файлы между 1
и 2MB
:
find . -type f -size +1M -size 21M
Поиск файлов по дате изменения
Команда find
также может искать файлы на основе их последней модификации, доступа или времени изменения.
Как и при поиске по размеру, используйте символы «плюс» и «минус» для «больше» или «меньше».
Допустим, несколько дней назад вы изменили один из конфигурационных файлов голубятни, но забыли какой именно. Вы можете легко отфильтровать все файлы в /etc/dovecot/conf.d
каталоге, который заканчивается .conf
и был изменен за последние пять дней:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Вот еще один пример фильтрации файлов по дате модификации с помощью -daystart
опции. Команда ниже выведет список всех файлов в /home
каталоге, которые были изменены 30
или более дней назад:
find /home -mtime +30 -daystart
Найти файлы по разрешениям
Опция -perm
позволяет искать файлы на основе прав доступа к файлам.
Например, чтобы найти все файлы с разрешениями точно 775
внутри /var/www/html
каталога, вы должны использовать:
find /var/www/html -perm 644
Перед числовым режимом можно поставить минус -
или косую черту /
.
Когда косая черта /
используется в качестве префикса, по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для сопоставления файла. Рассмотрим следующий пример команды:
find . -perm /444
Приведенная выше команда будет сопоставлять все файлы с разрешениями на чтение, установленными для пользователя, группы или других.
Если в качестве префикса используется минус -
, то для совпадения файла должны быть установлены хотя бы указанные биты. Следующая команда будет искать файлы, которые имеют права на чтение и запись для владельца и группы и доступны для чтения другим пользователям:
find . -perm -664
Поиск файлов по владельцу
Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user
и -group
.
Например, чтобы найти все файлы и каталоги, принадлежащие пользователю www-php, вы должны запустить:
find / -user www-php
Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю, www-data
и изменить владельца соответствующих файлов с www-data
на nginx
:
find / -user www-data -type f -exec chown nginx {} \;
Найти и удалить файлы
Чтобы удалить все совпадающие файлы, добавьте -delete
параметр в конец выражения соответствия.
Убедитесь, что вы используете эту опцию только тогда, когда уверены, что результат соответствует файлам, которые вы хотите удалить. Всегда полезно распечатать соответствующие файлы перед использованием этой -delete
опции.
Например, чтобы удалить все файлы, заканчивающиеся на .temp
из /var/log/
, вы должны использовать:
find /var/log/ -name `*.temp` -delete
0 комментариев