При работе с 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 и оптимизировать свой рабочий процесс.