Как найти файлы в Linux с помощью командной строки
Как найти файлы в Linux с помощью командной строки
How to Find Files in Linux Using the Command Line
Вы можете использовать find команду для поиска файлов и каталогов на основе их прав доступа, типа, даты, владельца, размера и т. Д. Его также можно использовать в сочетании с другими инструментами, такими как grep или sed.

Команда find
является одним из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять заданные пользователем действия для каждого соответствующего файла.
Синтаксис команды find Linux
Общий синтаксис find
команды выглядит следующим образом:
find [options] [path...] [expression]
- В
options
контроле атрибутов Обработка символических ссылок, параметры отладки и метод оптимизации. path...
Атрибут определяет начальный каталог или каталоги , где найти будет искать файлы.expression
Атрибут состоит из опций, шаблонов поиска, а также действия , разделенные операторами.
Для поиска файлов в каталоге пользователь, вызывающий find
команду, должен иметь разрешения на чтение для этого каталога.
Давайте посмотрим на следующий пример:
find -L /var/www -name "*.js"
- Опция
-L
(options) указываетfind
команде следовать символическим ссылкам. /var/www
(путь ...) определяет каталог , который будет производиться поиск.- Выражение)
-name "*.js
сообщаетfind
поисковым файлам, заканчивающимся.js
(JavaScript-файлы).
Найти файлы по имени
Поиск файлов по имени, вероятно, является наиболее распространенным использованием find
команды. Чтобы найти файл по имени, используйте -name
опцию после имени файла, который вы ищете.
Например, для поиска файла с именем document.pdf
в /home/baks
каталоге вы должны использовать следующую команду:
find /home/baks -type f -name document.pdf
Чтобы запустить поиск без учета регистра, измените -name
параметр с помощью -iname
:
find /home/baks -type f -iname document.pdf
Команда выше будет соответствовать «Document.pdf», «DOCUMENT.pdf» ..etc.
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся .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
: FIFOs
: разъем
Например, чтобы найти все каталоги в текущем рабочем каталоге , вы должны использовать:
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
.
Например, для поиска всех файлов и каталогов, принадлежащих пользователю baks
, вы должны выполнить:
find / -user baks
Вот пример из реальной жизни. Допустим, вы хотите найти все файлы , принадлежащие пользователю 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
команды.