Ищем файлы в Linux. Использование Find и Locate для поиска файлов на сервере Linux Как найти файл в убунту

Обновлено: 02.11.2019 Опубликовано: 25.07.2016

Самая универсальная и функциональная команда для поиска в Linux — find. Данная статья представляет из себя шпаргалку с примерами ее использования.

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth .

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype <тип> Тип ругулярного выражения.
-L Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Полный набор актуальных опций можно получить командой man find .

Примеры использования find

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

find / -name "file.txt"

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня / .

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

find / -name "*.tmp"

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

Найти все файлы или папки, которые начинаются на sess_ и заканчиваются на cd

find . -name "sess_*" -a -name "*cd"

* -a: логическое И, -o: логическое ИЛИ.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer . Данная опция доступна с версии 4.3.3 (посмотреть можно командой find --version ).

а) дате изменения:

find . -type f -newermt "2019-11-02 00:00"

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

find . -type f -newerct 2019-09-07 ! -newerct "2019-09-09 07:50:00"

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

Ищем все справами на чтение и запись:

find / -perm 0666

Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

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

find / -type f -exec grep -i -H "content" {} \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержиться строка content .

С сортировкой по дате модификации

find /data -type f -printf "%TY-%Tm-%Td %TT %p\n" | sort -r

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

