Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

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

Сегодня мы поговорим об использовании команды find — поверьте, стоит научиться работать с этим мощным и удобным инструментом.

Как использовать команду find

Если говорить упрощённо, базовый синтаксис команды find выглядит следующим образом:

Find /путь параметры имя_файла

Давайте разбираться с возможностями команды

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

Первый параметр — это путь. Если вы понятия не имеете, где может скрываться файл, ставьте вместо пути / — этого достаточно. Однако, поиск по всему диску может быть достаточно длительным, и если вы знаете, где может находиться файл, укажите папку, с которой надо начинать искать (например ~ для поиска в домашней папке пользователя).

Теперь перейдём к параметрам поиска. Есть два варианта поиска файла по имени:

  • name — поиск с учетом регистра имени файла
  • iname — поиск без учета регистра имени файла

Нужно помнить, что в Linux регистр имени файла имеет значение, и если нужно найти, например, файл Ubuntu.txt, то следующая команда не даст никаких результатов:

Find / -name ubuntu.txt

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

Find / -iname ubuntu.txt

Поиск по типу

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

  • f — обычный файл
  • d — директория
  • l — символическая ссылка
  • c — символьное устройство
  • b — блочное устройство

Например, для поиска всех директорий внутри домашней директории текущего пользователя, названиt которых начинается с «config», выполните следующую команду:

Find ~ -type d -name config*

Вывод результатов поиска в файл

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

Find /etc -type f -name “*.conf” > conf_search

Поиск файлов по размеру

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

Find / -size +1000M

Можно использовать следующие сокращения размеров:

  • c — байты
  • k — килобайты
  • M — мегабайты
  • G — гигабайты
  • b — блоки по 512 байт

Это всего несколько способов применения мощной команды. Больше способов можно найти в руководстве, выполнив команду

Эта статья — выдержка из книги «Linux&Unix — программирование в Shell» , Девида Тенсли.

Правки вносил немного в спешке, если замечены опечатки — пишите в комментарии.

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

В этой главе рассматриваются следующие темы, связанные с применением команды find :

Параметры команды find ;

Примеры использования различных опций команды find ;

Примеры совместного использования команд xargs и find .

Возможности команды find обширны, велик и список предлагаемых опций. В настоящей главе описаны наиболее важные из них. Команда find может проводить поиск даже на дисках NFS (Network File System - сетевая файловая система), конечно, при наличии соответствующих разрешений. В подобных случаях команда обычно выполняется в фоновом режиме, поскольку просмотр дерева каталога требует значительных затрат времени. Общий формат команды find таков:

find путевое_имя -опции

где путевое_имя - это каталог, с которого необходимо начинать поиск. Символ ‘.’ служит для обозначения текущего каталога, символ / - корневого каталога, а символ «~» - записанного в переменной $HOME начального каталога текущего пользователя.

2.1. Опции команды find

Остановимся на описании основных опций команды find .

Name Поиск файлов, имена которых соответствуют заданному шаблону

Print Запись полных имен найденных файлов в стандартный поток вывода

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

Prune Применяется для того, чтобы команда find не выполняла рекурсивный поиск по уже найденному путевому имени; если указана опция -depth , опция -prune игнорируется

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

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

Mtime -n +n Поиск файлов, содержимое которых модифицировалось менее чем (-) или более чем (+) n дней назад; имеются также опции -atime и -ctime , которые позволяют осуществлять поиск файлов соответственно по дате последнего чтения и дате последнего изменения атрибутов файла

Nogroup Поиск файлов, принадлежащих несуществующей группе, для которой, иначе говоря, отсутствует запись в файле /etc/groups

Nouser Поиск файлов, принадлежащих несуществующему пользователю, для которого, другими словами, отсутствует запись в файле /etc/passwd

Newer файл Поиск файлов, которые созданы позднее, чем указанный файл

Type Поиск файлов определенного типа, а именно: b - специальный блочный файл; d - каталог; с - специальный символьный файл; p - именованный канал; l - символическая ссылка; s - сокет; f - обычный файл

Size n Поиск файлов, размер которых составляет n единиц; возможны следующие единицы измерения: b - блок размером 512 байт (установка по умолчанию); с - байт; k - килобайт (1024 байта); w - двухбайтовое слово

