Как найти файл через консоль linux

Поиск в Linux с помощью команды find

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <> \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

Команду find удобно использовать для автоматического удаления устаревших файлов.

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Найти файлы по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz внутри .log.gz /var/log/nginx , вы должны ввести:

Важно отметить, что вы должны либо заключить шаблон в кавычки, либо экранировать символ звездочки * обратной косой чертой чтобы он не интерпретировался оболочкой при использовании подстановочного знака.

Чтобы найти все файлы , которые не соответствуют регулярному выражению *.log.gz вы можете использовать -not вариант. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы должны использовать:

Найти файлы по типу

Иногда вам может потребоваться поиск определенных типов файлов, таких как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.

Для поиска файлов по их типу используйте параметр -type и один из следующих дескрипторов, чтобы указать тип файла:

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : блочные устройства
  • p : именованный канал (FIFO)
  • s : сокет

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

Типичным примером может быть рекурсивное изменение разрешений файлов веб-сайтов на 644 и разрешений каталогов на 755 с помощью команды chmod :

Найти файлы по размеру

Чтобы найти файлы по размеру файла, передайте параметр -size вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:

  • b : блоки по 512 байт (по умолчанию)
  • c : байты
  • w : двухбайтовые слова
  • k : килобайты
  • M : мегабайты
  • G : гигабайты

Следующая команда найдет все файлы размером ровно 1024 байта внутри каталога /tmp :

Команда find также позволяет вам искать файлы, которые больше или меньше указанного размера.

В следующем примере мы ищем все файлы 1MB менее 1 1MB внутри текущего рабочего каталога. Обратите внимание на минус — символ перед значением размера:

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

Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы 2MB от 1 до 2MB :

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

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

То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».

Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в /etc/dovecot/conf.d который заканчивается на .conf и был изменен за последние пять дней:

Вот еще один пример фильтрации файлов по дате модификации с использованием опции -daystart . Приведенная ниже команда перечислит все файлы в каталоге /home которые были изменены 30 или более дней назад:

Найти файлы по разрешениям

Параметр -perm позволяет вам искать файлы на основе прав доступа к файлам.

Например, чтобы найти все файлы с разрешениями ровно 775 внутри каталога /var/www/html , вы должны использовать:

Вы можете поставить перед числовым режимом знак минус — или косую черту / .

Когда в качестве префикса используется косая черта / , то по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для соответствия файлу.

Рассмотрим следующий пример команды:

Приведенная выше команда будет соответствовать всем файлам с разрешениями на чтение, установленными для пользователя, группы или других.

Если в качестве префикса используется минус — , то для соответствия файла необходимо установить хотя бы указанные биты. Следующая команда будет искать файлы, которые имеют права на чтение и запись для владельца и группы и доступны для чтения другим пользователям:

Найти файлы по владельцу

Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user и -group .

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

Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data и изменить владельца совпадающих файлов с www-data на nginx :

Найти и удалить файлы

Чтобы удалить все совпадающие файлы, добавьте параметр -delete в конец выражения соответствия.

Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции -delete всегда рекомендуется распечатать совпадающие файлы.

Например, чтобы удалить все файлы, заканчивающиеся на .temp из /var/log/ , вы должны использовать:

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

Выводы

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

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

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

Источник

Читайте также:  You should install linux
Оцените статью