Как найти файлы и папки в 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 (параметры) указывает команде find следовать символическим ссылкам.
  • Путь /var/www (путь...) указывает каталог, который будет искаться.
  • Выражение -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 также позволяет искать файлы большего или меньшего размера, чем указанный размер.

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

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

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

Вывод

Мы показали вам, как использовать команду 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.