Необходимость поиска файлов может возникнуть практически в каждой операционной системе, которая позволяет работать с файловой системой. Классическим примером для нас послужит операционная система Linux, которую мы будем использовать в консольном режиме. Давайте рассмотрим возможности поиска файлов в системе посредством консоли. Для поиска файлов в системе Linux есть команда find, которая позволяет производить довольно гибкий поиск, позволяя задавать дополнительные критерии поиска. Рассмотрим возможности данной команды подробнее.
Синтаксис команды find:
find путь –опции
В качестве пути указывается директория, в которой необходимо производить поиск. К примеру, это могут быть значения такого вида:
. – текущий каталог
/ — корневой каталог
~ — домашний каталог
После указания пути так указываются опции поиска. С виду всё запутано, но на самом деле сложностей тут нет.
Основные опции:
-name — поиск по имени, задается шаблон поиска;
-user — поиск файлов принадлежащих конкретному пользователю;
-group — поиск файлов принадлежащих конкретной группе;
-perm — поиск файлов по режиму доступа;
-type — поиск файлов по типу, список типов:
-size n — поиск файлов с размером n единиц;
-mtime -n +n — поиск файлов по дате изменения, менее (-) или более (+) дней назад.
Попробуем произвести поиск файлов, имитируя различные ситуации.
Найдем файлы на съемном устройстве, подключенном к USB, и предварительно смонтированном в системе.
Поиск файлов по расширению:
$ find /mnt/usb -name "*.mp3" -print
В результате выполнения данной команды будет произведен поиск в каталоге /mnt/usb – это каталог, в который смонтировано устройство. Поиск будет произведен по всем файлам (*), имеющим расширение .mp3.
Маску поиска можно менять довольно гибко, к примеру, можно задать ключевое слово, с которого начинается имя файла, и произвести по нему поиск.
Поиск файлов по начальному ключевому слову:
$ find ~ -name "config*" –print
В результате будет показан список найденных файлов, начинающихся с ключевого слова config.
Одна из сильных сторон команды это возможность поиска согласно регулярному выражению. Для демонстрации произведем поиск файлов, начинающихся с латинских букв от «a» до «j».
Поиск файлов по шаблону регулярного выражения:
$ find / -name "[a-j]*" –print
Согласно указанному шаблону будет произведен поиск по всех файлов в системе, начинающихся с букв от «a» до «j».
Каждый более или менее знакомый с системами Linux знает, что режимы доступа к файлам дело весьма важное. Иногда бывает нужно найти файлы, имеющие конкретные заданные права, для этих целей можно воспользоваться поиском с опцией –perm.
Поиск файлов с режимом доступа 755:
$ find . -perm 775 –print
Таким же образом можно произвести более гибкий поиск. Давайте найдем файлы по группе пользователей, для которых есть полный доступ.
Поиск файлов с правами для группы:
$ find . -perm -070 –print
Знак дефиса может быть заменен на знак плюса, это позволит произвести поиск файлов, у которых установлен хотя бы один из заданных битов разрешений, остальные биты при этом будут проигнорированы.
В следующем примере рассмотрим поиск файлов принадлежащих определенному пользователю или группе.
Поиск файлов определенного пользователя:
$ find / -user admin –print
В результате поиска будет найдены файлы принадлежащие пользователю admin.
Поиск файлов, принадлежащие определенной группе пользователей:
$ find / -group bots –print
Будут найдены файлы, которые принадлежат группе пользователей bots. Кроме этого можно производить поиск файлов, владельцами которых являются несуществующие пользователи или группы:
$ find / -nouser –print $ find / -nogroup –print
Возможность поиска определенных типов файлов так же является немаловажным функционалом. К примеру, если есть необходимость найти все символические ссылки в конкретной директории.
Поиск символических ссылок:
$ find /etc -type l –print
Поиск будет произведен в директории /etc, в которой будут отбираться все символические ссылки.
Бывает необходимо просмотреть список вложенных директорий, в каком либо каталоге, для таких задач есть следующая команда.
Просмотр вложенных директорий в каталоге:
$ find /mnt/usb -type d –print
На экран будет показан список директорий присутствующих в каталоге /mnt/usb. Теперь перейдем к следующей опции, это возможность поиска файлов установленного размера.
Поиск файлов по размеру:
$ find . -size 2000k –print
Будет произведен поиск файлов размером 2000 килобайт, размеры можно указывать и в мегабайтах, для этого вместо буковки «k» следует указать букву «M».
В качестве следующего примера мы будем использовать возможность поиска файлов по времени его модификации. Для этих целей мы воспользуемся опцией –mtime.
Поиск файлов, измененных за последние 2 дня:
$ find /var/www/html -mtime +2 –print
Поиск будет производиться в директории /var/www/html, и будут искаться файлы которые изменялись в течении последних 2-х дней. Пожалуй, одна из немаловажных и удобных опций поиска. Так же можно производить поиск по дате модификации с обратным условием. Давайте попробует найти файлы в директории, которые не изменялись в течении 5-ти дней.
Поиск файлов, не изменявшихся в течении 5-ти дней:
$ find /var/www/html -5 –print
На этом пока всё, надеюсь, данные примеры вам помогли разобраться с данной командой. Её удобство представлено наглядно, и знать о её возможностях не будет лишним, особенно если вы собираетесь в дальнейшем работать с системой Linux. Навыки грамотного поиска файлов значительно экономит ваше личное время, а как известно время бесценно. Успехов в труде!