Depth При поиске файлов сначала просматривается содержимое текущего каталога и лишь затем проверяется запись, соответствующая самому каталогу

F stype Поиск файлов, которые находятся в файловой системе определенного типа; обычно соответствующие сведения хранятся в файле /etc/fstab , который содержит данные о файловых системах, используемых на локальном компьютере

Mount Поиск файлов только в текущей файловой системе; аналогом этой опции является опция -xdev -exec Выполнение команды интерпретатора shell для всех обнаруженных файлов; выполняемые команды имеют формат команда { } ;

(обратите внимание на наличие пробела между символами {} и 😉

Ок Аналогична опции -exec , но перед выполнением команды отображается запрос

2.1.1. Опция -name

При работе с командой find чаще всего используется опция -name . После нее в кавычках должен быть указан шаблон имени файла.
Если необходимо найти все файлы с расширением.txt в вашем начальном каталоге, укажите символ в качестве путевого имени. Имя начального каталога будет извлечено из переменной $HOME .

$ find ~ -name «*.txt» -print

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

$ find . -name «*.txt» -print

Для нахождения в текущем каталоге всех файлов, в именах которых встречается хотя бы один символ в верхнем регистре, введите следующую команду:

$ find . -name «*» -print

Найти в каталоге /etc файлы, имена которых начинаются с символов «host «, позволяет команда

$ find /etc -name «hoat*» -print

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

$ find ~ -name «*.txt» -print -о -name «.*» -print

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

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

$ find / -name «*» -print

Ниже показано, как найти все файлы, в именах которых сначала следуют символы нижнего регистра, а за ними - две цифры и расширение .txt (например, ах37.xt ):

$ find . -name » [а-х] [а-х] . txt» -print

2.1.2. Опция -perm

Опция -perm позволяет находить файлы с заданным режимом доступа. Например, для поиска файлов с режимом доступа 755 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой:

$ find . -perm 755 -print

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

$ find . -perm -007 -print

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

2.1.3. Опция -prune

Когда вы не хотите вести поиск в том или ином каталоге, воспользуйтесь опцией -prune . Она служит указанием остановить поиск на текущем путевом имени. Если путевое имя указывает на каталог, команда find не будет заходить в него. При наличии опции -depth опция -prune игнорируется.

Следующая команда проводит поиск в текущем каталоге, не заходя в подкаталог /bin:

$ find . -name «bin» -prune -о -print

2.1.4. Опции -user и —nouser

Чтобы найти файлы, принадлежащие определенному пользователю, укажите в команде find опцию -user , а также имя пользователя. Например, поиск в начальном каталоге файлов, принадлежащих пользователю dave , осуществляется посредством такой команды:

$ find ~ -user dave -print

Поиск в каталоге /etc файлов, принадлежащих пользователю uucp , выполняет следующая команда:

$ find /etc -uaer uucp -print

Благодаря опции -nouser возможен поиск файлов, принадлежащих несуществующим пользователям. При ее использовании производится поиск файлов, для владельцев которых нет записи в файле /etc/passwd . Конкретное имя пользователя указывать не нужно: команда find выполняет всю необходимую работу сама. Чтобы найти все файлы, которые принадлежат несуществующим пользователям и находятся в каталоге /home , задайте вот такую команду:

$ find /home -nouaer -print

2.1.5. Опции -group и -nogroup

Опции -group и -nogroup аналогичны опциям -user-nouser/apps всех файлов, которыми владеют пользователи группы accts :

$ find /арра -group accta -print

Следующая команда ищет во всей системе файлы, принадлежащие несуществующим группам:

$ find / -nogroup -print

2.1.6. Опция -mtime

Опцию -mtime следует применять при поиске файлов, доступ к которым осуществлялся х дней назад. Если аргумент опции снабдить знаком ‘-‘, будут отобраны файлы, к которым не было доступа в течение х дней. Аргумент со знаком ‘+’ приводит к противоположному результату - производится отбор файлов, доступ к которым осуществлялся на протяжении последних х дней.

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

$ find / -mtime -5 -print

Ниже приведена команда, выполняющая поиск в каталоге /var/adm файлов, которые обновлялись в течение последних трех дней:

$ find /var/adm -mtime +3 -print

2.1.7. Опция -newer

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

Newer старый_файл ! -newer новый_файл

Знак ‘! ‘ является оператором логического отрицания. Он означает: найти файлы, которые новее, чем старый_файл , но старее, чем новый_файл .

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

Rwxr-xr-x 1 root root 92 Apr 18 11:18 age.awk
-rwxrwxr-x 1 root root 1054 Apr 20 19:37 belts.awk

Для нахождения всех файлов, которые обновлялись позже, чем age.awk , но раньше, чем belts.awk , выполните следующую команду (применение опции -exec описано чуть ниже):

$ find . -newer age.awk ! -newer belts.awk -exec Is -1 {} ;
-rwxrwxr-x 1 root root 62 Apr 18 11:32 ./who.awk
-rwxrwxr-x 1 root root 49 Apr 18 12:05 ./group.awk
-rw-r-r- 1 root root 201 Apr 20 19:30 ./grade2.txt
-rwxrwxr-x 1 root root 1054 Apr 20 19:37 ./belts.awk

Но как быть, если необходимо найти файлы, созданные, скажем, в течение последних двух часов, а у вас нет файла, сформированного ровно два часа назад, с которым можно было бы сравнивать? Создайте такой файл! Для этой цели предназначена команда touch -t , которая создает файл с заданной временной меткой в формате ММДЦччмм (месяц-день-часы-минуты). Например:

$ touch -t 05042140 dstamp
$ ls -1 dstamp
-rw-r-r- 1 dave admin 0 May 4 21:40 dstamp

В результате будет получен файл, дата создания которого - 4 мая, время создания -21:40 (предполагается, что текущее время - 23:40). Теперь можно применить команду find с опцией -newer для нахождения всех файлов, которые обновлялись в течение последних двух часов:

$ find . -newer datamp -print

2.1.8. Опция -type

Операционные системы UNIX и Linux поддерживают различные типы файлов. Поиск файлов нужного типа осуществляется посредством команды, find с опцией -type . Например, для нахождения всех подкаталогов в каталоге /etc воспользуйтесь такой командой:

$ find /etc -type d -print

Чтобы получить список всех файлов, но не каталогов, выполните следующую команду:

$ find . ! -type d -print

Ниже приведена команда, которая предназначена для поиска всех символических ссылок в каталоге /etc .

$ find /etc -type 1 -print

2.1.9. Опция -size

В процессе поиска размер файла указывается с помощью опции -size N , где N - размер файла в блоках по 512 байтов. Возможные аргументы имеют следующие значения: +N - поиск файлов, размер которых больше заданного, -N - меньше заданного, N - равен заданному. Если в аргументе дополнительно указан символ с , то размер считается заданным в байтах, а не в блоках, а если символ k - в килобайтах. Для поиска файлов, размер которых превышает 1 Мб, предназначена команда

$ find . -aize -flOOOk -print

Следующая команда выполняет поиск в каталоге /home/apache файлов, размер которых в точности равен 100 байтам:

$ find /home/apache -sixe 100с -print

Произвести поиск файлов, размер которых превышает 10 блоков (5120 байтов), позволяет приведенная ниже команда:

$ find . -size +10 -print

2.1.10. Опция Опция -depth

Опция -depth позволяет организовать поиск таким образом, что сначала проверяются все файлы текущего каталога (и рекурсивно все его подкаталоги) и только в конце - запись самого каталога. Эта опция широко применяется при создании списка файлов, помещаемых в архив на магнитной ленте с помощью команды cpio или tar , так как в этом случае сначала записывается на ленту образ каталога и лишь после этого задаются права доступа к нему. Это позволяет пользователю архивировать те каталоги, для которых у него нет разрешения на запись.
Следующая команда выводит список всех файлов и подкаталогов текущего каталога:

$ find . -name «*» -print -о -name «.*» -print -depth

Вот как могут выглядеть результаты ее работы:

./.Xdefaults ./.bash_logout ./.bash_profile ./.bashrc ./.bash_nistory ./file ./Dir/filel ./Dir/file2 ./Dir/file3 ./Dir/Subdir/file4 ./Dir/Subdir ./Dir

2.1.11. Опция -mount

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

$ find / -name «*.ХС» -mount -print

2.1.12. Поиск файлов с последующей архивацией командой cpio

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

Вот как выполняется запись на магнитную ленту содержимого каталогов /etc , /home и /apps :

$ cd /
$ find etc home appa -depth -print | cpio -ov > dev/rmtO

Опция команды cpio задает режим записи файлов на ленту. Опция -v (verbose - словесный режим) является указанием команде cpio сообщать о каждом обрабатываемом файле.

Обратите внимание на то, что в именах каталогов отсутствует начальный символ ‘/’. Таким образом задаются относительные путевые имена архивируемых каталогов, что при последующем чтении файлов из архива позволит воссоздавать их в любой части операционной системы, а не только в корневом каталоге.

2.1.13. Опции -exec и -ok

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

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

$ find . -type f -exec Xa -1 (} ;
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/C80
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Normal
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Rewid

Здесь выполняется поиск обычных файлов, список которых отображается на экране с помощью команды ls -1.

Чтобы найти файлы, которые не обновлялись в каталоге /logs в течение последних пяти дней, и удалить их, выполните следующую команду:

$ find /log» -type f -mtime +5 -exec rm {} ;

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

$ find . -name «*.LOG» -mtime +5 -ok rm (} ;
< rm … ./nets.LOG > ? у

Для удаления файла введите у , а для предотвращения этого действия - n .

2.1.14. Дополнительные примеры использования команды find

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

$ find ~ -print

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

$ find . -type f -perm +4000 -print

Чтобы получить список пустых файлов, воспользуйтесь такой командой:

$ find / -type f -size 0 -exec Is -1 {} ;

В одной из моих систем каждый день создается системный журнал аудита. К имени журнального файла добавляется номер, что позволяет сразу определить, какой файл создан позже, а какой - раньше. Например, версии файла admin.log нумеруются последовательно: admin.log.001, admin.log.002 и т.д. Ниже приведена команда find , которая удаляет все файлы admin.log , созданные более семи дней назад:

$ find /logs -name ‘admin.log.1 -atima +7 exec rm {} ;

2.2. Команда xargs

При наличии опции -exec команда find передает указанной команде все найденные файлы, которые обрабатываются за один раз. К сожалению, в некоторых системах длина командной строки ограниченна, поэтому при обработке большого числа файлов может быть выдано сообщение об ошибке, которое обычно гласит: «Too many arguments» (слишком много аргументов) или «Arguments too long» (слишком большой список аргументов). В этой ситуации на помощь приходит команда xargs . файлы, полученные от команды find , она обрабатывает порциями, а не все сразу.

Рассмотрим пример, в котором команда find возвращает список всех файлов, имеющихся в системе, а команда xargs выполняет для них команду file , проверяющую тип каждого файла:

$ find / -type f -print I xarge.file
/etc/protocols: English text /etc/securetty: ASCII text

Ниже приведен пример, демонстрирующий поиск файлов дампа, имена которых команда echo помещает в файл /tmp/core.log .

$ find / -name core -print | xarge echo > /tmp/core.log

В следующем примере в каталоге /apps/audit выполняется поиск всех файлов, к которым другие пользователи имеют полный доступ. Команда chmod удаляет для них разрешение на запись:

$ find /appe/audit -perm -7 -print | xarge chmod o-w

Завершает наш перечень пример, в котором команда grep ищет файлы, содержащие слово «device «:

$ find / -type f -print | xarge grep «device»

2.3. Заключение

Команда find представляет собой прекрасный инструмент поиска различных файлов по самым разнообразным критериям. Благодаря опции -exec , а также команде xargs найденные файлы могут быть обработаны практически любой системной командой.

Во время работы в любой операционной системе иногда возникает потребность в использовании инструментов для быстрого поиска того или иного файла. Актуально это и для Linux, поэтому ниже будут рассмотрены все возможные способы поиска файлов в этой ОС. Представлены будут как инструменты файлового менеджера, так и команды, используемые в «Терминале» .

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

find путь опция

где путь - это директория, в которой будет происходить поиск. Есть три основных варианта указания пути:

  • / — поиск по корневой и прилегающим к ней директориям;
  • ~ — поиск по домашней директории;
  • ./ — поиск в директории, в которой пользователь находится в настоящий момент.

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

Опций у find очень много, и именно благодаря им можно осуществить гибкую настройку поиска, задав необходимые переменные:

  • -name - проводить поиск, беря за основу имя искомого элемента;
  • -user - искать файлы, которые относятся к определенному пользователю;
  • -group - проводить поиск по определенной группе пользователей;
  • -perm - показывать файлы с указанным режимом доступа;
  • -size n - искать, беря за основу размер объекта;
  • -mtime +n -n - проводить поиск файлов, которые изменялись более (+n ) или менее (-n ) дней назад;
  • -type - искать файлы определенного типа.

Типов искомых элементов тоже много. Вот их список:

  • b - блочный;
  • f - обычный;
  • p - именованный канал;
  • d - каталог;
  • l - ссылка;
  • s - сокет;
  • c - символьный.

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

Способ 1: Поиск по имени (опция -name)

Чаще всего пользователи для осуществления поиска по системе используют опцию -name , так что именно с нее и начнем. Разберем несколько примеров.

Поиск по расширению

Допустим, вам нужно найти в системе файл с расширением «.xlsx» , который находится в директории «Dropbox» . Для этого необходимо использовать следующую команду:

find /home/user/Dropbox -name "*.xlsx" -print

Из ее синтаксиса можно сказать, что поиск проводится в директории «Dropbox» («/home/user/Dropbox» ), а искомый объект должен быть с расширением «.xlsx» . Звездочка свидетельствует о том, что поиск будет проведен по всем файлам этого расширения, не беря во внимание их название. «-print» указывает на то, что результаты поиска будут выведены на экран.

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

Например, вы хотите отыскать в директории «/home» файл с названием «lumpics» , но расширение его неизвестно. В таком случае нужно выполнить следующее:

find ~ -name "lumpics*" -print

Как можно заметить, здесь используется символ «~» , который означает, что поиск будет проходить в домашней директории. После опции «-name» указано имя искомого файла («lumpics*» ). Звездочка в конце означает что поиск будет проходить только по имени, не учитывая расширение.

Поиск по первой букве в имени

Если вы помните только первую букву, с которой начинается название файла, то существует специальный синтаксис команды, который вам поможет его отыскать. Например, вы хотите найти файл, который начинается с буквы от «g» до «l» , и вы не знаете в каком каталоге он находится. Тогда вам необходимо выполнить следующую команду:

find / -name "*" -print

Судя по символу «/», что идет сразу после основной команды, поиск будет проведен, начиная с корневого каталога, то есть во всей системе. Далее, часть «*» означает, что искомое слово будет начинаться с определенной буквы. В нашем случае от «g» до «l» .

К слову, если вы знаете расширение файла, то после символа «*» можете его указать. Например, вам надо найти тот же файл, но вы знаете, что он имеет расширение «.odt» . Тогда можно использовать такую команду:

find / -name "*.odt" -print

Способ 2: Поиск по режиму доступа (опция -perm)

Иногда необходимо найти объект, имя которого вы не знаете, но знаете каким режимом доступа он обладает. Тогда вам нужно применять опцию «-perm» .

Пользоваться ей довольно просто, нужно всего лишь указать место поиска и режим доступа. Вот пример такой команды:

find ~ -perm 775 -print

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

Способ 3: Поиск по пользователю или группе (опции -user и -group)

В любой операционной системе есть пользователи и группы. Если вы хотите найти объект, принадлежащий одной из этих категорий, то для этого можете использовать опцию «-user» или «-group» , соответственно.

Поиск файла по имени его пользователя

Например, вам нужно найти в директории «Dropbox» файл «Lampics» , но вы не знаете как он называется, а знаете только что он принадлежит пользователю «user» . Тогда вам нужно выполнить следующую команду:

find /home/user/Dropbox -user user -print

В данной команде вы указали необходимую директорию (/home/user/Dropbox ), указали что нужно искать файл, принадлежащий пользователю (-user ), и указали, какому именно пользователю этот файл принадлежит (user ).

Поиск файла по названию его группы

Выполнить поиск файла, который принадлежит определенной группе, точно так же просто - вам нужно всего-навсего заменить опцию «-user» на опцию «-group» и указать название этой группы:

find / -groupe guest -print

То есть вы указали, что хотите отыскать в системе файл, относящийся к группе «guest» . Поиск будет происходить по всей системе, об этом свидетельствует символ «/» .

Способ 4: Поиск файла по его типу (опция -type)

Найти какой-то элемент в Linux определенного типа довольно просто, вам нужно всего лишь указать соответствующую опцию (-type ) и обозначить тип. В начале статьи были перечислены все обозначения типов, которые можно применять для поиска.

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

find ~ -type b -print

Соответственно, вы указали что проводите поиск по типу файла, о чем свидетельствует опция «-type» , а далее определили его тип, поставив символ блочного файла — «b» .

Точно так же вы можете вывести на экран все каталоги в нужной директории, вписав в команду символ «d» :

find /home/user -type d -print

Способ 5: Поиск файла по размеру (опция -size)

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

find /home/user/Dropbox -size 120M -print

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

find / -size 120M -print

Если вы знаете размер файла приблизительно, то и на этот случай есть специальная команда. Вам нужно прописать в «Терминале» то же самое, только перед указанием размера файла поставить знак «-» (если нужно найти файлы меньше указанного размера) или «+» (если размер искомого файла будет больше указанного). Вот пример такой команды:

find /home/user/Dropbox +100M -print

Способ 6: Поиск файла по дате изменения (опция -mtime)

Бывают случаи, когда удобнее всего проводить поиск файла по дате его изменения. В Linux для этого применяется опция «-mtime» . Пользоваться ей довольно просто, рассмотрим все на примере.

Допустим, в папке «Изображения» нам нужно найти объекты, которые подвергались изменениям последние 15 суток. Вот что нужно прописать в «Терминале» :

find /home/user/Изображения -mtime -15 -print

Как можно заметить, эта опция показывает не только файлы, изменявшиеся за указанный срок, но и папки. Работает она и в обратную сторону - вы можете найти объекты, которые были изменены позже указанного срока. Для этого нужно перед цифровым значением вписать знак «+» :

find /home/user/Изображения -mtime +10 -print

GUI

Графический интерфейс во многом облегчает жизнь новичкам, которые только установили дистрибутив Linux. Данный метод поиска очень похож на тот, что осуществляется в ОС Windows, хотя и не может дать всех тех преимуществ, что предлагает «Терминал» . Но обо всем по порядку. Итак, рассмотрим, как сделать поиск файлов в Linux, используя графический интерфейс системы.

Способ 1: Поиск через меню системы

Сейчас будет рассмотрен способ поиска файлов через меню системы Linux. Проводимые действия будут выполняться в дистрибутиве Ubuntu 16.04 LTS, однако инструкция общая для всех.

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

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

1)Выведите списки всех файлов текущей директории и ее подкаталогов

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

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

