Поиск в Linux с помощью find. Команда find и её опции в примерах Поиск файла по расширению из списка linux

Очень часто требуется срочно найти какой-то файл в файловой системе, но где он вы не имеете ни малейшего понятия. И если GUI утилиты для поиска файла надоели или вообще у вас GUI не установлен или вы принципиально им не пользуетесь, то на помощь придут обширные команды для поиска файлов, папок и частей файла в linux.

Поиск файла по имени в базе данных.
С помощью команды locate можно проводить поиск файла(ов) по части имени файла. Команда сканирует базу данных имен и выдает путь до искомого файла(ов). Мы рекомендуем запускать команду с опцией -i: locate -i для поиска без учета регистра.
Пример:

subsanek@subsanek-laptop:~$ locate -i .ogg
/home/subsanek/неизвестно - неизвестно/01 - неизвестно 1 - ???.ogg
/usr/local/Zend/ZendStudio-7.1.2/docs/PHPmanual/book.oggvorbis.html
/usr/local/Zend/ZendStudio-7.1.2/docs/PHPmanual/intro.oggvorbis.html
/usr/share/kde4/apps/bball/bounce.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/a.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/b.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/c.ogg
(усечено)


-вызов команды нашел все файлы в системе с расширение ogg.
locate ищет файлы очень быстро, но это лишь просмотр списка имен из базы данных и если файл создан недавно, то велика вероятность его не найти.
Обновление базы данных.
Обновить базу данных команды locate можно командой (от суперпользователя):
updatedb
Удобочитаемый вывод.
Часто команда locate может дать многотысячный результат который просто промелькнет перед экраном и ничего не даст для ваших глаз, чтобы избежать этого можно перенаправить результат вывода в контейнер:
locate -i .ogg | less
Также можно задать сколько необходимо вывести результатов опцией -n:
locate -i .ogg -n 10
-выведет первые 10 результатов.

Поиск файлов с реальном сканированием.
Команда find выполняет просмотр файловой системы для поиска файла, что делает этот инструмент медленным, но эффективным.
Для поиска по имени обязательно нужно указывать ключ -name
Пример:
find -name filename.txt
По умолчанию find производит поиск рекурсивно в текущем каталоге.

Поиск текста по фрагменту из текста.
Легендарная команда grep может служить практически для любых целей. Я ее люблю применять не только для поиска нужных файлов в каталоге исходного текста. С помощью grep также можно задавать поиск по регулярным выражениям.
Прототип команды:
grep "шаблон поиска" файл_в_котором_искать
Пример:
grep -R "text" /
-команда будет рекурсивно искать во всех текстовых файлах системы слово text.
Grep имеет внушительное количество опций которые могут довольно часто понадобиться:

subsanek@subsanek-laptop:~$ grep --help
Использование: grep [КЛЮЧ]... ШАБЛОН [ФАЙЛ]...
Поиск ШАБЛОНА в каждом ФАЙЛЕ или в стандартном вводе.
По умолчанию, ШАБЛОН представляет собой простое регулярное выражение (BRE).
Пример: grep -i "hello world" menu.h main.c

Выбор типа регулярного выражения и его интерпретация:
-E, --extended-regexp ШАБЛОН - расширенное регулярное выражение (ERE)
-F, --fixed-regexp ШАБЛОН - строки фиксированной длины, разделённые
символом новой строки
-G, --basic-regexp ШАБЛОН - простое регулярное выражение (BRE)
-P, --perl-regexp ШАБЛОН - регулярное выражения языка Perl
-e, --regexp=ШАБЛОН использовать ШАБЛОН для поиска
-f, --file=ФАЙЛ брать ШАБЛОН из ФАЙЛа
-i, --ignore-case игнорировать различие регистра
-w, --word-regexp ШАБЛОН должен подходить ко всем словам
-x, --line-regexp ШАБЛОН должен подходить ко всей строке
-z, --null-data строки разделяются байтом с нулевым значением, а не
символом конца строки

Дополнительно:
-s, --no-messages подавлять сообщения об ошибках
-v, --revert-match выбирать не подходящие строки
-V, --version вывести информацию о версии и выйти
--help показать помощь и выйти
--mmap использовать отображение в память (mmap) по возможности

