Поиск файлов в Linux или Изучаем команду find

Автор: . Дата статьи: 26.03.2010 г.

Несомненно, при работе с Linux, иногда возникает необходимость поиска файлов с определенными характеристиками. Этими характеристиками могут быть размер или тип файла, права доступа и другое.


Наличие в Linux команды find, во многом помогает справиться с поиском файлов по различным критериям.


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




Формат команды find:


find путь -опции


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


.    - поиск в текущем каталоге;


/   - поиск от корневого каталога;


~  - поиск в домашнем каталоге.


Что до опций, то тут гораздо бОльший список, с которым крайне необходимо внимательно ознакомиться (это в будущем очень поможет!). Итак, основные опции команды find:


-name         -  поиск файлов по имени, используя приведенный шаблон;


-user           -  поиск файлов, принадлежащих указанному пользователю;


-group        -  поиск файлов, принадлежащих указанной группе;


-perm         -  поиск файлов с указанным режимом доступа;


-type          -  поиск файлов определенного типа. Типов тоже достаточно:




  • b  - специальный блочный файл;

  • d  - каталог;

  • c  - специальный символьный файл;

  • f   - обычный файл;

  • l   - символическая ссылка;

  • p  - именованный канал;

  • s  - сокет.


-size  n       -  поиск файлов с размером n единиц;

-mtime  -n n   - поиск файлов, содержание которых изменялось менее чем (-) или более чем ( ) дней назад.


Рассмотрим некоторые примеры применения команды find:


Наиболее часто применяемой опцией является опция -name, которая производит поиск файлов по имени.


Примеры с опцией -name:


 $ find /mnt/usb -name  "*.mp3" -print


произведет поиск всех файлов (об этом свидетельствует знак *), имеющих расширение .mp3 на USB-устройстве, смонтированном в каталог /mnt/usb.


команда


$ find ~ -name "test*" -print


выведет на экран список файлов домашнего каталога, начинающихся на test.


Если вам надо найти файлы, начинающиеся с определенных букв (к примеру, от a до j),  то здесь будет удобно применить регулярные выражения, которые крайне удобны в работе:


$ find  / -name "[a-j]*" -print


Вышеуказанная команда позволит отыскать все файлы в системе, начинающиеся с букв от a до j.


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


Если потребуется найти файлы, имеющие определенные режимы доступа, вам поможет опция -perm, которая легко в этом поможет.


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


$ find .  -perm 775 -print


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


К примеру, найдем файлы,  к которым пользователи группы имеют полный доступ:


$ find . -perm -070 -print


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


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


Поиск файлов какого-либо определенного пользователя крайне прост в своей реализации. Для этого достаточно выполнить команду:


$ find / -user admin -print


Вышеуказанная команда произведет поиск файлов в системе, принадлежащих пользователю admin.


Для того, чтобы найти файлы, принадлежащие определенной группе (к примеру managers), выполним команду:


$ find / -group managers -print


Для поиска файлов несуществующих пользователей или групп можно воспользоваться опциями -nouser  и -nogroup:


$ find / -nouser -print


и


$ find / -nogroup -print


Поиск файлов определенного типа


Одной из удобных возможностей команды find, является возможность поиска файлов определенного типа. Рассмотрим варианты использования опции -type:


Поиск символических ссылок в каталоге /etc:


$ find /etc -type l -print


Вывод на экран списка каталогов, присутствующих в каталоге /mnt/raid


$ find /mnt/raid -type d -print


Поиск файлов определенного размера


Опция -size позволяет произвести поиск файлов определенного размера и имеет следующий вид при выполнении:


$ find . -size 2000k -print


Вышеуказанная команда отыщет и отобразит на экране файлы размером 2 мегабайта, находящийся в текущем каталоге. Если, к примеру,  необходимо найти файлы размером менее 500 килобайт, то вид команды будет следующий:


$ find . -size -500k -print


Если нужно найти файлы размером более 600 мегабайт, то применим команду:


$ find / -size 600M -print


Поиск файлов с использованием опции -mtime


Опция -mtime позволит вам найти файлы, изменявшиеся в какой-то срок времени.


К примеру, у нас встала задача поиска файлов, находящихся в каталоге /mnt/raid/upload , и изменявшихся за последние 5 дней. В этом нам поможет команда:


$ find /mnt/raid/upload -mtime -5 -print


Если нам необходимо обратное, к примеру, отыскать файлы, которые не изменялись неделю, применим команду:


$ find /mnt/raid/upload  -7 -print


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


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




IT-поддержка

Оказываем квалифицированную помощь в поддержке Вашей IT-инфраструктуры

Подробнее