2)Найдите все файлы и директории в вашей текущей рабочей директории

Если нужно найти только директории, то можно использовать:

$ find . -type d

Чтобы найти только файлы, а не директории:

$ find . -type f

3)Выведите список всех файлов определенной директории

Для того чтобы найти файлы из определенной директории надо ввести:

$ find /root

This command will look for all the files in /root directory.

4)Найдите файл по имени в директории

Для поиска файла по имени в определенной директории введите:

$ find /root -name "linuxtechi.txt"

Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением.txt:

$ find /root -name "*.txt"

5)Найдите файл во множестве директорий

Для поиска файлов во множестве директорий введите:

$ find /root /etc -name "linuxtechi.txt"

With this command, we can look for linuxtechi.txt file in /root & /etc directories.

С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc .

6)Найдите файл по имени без учета регистра

Ищите файлы без учета регистра с помощью -iname:

$ find /root -iname "Linuxtechi.txt"

В результате вы получите все файлы с названием linuxtechi.txt. При этом файлов может быть несколько, так как linuxtechi.txt будет равняться LINUXTECHI.txt .

7)Найдите все типы файлов отличные от упомянутого

Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:

$ find /root -not -name "*.txt"

8)Найдите файлы по множеству признаков

Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями.txt и.html:

$ find . -regex ".*\.\(txt\|html\)$"

