При работе с Linux одной из распространенных проблем является поиск определенных файлов. В этом руководстве мы рассмотрим, как использовать команды find команду . для поиска файлов на основе различных фильтров и параметров. Мы также кратко рассмотрим locate команда, которая предоставляет альтернативный способ поиска файлов.
Предварительные условия
Для того чтобы приступить к изучению этого руководства, вам необходимо иметь компьютер, работающий под управлением операционной системы на базе Linux. Это может быть как локальная машина, так и виртуальный частный сервер, доступный через SSH. Хотя демонстрации в этом руководстве были проверены на Ubuntu 20.04, они должны работать на любом дистрибутиве Linux.
Поиск по имени файла
Наиболее часто используемый метод поиска файлов — по их имени. Чтобы найти файл по имени, используйте find , вы можете использовать следующий синтаксис:
$ find / -name "query"
По умолчанию этот поиск чувствителен к регистру. Если вы хотите выполнить поиск без учета регистра, можно воспользоваться командой -iname опцию:
$ find / -iname "query"
Если вы хотите найти все файлы, которые не соответствуют определенному шаблону, вы можете использовать опцию -not опцию:
$ find / -not -name "query_to_avoid"
В качестве альтернативы можно использовать восклицательный знак (!), чтобы инвертировать поиск:
$ find / \! -name "query_to_avoid"
При использовании восклицательного знака не забывайте экранировать его с помощью обратного слеша (\), чтобы оболочка не смогла его интерпретировать.
Поиск по типу файла
Другой способ поиска файлов — по их типу с помощью функции -type параметр. Вот некоторые дескрипторы типов, которые вы можете использовать:
f: обычный файлd: каталогl: символическая ссылкаc: символьные устройстваb: блочные устройства
Например, если вы хотите найти все символьные устройства в вашей системе, выполните следующую команду:
$ find /dev -type c
Для поиска файлов с определенным расширением (например, .conf), воспользуйтесь командой -name вместе с опцией *.extension шаблон:
$ find /usr -type f -name "*.conf"
Вы можете комбинировать несколько поисковых выражений с помощью -and оператор (подразумевается, если не указана опция) или оператор -or оператор:
$ find -name query_1 -or -name query_2
Фильтрация по размеру и времени
The find Команда предлагает различные опции для фильтрации файлов по их размеру и времени.
Размер
Чтобы отфильтровать файлы по размеру, воспользуйтесь параметром -size параметр, за которым следует значение размера и суффикс, указывающий на единицу измерения. Обычные суффиксы размера включают:
c: байтk: килобайтыM: мегабайтG: гигабайтыb: 512-байтные блоки
Например, чтобы найти файлы, размер которых составляет ровно 50 байт:
$ find /usr -size 50c
Чтобы найти файлы, размер которых меньше 50 байт:
$ find /usr -size -50c
Время
Чтобы отфильтровать файлы по времени их модификации, можно воспользоваться командой -mtime, -atime, и -ctime параметры.
-mtimeпоиск на основе времени модификации файла.-atimeпоиск на основе времени доступа к файлу.-ctimeпоиск на основе времени изменения файла.
Время можно указать в разных форматах:
n: точное количество 24-часовых периодов назад.+n: более n 24-часовых периодов назад.-n: менее n 24-часовых периодов назад.
Например, чтобы найти файлы, измененные в течение последних 7 дней:
$ find /usr -mtime -7
Чтобы найти файлы, доступ к которым был получен более 30 дней назад:
$ find /usr -atime +30
Чтобы найти файлы, метаданные которых (например, разрешения) изменились за последние 24 часа:
$ find /usr -ctime 0
Поиск по владельцу и разрешениям
The find Команда также позволяет искать файлы на основе их владельца и разрешений.
Владелец
Чтобы найти файлы, принадлежащие определенному пользователю, вы можете использовать функцию -user , за которым следует имя пользователя. Например, для поиска файлов, принадлежащих пользователю «john»:
$ find / -user john
Разрешения
Вы можете искать файлы на основе их разрешений с помощью функции -perm параметр. Этот параметр принимает числовой режим или символические обозначения, представляющие желаемые разрешения.
Для поиска файлов с определенными разрешениями, выраженными в числовом режиме, используйте трехзначное восьмеричное число. Например, для поиска файлов с правами чтения, записи и выполнения для владельца и правами чтения для остальных:
$ find / -perm 744
Для поиска файлов с определенными разрешениями, выраженными в символьной нотации, используйте комбинацию u (пользователь), g (группа), o (другие), r (читать), w (запись) и x (выполнить). Например, для поиска файлов с правами на чтение и запись для владельца:
$ find / -perm u=rw
Можно также комбинировать несколько разрешений и указывать различные уровни владения в символической нотации. Например, для поиска файлов с разрешениями на чтение и выполнение для владельца, на запись для группы и на чтение для остальных:
$ find / -perm u=rx,g=w,o=r
Используя символ -user и -perm опции, вы можете эффективно искать файлы на основе их владельца и разрешений.
Выполнение команд на find Результаты
The find Команда не только помогает находить файлы, но и позволяет выполнять действия с результатами поиска. Вы можете выполнять различные команды над файлами, найденными с помощью find с помощью -exec вариант.
Основной синтаксис для выполнения команд на find результатах, выглядит следующим образом:
$ find /path/to/search -name "query" -exec command {} \;
В этом синтаксисе:
/path/to/searchэто каталог, в котором вы хотите искать файлы."query"это поисковый запрос или шаблон для сопоставления имен файлов.commandэто команда, которую нужно выполнить для каждого найденного файла.{}представляет собой заполнитель для найденного файла.\;используется для завершения-execопции.
Например, чтобы удалить все файлы с параметром .log в /var/log вы можете использовать следующую команду:
$ find /var/log -name "*.log" -exec rm {} \;
Эта команда выполнит файл rm для каждого файла, найденного командой find, удаляя все файлы с .log расширением.
Можно также комбинировать несколько команд или передавать команде дополнительные аргументы. Только убедитесь, что все специальные символы правильно экранированы.
Использование -exec с опцией find обеспечивает гибкость в выполнении действий над результатами поиска, что делает его мощным инструментом для управления файлами и автоматизации.
Использование locate Команда
The locate Команда обеспечивает более быстрый поиск файлов в системе за счет использования предварительно созданной базы данных, называемой базой данных locate. База данных регулярно обновляется, поэтому в ней могут отсутствовать недавно созданные или измененные файлы.
Инициализация базы данных:
Перед использованием locate , необходимо убедиться, что база данных обновлена. Выполните следующую команду от имени root или с правами sudo:
$ sudo updatedb
Эта команда обновляет базу данных, используемую locate для индексации файловой системы.
Поиск файлов:
Чтобы найти файлы с помощью locate, просто укажите ключевое слово или шаблон для поиска. Например:
$ locate file.txt
Эта команда найдет все файлы с именем «file.txt».
Чувствительность к регистру:
По умолчанию locate команда не зависит от регистра. Если вы хотите выполнить поиск с учетом регистра, используйте команду -i опцию. Например:
$ locate -i File.txt
Эта команда найдет файлы с именем «File.txt» или «file.txt».
Обновление базы данных:
База данных файлов, используемая locate может быть не всегда актуальной. Чтобы убедиться, что вы имеете самую свежую информацию о файлах, периодически обновляйте базу данных с помощью команды updatedb команду.
Заключение
Поиск файлов в Linux может быть выполнен с помощью функции find и locate команды. Команда find обеспечивает большую гибкость и позволяет выполнять тонкий поиск по различным критериям, таким как имя файла, тип, размер и время. С другой стороны, команда locate обеспечивает более быстрый поиск по заранее созданной базе данных.
Освоив эти команды, вы сможете эффективно находить файлы в системе Linux и оптимизировать свой рабочий процесс.