Find имя файла. Команда find и её опции в примерах. Примеры использования find

This is the default welcome page used to test the correct operation of the Apache2 server after installation on Ubuntu systems. It is based on the equivalent page on Debian, from which the Ubuntu Apache packaging is derived. If you can read this page, it means that the Apache HTTP server installed at this site is working properly. You should replace this file (located at /var/www/html/index.html) before continuing to operate your HTTP server.

If you are a normal user of this web site and don"t know what this page is about, this probably means that the site is currently unavailable due to maintenance. If the problem persists, please contact the site"s administrator.

Configuration Overview

Ubuntu"s Apache2 default configuration is different from the upstream default configuration, and split into several files optimized for interaction with Ubuntu tools. The configuration system is fully documented in /usr/share/doc/apache2/README.Debian.gz . Refer to this for the full documentation. Documentation for the web server itself can be found by accessing the manual if the apache2-doc package was installed on this server.

The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:

/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled | `-- *.conf |-- sites-enabled | `-- *.conf

  • apache2.conf is the main configuration file. It puts the pieces together by including all remaining configuration files when starting up the web server.
  • ports.conf is always included from the main configuration file. It is used to determine the listening ports for incoming connections, and this file can be customized anytime.
  • Configuration files in the mods-enabled/ , conf-enabled/ and sites-enabled/ directories contain particular configuration snippets which manage modules, global configuration fragments, or virtual host configurations, respectively.
  • They are activated by symlinking available configuration files from their respective *-available/ counterparts. These should be managed by using our helpers a2enmod, a2dismod, a2ensite, a2dissite, and a2enconf, a2disconf . See their respective man pages for detailed information.
  • The binary is called apache2. Due to the use of environment variables, in the default configuration, apache2 needs to be started/stopped with /etc/init.d/apache2 or apache2ctl . Calling /usr/bin/apache2 directly will not work with the default configuration.

Document Roots

By default, Ubuntu does not allow access through the web browser to any file apart of those located in /var/www , public_html directories (when enabled) and /usr/share (for web applications). If your site is using a web document root located elsewhere (such as in /srv) you may need to whitelist your document root directory in /etc/apache2/apache2.conf .

The default Ubuntu document root is /var/www/html . You can make your own virtual hosts under /var/www. This is different to previous releases which provides better security out of the box.

Reporting Problems

Please use the ubuntu-bug tool to report bugs in the Apache2 package with Ubuntu. However, check before reporting a new bug.

Please report bugs specific to modules (such as PHP and others) to respective packages, not to the web server itself.

Во время работы в любой операционной системе иногда возникает потребность в использовании инструментов для быстрого поиска того или иного файла. Актуально это и для 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, однако инструкция общая для всех.

Эта статья — выдержка из книги «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 выглядит следующим образом:

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 байт

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