9)Найдите файлы с использованием условия OR

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

$ find -name "*.txt" -o -name "linuxtechi*"

10)Поиск файлов на основе разрешений

Чтобы найти файлы с определенным доступом используйте -perm:

$ find /root -type f -perm 0777

11)Найдите все скрытые файлы

Для поиска скрытых файлов в директории введите:

$ find ~ -type f name ".*"

12)Найдите все файлы со SGID

Для поиска файлов с битами SGID исполните команду:

$ find . -perm /g=s

13) Найдите все файлы со SUID

Для поиска файлов с битами SUID используем:

$ find . -perm /u=s

14)Найдите все исполняемые файлы

Для поиска только исполняемых файлов введите:

$ find . -perm /a=x

15)Найдите файлы с доступом только для чтения

К тому же, с помощью команды find можно найти файлы, доступные только для чтения:

$ find /root -perm /u=r

16)Найдите все файлы пользователя

Для поиска файлов определенного пользователя надо использовать следующую команду:

$ find . -user linuxtechi

17)Найдите все файлы группы

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

$ find . -group apache

18)Найдите все файлы определенного размера

Если мы хотим искать, размер которого нам известен, тогда можно использовать -size:

$ find / -size -2M

19)Найдите все файлы в диапазоне размеров

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

$ find / -size +2M -size -5M

