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

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

How to Find Files in Linux Using the Command Line

18 Января 2020 | Терминал

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

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

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


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


    Комментарии

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

Загрузка комментариев...