find
— один из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие для каждого совпадающего файла.
Вы можете использовать команду find
для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и т. Д. Его также можно комбинировать с другими инструментами, такими как grep
или sed
.
find
командный синтаксис
Общий синтаксис команды 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
за которым следует имя файла, который вы ищете.
Например, чтобы найти файл с именем document.pdf
в каталоге /home/linuxize
, вы должны использовать следующую команду:
find /home/linuxize -type f -name document.pdf
Чтобы запустить поиск без -iname
регистра, измените параметр -name
на -iname
:
find /home/linuxize -type f -iname document.pdf
Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. Д.
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz
внутри .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/my_website -type d -exec chmod 0755 {} ;
find /var/www/my_website -type f -exec chmod 0644 {} ;
Найти файлы по размеру
Чтобы найти файлы по размеру файла, передайте параметр -size
вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:
b
: блоки по 512 байт (по умолчанию)c
: байтыw
: двухбайтовые словаk
: килобайтыM
: мегабайтыG
: гигабайты
Следующая команда найдет все файлы размером ровно 1024
байта внутри каталога /tmp
:
find /tmp -type f -size 1024c
Команда find
также позволяет вам искать файлы, которые больше или меньше указанного размера.
В следующем примере мы ищем все файлы 1MB
менее 1 1MB
внутри текущего рабочего каталога. Обратите внимание на минус -
символ перед значением размера:
find . -type f -size -1M
Если вы хотите искать файлы размером более 1 1MB
, вам нужно использовать символ плюс +
:
find . -type f -size +1M
Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы 2MB
от 1
до 2MB
:
find . -type f -size +1M -size 21M
Найти файлы по дате изменения
Команда find
также может искать файлы на основе их последнего изменения, доступа или времени изменения.
То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».
Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в /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
.
Например, чтобы найти все файлы и каталоги, принадлежащие пользователю linuxize
, вы должны запустить:
find / -user linuxize
Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю 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
-delete
с особой осторожностью. Команда find
оценивается как выражение, и если вы сначала добавите опцию -delete
, команда удалит все, что находится ниже указанных вами начальных точек.Когда дело доходит до каталогов, find
может удалять только пустые каталоги, как и rmdir
.
Выводы
Мы показали вам, как использовать команду find
с различными параметрами и критериями.
Эта статья должна дать вам фундаментальное представление о том, как находить файлы в ваших системах Linux. Вы также можете посетить страницу руководства find
и прочитать обо всех других мощных параметрах команды find
.
Добавить комментарий