Можно использовать команд find при поиске файлов тяжелее, чем, например, 50 mb:

$ find / -size +50M

20)Найдите файлы, измененные N дней назад

For example, we want to locate all the files that have been modified 8 days ago. We can accomplish that using ‘-mtime‘ option in find command

Например, мы можем обнаружить найти все файлы отредактированные 8 дней назад. Делается это с помощью команды -mtime:

$ find / -mtime 8

21)Найдите файлы, в которые заходили N дней назад

Можно найти файлы, в которые входили 8 дней назад с помощью -atime:

$ find / -atime 8

22)Найдите все пустые файлы и директории

Для нахождения всех пустых файлов в системе введем:

$ find / -type f -empty

А чтобы вывести их директории:

$ find ~/ -type d -empty

23)Найдите самый большой и самый маленький файлы

Для вывода списка самых больших или самых маленьких файлов используем find в связке с sort , и, если нам понадобится вывести 3 "самых-самых", то используем еще head .

Для вывода трех файлов из текущей директории введем:

$ find . -type f -exec ls -s {} \; | sort -n -r | head -3

Схожим образом мы можем вывести самые маленькие файлы текущей директории:

$ find . -type f -exec ls -s {} \; | sort -n | head -3

24)Найдите все файлы с определенным доступом и сменить его на 644 (или еще на что-нибудь)

