Как найти файлы с помощью команды поиска терминала в Linux

12 set 2022 4 min di lettura
Как найти файлы с помощью команды поиска терминала в Linux
Indice dei contenuti

Введение

Команда find — один из самых мощных инструментов в арсенале системного администратора Linux. Поиск файлов и папок (каталогов) в иерархии каталогов на основе выражения, заданного пользователем, и может выполнять указанные пользователем действия над каждым соответствующим файлом.

Вы можете использовать команду find для поиска файлов и каталогов на основе разрешений, типа, даты, владельца, размера и т. д. Его также можно использовать в сочетании с другими инструментами, такими как grep или sed.

Найти синтаксис команды

Общий синтаксис команды find следующий:

find [options] [path...] [expression]
  • Атрибут options управляет обработкой символических ссылок, опциями отладки и методом оптимизации.
  • Атрибут path... определяет начальный каталог или каталоги, в которых find будет искать файлы.
  • Атрибут expression состоит из параметров, шаблонов поиска и действий, разделенных операторами.

Для поиска файлов в каталоге пользователь, вызывающий команду find, должен иметь права на чтение для этого каталога.

Давайте посмотрим на следующий пример:

find -L /var/www -name "*.js"
  • Параметр -L ( options ) указывает команде find следовать символическим ссылкам.
  • /var/www ( path... ) указывает каталог, который будет искаться.
  • expression -name "*.js указывает команде find искать файлы, оканчивающиеся на .js (файлы JavaScript).

Найти файлы по имени

Поиск файлов по имени, вероятно, является наиболее распространенным применением команды find. Чтобы найти файл, используя его имя, за параметром -name следует имя файла, который вы ищете.

Например, для поиска файла с именем document.pdf в каталоге /home/noviello нужно использовать следующую команду:

find /home/noviello -type f -name document.pdf

Чтобы выполнить поиск без учета регистра, замените параметр -name на -iname:

find /home/noviello -type f -iname document.pdf

Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. д.

Поиск файлов по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .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 в текущем рабочем каталоге. Обратите внимание на знак минус перед значением размера -

find. -type f -size -1M

Если вы хотите найти файлы размером более 1MB, вам нужно использовать символ плюс +:

find. -type f -size +1M

Вы также можете искать файлы в диапазоне размеров. Следующая команда найдет все файлы размером от 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.

Например, чтобы найти все файлы и каталоги, принадлежащие пользователю noviello, выполните:

find /-user noviello

Допустим, вы хотите найти все файлы, принадлежащие пользователю 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 с особой осторожностью. Командная строка поиска оценивается как выражение, и если вы сначала добавите параметр -delete, команда удалит все ниже указанных начальных точек.

Когда дело доходит до каталогов, вы можете удалить только пустые каталоги, такие как rmdir, с помощью команды find.

Вывод

Мы показали вам, как использовать команду find с различными параметрами и критериями.

Эта статья должна дать вам общее представление о том, как найти файлы в ваших системах Linux. Вы также можете посетить справочную страницу поиска, find прочитать обо всех других мощных опциях.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.