Найти команду в Linux (поиск файлов и каталогов)

Команда 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 .

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Оставьте комментарий