Поиск по системе линукс

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

Автор: Нагибин Владимир . Дата статьи: 26.03.2010 г.

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

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

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

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

find путь -опции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$ find /mnt/usb -name «*.mp3» -print

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

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

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

$ find / -name «[a-j]*» -print

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

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

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

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

$ find . -perm 775 -print

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

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

$ find . -perm -070 -print

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

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

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

$ find / -user admin -print

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

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

$ find / -group managers -print

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

$ find / -nouser -print

$ find / -nogroup -print

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

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

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

$ find /etc -type l -print

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

$ find /mnt/raid -type d -print

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

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

$ find . -size 2000k -print

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

$ find . -size -500k -print

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

$ find / -size 600M -print

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

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

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

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

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

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

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

Читайте также:  Mac os внешний диск разрешено только чтение

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

IT-поддержка

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

Источник

Как выполнить поиск файлов и папок в Linux

В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.

Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.

Поиск файла по имени при помощи утилиты locate

Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:

Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:

# apt-get install mlocate

Пользователям RedHat, CentOS и Fedora стоит выполнить

# yum install mlocate

После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:

Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.

Поиск в Linux при помощи утилиты find

Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:

find [path. ] [expression]

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

Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:

# find / -name myfilename

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

# find / -name «*part_of_name*»

«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:

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

Вот пример того, как можно выполнить поиск в Linux файла по дате:

# find /home -mtime -5

Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.

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

А так, например, можно выполнит поиск файлов по размеру:

# find /home -size +1G

Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

# find / -type d -name «*mysql*»

Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:

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

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

Поиск текста в Linux при помощи утилиты grep

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

# grep -lri root /etc/*

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли

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

# grep -lri ^root /etc/*

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

Источник

Поиск файлов в Linux

Обновл. 4 Сен 2021 |

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

Читайте также:  Что за ошибка 0x800705b4 при обновлении windows 10

Поиск через графический интерфейс

Главное меню

С помощью главного меню ОС вы можете не только искать и запускать программы, но также и выполнять поиск файлов. Подобный функционал присутствует во многих окружениях рабочего стола (KDE, GNOME, Xfce и пр.). Например, в KDE это представлено следующим образом:

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

Файловые менеджеры

Многие файловые менеджеры также предоставляют возможности поиска файлов. Например, в Dolphin для запуска поиска достаточно просто нажать кнопку со значком лупы, а затем ввести имя файла (или папки) в строку поиска. При этом вы можете выбрать папку, в которой будет выполняться поиск, а также указать дополнительные параметры (поиск по содержимому и пр.). Помимо этого в качестве поискового запроса допускается применять символы ? и * :

Поиск по содержимому в Dolphin:

KFind

В KDE, помимо вышеупомянутых инструментов поиска, также есть замечательная утилита под названием KFind. С её помощью вы можете точно настроить параметры поиска (указать имя файла, его тип и путь поиска, обычный текстовый поиск или мета-поиск, дату изменения, размер, пользователя, группу и пр.). Она также позволяет сохранять результаты поиска в виде простого текстового списка URL-адресов найденных файлов:

SearchMonkey

SearchMonkey позволяет выполнять поиск файла, как по имени, так и по его содержимому, по диапазону дат и пр. Но главное преимущество SearchMonkey — это возможность везде применять регулярные выражения.

Поиск с применением регулярного выражения в SearchMonkey:

Recoll

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

Установить программу можно из официальных репозиториев через командную строку:

sudo apt-get install recoll

Или через графический интерфейс:

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

Это может быть очень удобно при работе с большим объемом текстовых данных. Программа поддерживает такие форматы файлов, как: .pdf, .djvu, .doc, .docx, .odf. А также умеет находить перечисленные файлы в архивах.

Поиск файлов через терминал. Команда find

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

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

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

find [опции] [путь. ] [выражение]

опции — аргументы, управляющие обработкой символьных ссылок, параметрами отладки и методом оптимизации;

путь — начальный каталог (или каталоги), в которых команда find будет искать файлы;

выражение — состоит из параметров, шаблонов поиска и действий, разделенных операторами.

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

Давайте рассмотрим следующий пример:

find -L /var/www -name «*.js»

опция -L — указывает команде find следовать по символическим ссылкам;

путь /var/www — задает каталог, в котором будет выполняться поиск;

выражение -name «*.js» — сообщает команде find искать файлы, заканчивающиеся на .js (расширение JavaScript-файлов).

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

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