find /home/user/* -type d -exec chmod 2700 {} \;

* в данном примере мы ищем все каталоги (type d ) в директории /home/user и ставим для них права 2700 .

Чистка по расписанию

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

Открываем на редактирование задания cron:

И добавляем:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, соторые старше 14 дней. Задание запускается каждый день в 00:00 .
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

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

В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.

Find - это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [папка] [параметры] критерий шаблон [действие]

Папка - каталог в котором будем искать

Параметры - дополнительные параметры, например, глубина поиска, и т д

Критерий - по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон - непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.

  • -P никогда не открывать символические ссылки
  • -L - получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth - максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth - искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version - показать версию утилиты find
  • -print - выводить полные имена файлов
  • -type f - искать только файлы
  • -type d - поиск папки в Linux

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name - поиск файлов по имени
  • -perm - поиск файлов в Linux по режиму доступа
  • -user - поиск файлов по владельцу
  • -group - поиск по группе
  • -mtime - поиск по времени модификации файла
  • -atime - поиск файлов по дате последнего чтения
  • -nogroup - поиск файлов, не принадлежащих ни одной группе
  • -nouser - поиск файлов без владельцев
  • -newer - найти файлы новее чем указанный
  • -size - поиск файлов в Linux по их размеру

Примеры использования

А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.

1. Поиск всех файлов

Показать все файлы в текущей директории:

2. Поиск файлов в определенной папке

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

Искать файлы по имени в текущей папке:

find . -name "*.jpg"

Не учитывать регистр при поиске по имени:

find . -iname "test*"

3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name "*.php"

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

find . -not -name "test*"

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name "test" -not -name "*.php"

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name "*.html" -o -name "*.php"

6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name "*.c"

7. Поиск скрытых файлов

Найти скрытые файлы:

find ~ -type f -name ".*"

8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

find . type f -perm 0664

Найти файлы с установленным флагом suid/guid:

find / -perm 2644

find / -maxdepth 2 -perm /u=s

Поиск файлов только для чтения:

find /etc -maxdepth 1 -perm /u=r

Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов по группах и пользователях

Найти все файлы, принадлежащие пользователю:

find . -user sergiy

Поиск файлов в Linux принадлежащих группе:

find /var/www -group developer

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

find / -mtime 50

Поиск файлов в Linux открытых N дней назад:

find / -atime 50

Найти все файлы, модифицированные между 50 и 100 дней назад:

find / -mtime +50 –mtime -100

Найти файлы измененные в течении часа:

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

Найти все файлы размером 50 мегабайт:

find / -size 50M

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

Найти самые маленькие файлы:

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

Самые большие:

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

12. Поиск пустых файлов и папок

find /tmp -type f -empty

$ find ~/ -type d -empty

13. Действия с найденными файлами

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

find . -exec ls -ld {} \;

Удалить все текстовые файлы в tmp

find /tmp -type f -name "*.txt" -exec rm -f {} \;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

Выводы

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

Возможно, вам известна такая проблема как: Не можете найти файл, а он где то в компьютере. Тогда удобна команда find.

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

Можно начать с самого простого: Если вы знаете имя файла, то вы сможете легко его найти! Вам всего лишь нужно набрать команду find и указать конкретное имя файла!

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

Вот эта та самая простая команда:

Find -name love
Если существует файл с именем «love» то команда find выявит местоположение файла или нескольких файлов таким образом:

Jzb@kodos:~$ find -name love ./projects/love jzb@kodos:~$
Например, будем искать все файлы в формате mp3 и сделаем полный список в файле:

File /home/artix -iname ".mp3" > ./list.txt

Поиск файлов по части названия

Далее найдем файлы в формате txtx, не просто файлы, а такие текстовые файлы, в которых присутствует слово «LEON»:

File /home/artix -iname ".txt" -exec grep -H "LEON" "{}" \; > ./list.txt
Замечательно, у нас уже получается осуществлять поиск файлов Linux со словом «LEON». Таким же образом можно удалить лишнее, причем в фоне, чтобы можно было дальше работать:

File /home/artix -iname ".bak" -exec rm "{}" \; &
Этим мы облегчаем себе жизнь. Эти наипростейшие вещи, а в них так много полезного.

Поиск файлов по дате Linux

Find ./ -mmin -10 #дата модификации менее 10 минут find ./ -mtime +1 #дата модификации более суток find ./ -type f -atime +10 # время обращения более 10 дней find ./ -type f -amin -10 #дата модификации последние 10 минут

Поиск текста в файлах Linux

Часто бывает что требуется провести поиск текста в файлах Linux. Приведу 2 примера поиска файлов: (linux, freebsd) нужно фрагмента текста в файлах:

# find /var/named/ -type f -exec grep "MX" {} \; serversnetwork.info. 14400 IN MX 10 mail
и еще один:

# grep -rl "MX" /var/named/ /var/named/serversnetwork.info.db

Поиск файлов по размеру
Временами для поиска файлов Linux можно пользоваться другими командами. Например, вы заметили как на вашем компьютере, в какой-то раздел стал увеличиваться в объеме. Чтобы найти с каким файлом это связанно, или какая папка переполняется можно использовать такую команду:

Find -size 95k.
Так мы найдем файлы размером 95k. Но этой опцией пользуются очень редко. Больше используют команды, с помощью которых можно найти файл больше или меньше указанного размера. К примеру, опция:

Find -size +150k
Должна показать файлы которые больше 150k. А опция

Find -size -94k
то, что меньше 94K.

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

$ find . -size 3500k -print
Эта опция осуществит в Linux поиск файлов и выявит на экране те, у которых размер 3500 килобайт, которые находятся в этой папке. Если вам потребуется отыскать файлы, в которых размер меньше 250 килобайт, то команда будет выглядеть следующей:

$ find . -size -200k -print
Если требуется отыскать файлы в которых размер больше 555 мегабайт, то мы будем использовать опцию:

$ find / -size +555M -print
Пожалуй, на этом я закончу писать свою статью.

Теперь вы возможно сможете сами искать файлы, осуществлять поиск текста в файлах Linux, искать файлы по дате!

Всем спасибо, пока!

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

1) find: Для поиска файлов из командной строки вы можете использовать команду “find”. У этой команды следующий синтаксис:

find path criteria action

“path” - Секция для указания директории поиска. Если ничего не указано поиск идет по текущей директории.

“criteria” - Опции поиска.

“action” - Опции, которые влияют на состояние поиска или контролируют его, например,

2) locate: Команда “locate” это альтернатива команде “find -name”. Команда find ищет файлы в выбранной части файловой системы и процесс может быть не очень быстрым. С другой стороны, команда locate ищет файлы в базе данный, созданной специально для этих целей /var/lib/locatedb, что происходит намного быстрее. Для обновления базы используется команда updatedb .

3) whereis: whereis” возвращает место расположения кода (опция -b), ман-страниц (опция -m), и исходные файлы (опция -s) для указанной команды. Если опции не указываются, выводится вся доступная информация. Эта команда быстрее чем “find” но менее полная.

4) which: Команда “which” ищет все пути перечисленные в переменной PATH для указанной команды.

5) type:

При вызове без опций показывает, как имена будут интерпретироваться

при использовании в качестве имени команды. Если использована опция -a , команда type выдает список всех каталогов, где есть выполняемый файл с

соответствующим именем. В список включаются также псевдонимы и функции,

если только не указана опция -p . К

хэшу команд не обращаются, если указана опция -a . Команда type возвращает 0,

если хоть один из аргументов найден, и 1 в противном случае.

Постовой

Explo.ru - все про туризм и отдых: горящие туры и путевки в Турцию, Египет,

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

В этом случае удобна команда 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 доступен на