Управление выводом:
-m, --max-count=ЧИСЛО остановиться после указанного ЧИСЛА совпадений
-b, --byte-offset печатать вместе с выходными строками смещение в
байтах
-n, --line-number печатать номер строки вместе с выходными строками
--line-buffered сбрасывать буфер после каждой строки
-H, --with-filename печатать имя файла для каждого совпадения
-h, --no-filename не начинать вывод с имени файла
--label=МЕТКА выводить МЕТКУ в качестве имени файла для
стандартного ввода
-o, --only-matching показывать только часть строки, совпадающей с ШАБЛОНОМ
-q, --quiet, --silent подавить весь обычный вывод
--binary-files=ТИП считать, что двоичный файл ТИПА:
binary, text или without-match.
-a, --text то же что и --binary-files=text
-I то же, что и --binary-files=without-match
-d, --directories=ДЕЙСТВ как обрабатывать каталоги
ДЕЙСТВИЕ может быть read (читать),
recurse (рекурсивно), или skip (пропускать).
-D, --devices=ДЕЙСТВ как обрабатывать устройства, FIFO и сокеты
ДЕЙСТВИЕ может быть "read" или "skip"
-R, -r, --recursive то же, что и --directories=recurse
--include=Ф_ШАБЛОН обработать только файлы, подпадающие под Ф_ШАБЛОН
--exclude=Ф_ШАБЛОН пропустить файлы и каталоги,
подпадающие под Ф_ШАБЛОН
--exclude-from=ФАЙЛ пропустить файлы, подпадающие под шаблон
файлов из ФАЙЛА
--exclude-dir=ШАБЛОН каталоги, подпадающие под ШАБЛОН,
будут пропущены
-L, --files-without-match печатать только имена ФАЙЛОВ без совпадений
-l, --files-with-matches печатать только имена ФАЙЛОВ с совпадениями
-c, --count печатать только количество совпадающих
строк на ФАЙЛ
-T, --initial-tab выравнивать табуляцией (если нужно)
-Z, --null печатать байт 0 после имени ФАЙЛА

Управление контекстом:
-B, --before-context=ЧИС печатать ЧИСЛО строк предшествующего контекста
-A, --after-context=ЧИС печатать ЧИСЛО строк последующего контекста
-C, --context[=ЧИС] печатать ЧИСЛО строк контекста,
--color[=КОГДА],
--colour[=КОГДА] использовать маркеры для различия совпадающих
строк; КОГДА может быть always (всегда),
never (никогда), или auto (автоматически)
--color, --colour использовать маркеры для различия совпадающих строк
-U, --binary не удалять символы CR в конце строки (MSDOS)
-u, --unix-byte-offsets выдавать смещение, как-будто нет CR-ов (MSDOS)

Вместо egrep предполагается запуск grep -E. Вместо fgrep предполагается grep -F.
Запуск под именами egrep или fgrep лучше не выполнять.
Когда не задан ФАЙЛ, или когда ФАЙЛ это -, то читается стандартный ввод.
Если указано меньше, чем два файла, то предполагает -h. При нахождении
совпадений кодом завершения программы будет 0, и 1, если нет.При возникновении
ошибок, или если не указан параметр -q, кодом завершения будет 2.

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

В этом случае удобна команда find . Как ее использовать? Конечно, к этой утилите поставляется большая man-страница, но мы рассмотрим некоторые типичные случаи. Просмотреть дерево каталогов, начиная с текущего, и найти файл lostfile.txt:

Если Вы ищете в большом дереве каталогов, команда find может работать довольно медленно. Иногда удобнее использовать команду locate . Она не ищет файл непосредственно в файловой системе, а просматривает свою базу данных. Такой метод намного быстрее, но база данных может устареть. В некоторых дистрибутивах эта база модифицируется каждую ночь. Вы можете время от времени вручную выполнять команду updatedb , чтобы ее модифицировать. locate ищет подстроки:

Допустимое количество орфографических ошибок зависит от длины имени файла, но может быть установлено с помощью опции -t. Чтобы разрешить максимум 2 ошибки и использовать служебный символ просто наберите:

Обзор дерева каталогов

Иногда необходимо получить обзор дерева каталогов. Например, Вы получили новый CD-ROM и хотели бы узнать, что на нем есть. Вы можете просто использовать ls - R . Лично я для удобочитаемости предпочитаю один из следующих способов. Tree (sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz) отображает дерево каталогов в виде диаграммы.

Или используйте добрый старый find . В Gnu версии find , которая обычно поставляется с Linux, имеется возможность изменить формат вывода, чтобы отображать, например, имя файла и его размер:

Можно воспользоваться небольшой perl процедурой, работающей с командой ls , которая делает подобные вещи. Ее можно загрузить отсюда: lsperl.gz . Существует много других утилит просмотра дерева каталогов, но для большинства случаев этих вполне достаточно.

Поиск файлов по содержанию (поиск текстовых строк в файлах).

Стандартные утилиты для поиска текстовых строк в файлах - grep / egrep для обычных поисков выражения и fgrep для поиска литеральных строк. Чтобы искать выражение во всех файлах в текущем каталоге, просто наберите:

Если Вам трудно запомнить эти длинные команды, используйте маленький скрипт, который можно загрузить отсюда: grepfind.gz . Скрипт еще и удаляет не-печатаемые символы из строки поиска, чтобы Вы случайно не получили в результате поиска egrep -ом двоичный файл.

Очень интересная программа поиска - agrep . Agrep работает в основном подобно egrep , но позволяет искать с учетом орфографических ошибок. Чтобы искать выражение и разрешить максимум 2 орфографические ошибки, наберите:

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

glimpse -i -2 "search exprission"

glimpse - тоже допускает орфографические ошибки (как и agrep) и -2 указывает, что разрешены две ошибки. glimpse доступен на

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.

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