Например, для поиска файла document.pdf в каталоге /home/linuxize можно применить следующую команду:

find /home/linuxize -type f -name document.pdf

Чтобы выполнить поиск без учета регистра, замените -name на -iname :

find /home/linuxize -type f -iname document.pdf

Критериям поиска вышеприведенной команды будут соответствовать как Document.pdf, так и DOCUMENT.pdf и т.д.

Поиск файлов по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти внутри каталога /var/log/nginx все файлы, заканчивающиеся на .log.gz, необходимо выполнить:

find /var/log/nginx -type f -name ‘*.log.gz’

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

Чтобы найти все файлы, которые не соответствуют регулярному выражению *.log.gz вы можете использовать опцию -not . Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы можете использовать:

find /var/log/nginx -type f -not -name ‘*.log.gz’

Поиск файлов по типу

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

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

f — обычный файл;

l — символьная ссылка;

c — символьные устройства;

b — блочные устройства;

p — именованный канал (FIFO);

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

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

Для поиска файлов по заданному размеру необходимо добавить параметр -size . Указание размера происходит с помощью следующих суффиксов:

b — 512-байтовые блоки (по умолчанию);

w — двухбайтовые слова;

Следующая команда найдет все файлы размером 1024 байта в каталоге /tmp:

find /tmp -type f -size 1024c

Читайте также:  Результат chkdsk windows 10

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

В следующем примере мы ищем в текущем рабочем каталоге все файлы размером менее 1 МБ. Обратите внимание на символ минуса — перед значением размера:

find . -type f -size -1M

Если вы хотите выполнить поиск файлов размером более 1 МБ, то вам нужно использовать символ плюса + :

find . -type f -size +1M

Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы размером от 1 до 2 МБ:

find . -type f -size +1M -size 2M

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

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

Так же, как и при поиске по размеру, используйте символы + или — для критериев «больше» или «меньше».

Допустим, несколько дней назад вы изменили один из конфигурационных файлов dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в каталоге /etc/dovecot/conf.d, которые заканчивается на .conf и были изменены за последние пять дней:

find /etc/dovecot/conf.d -name «*.conf» -mtime 5

Вот еще один пример фильтрации файлов на основе даты изменения с помощью параметра -daystart . Следующая команда выведет список всех файлов в каталоге /home, которые были изменены 30 или более дней назад:

find /home -mtime +30 -daystart

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

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

Например, чтобы найти внутри каталога /var/www/ravesli все файлы с разрешением 644, вы должны использовать:

find /var/www/ravesli -perm 644

Рассмотрим следующий пример команды:

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

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

Поиск файлов по владельцу

Чтобы найти файлы, принадлежащие определенному пользователю или группе, применяются параметры -user и -group .

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

find / -user ravesli

Вот еще один пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data, и изменить владельца соответствующих файлов с www-data на nginx. Вам нужно выполнить следующий набор команд:

find / -user www-data -type f -exec chown nginx <> \;

Поиск и удаление файлов

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

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

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

find /var/log/ -name *.temp -delete

Предупреждение: Используйте опцию -delete с особой осторожностью. Команда find вычисляется как выражение, и если вы добавите опцию -delete в начало данного выражения, то команда удалит всё в указанных вами папках.

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

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

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

find /etc -type f -name «*.conf» > conf_search

Она производит поиск в каталоге /etc всех файлов, имеющих расширение .conf, и записывает результат в файл conf_search.

Поиск файлов через терминал. Команда locate

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

Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.

Иногда вам может потребоваться обновить базу данных, к которой обращается locate . Для этого необходимо ввести команду updatedb (её запуск производится от имени суперпользователя):

Поиск файлов через терминал. Команда grep

Команда grep может использоваться не только в роли фильтра для других команд, но и производить поиск файлов. Для этого необходимо задать параметр -r и указать папку, в которой следует искать текст. Предположим, что мы хотим найти в каталоге /var/log все файлы, которые содержат строку error:

sudo grep -r «error» /var/log

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

Поиск файлов через терминал. Команда whereis

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

Заключение

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

Поделиться в социальных сетях:

26 команд в Linux, которые должен знать каждый сисадмин

Комментариев: 2

Стоит добавить, что для обновления базы файлов, по которой осуществляется поиск с командой “locate”, есть команда “updatedb”.
А пакет, например, для Ubuntu или CentOS, в котором есть locate и updatedb — mlocate

Источник

Оцените статью