Команда find может предложить продвинутые варианты использования. К примеру, мы может изменить все разрешения 644 определенных файлов на 777. Для этого исполняем:

$ find / -type f -perm 644 -print -exec chmod 777 {} \;

25)Найдите все файлы, подходящие по определенным критериям, и удалите их

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

$ find / -type f -name "linuxtechi.*" -exec rm -f {} \;

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

Необходимость поиска файлов может возникнуть практически в каждой операционной системе, которая позволяет работать с файловой системой. Классическим примером для нас послужит операционная система Linux, которую мы будем использовать в консольном режиме. Давайте рассмотрим возможности поиска файлов в системе посредством консоли. Для поиска файлов в системе Linux есть команда find, которая позволяет производить довольно гибкий поиск, позволяя задавать дополнительные критерии поиска. Рассмотрим возможности данной команды подробнее.

Синтаксис команды find:

Find путь –опции

В качестве пути указывается директория, в которой необходимо производить поиск. К примеру, это могут быть значения такого вида:
. – текущий каталог
/ — корневой каталог
~ — домашний каталог

После указания пути так указываются опции поиска. С виду всё запутано, но на самом деле сложностей тут нет.

Основные опции:
-name - поиск по имени, задается шаблон поиска;
-user - поиск файлов принадлежащих конкретному пользователю;
-group - поиск файлов принадлежащих конкретной группе;
-perm - поиск файлов по режиму доступа;
-type - поиск файлов по типу, список типов:

  • b - специальный блочный файл;
  • d - каталог;
  • c - специальный символьный файл;
  • f - обычный файл;
  • l - символическая ссылка;
  • p - именованный канал;
  • s - сокет.

-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 "*" –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. Навыки грамотного поиска файлов значительно экономит ваше личное время, а как известно время бесценно. Успехов в труде!

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: