Find ubuntu примеры. Поиск файлов в Linux или Изучаем команду find

Главная / Жесткие диски

Проблема с поиском нужных файлов или папок была, есть, и будет актуальна всегда. Люди постоянно забывают, куда именно они сохранили нужный файл Хрень.doc, или Супер-музня.mp3. Поэтому независимо от вашей операционной системы, поиск файлов или директорий, будет всегда востребован хоть на Linux, на Windows, или MacOS X. Просто инструменты поиска будут разные. Поиск в Linux можно разделить на две категории: графический и консольный. Начнем с гордости всех луниксоидов — с Терминала. Для поиска в 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, которая ищет файлы по имени.
Например, команда:

find ~ Music -name "*.mp3"

произведет поиск всех файлов (символ *), которые имеют расширение.mp3 в папке Music, которая находится в вашей Домашней директории.

find / -name "*.pdf"

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

sudo find / -name "*.pdf"

find ~ -name "Foto*"

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

Ключ `-name’ различает большие и маленькие буквы; для того чтобы во время поиска не обращать внимание на эти критерии, нужно использовать опцию ‘-iname’. Тогда программа найдет все файлы, которые будут состоять из букв: Foto, foto или FOTO.

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

find ~ -name "Foto*" > results.txt

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

find / -name .profile

В данном случае будет произведен поиск скрытого файла.profile во всей системе.

Можно произвести поиск файла если известна часть его имени. В таком случае команда будет такой:

find /home/dm/Музыка/Клипы/ -name "*uniform*"

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

find / -name "*"

Данная команда сможет найти все файлы вашей системы, которые начинаются с букв от a до c.

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

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

find . -perm 775

Поиск файлов по пользователю, либо группе.

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

find / -user comp

Эта команда найдет файлы в системе, которые принадлежат пользователю comp.
А для того, чтобы найти файлы, которые принадлежат какой-то определенной группе (например group2), выполним команду:

find / -group group2

Чтобы найти файлы несуществующих пользователей либо групп, нужно использовать опции -nouser и -nogroup:

find / -nouser

find / -nogroup

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

У команды find есть еще одна полезная возможность, можно найти файлы определенного типа. Для этого применим ключ -type. Найдем символические ссылки в каталоге /etc:

find /etc -type l

Найдем список каталогов, которые присутствуют в папке /mnt/raid

find /mnt/raid -type d

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

Ключ -size дает возможность найти файлы нужного вам размера.

find . -size 2000k

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

find . -size -500k

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

find / -size +900M

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

Ключ -mtime дает возможность вам отыскать файлы, которые изменялись в какой-то определенный срок времени.
Например, у нас есть задача найти файлы, которые находятся в папке /home/dm/Video , и которые изменялись за последние 10 дней.

find /home/dm/Video -mtime +10

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

find /home/dm/Video -7

В следующей статье я напишу о графических инструментах поиска в Ubuntu Linux.

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

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

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config . Мы будем искать файлы config , начиная с корневого каталога / . Для этого вам нужно выполнять команду от имени пользователя root , чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

Find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

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

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

Find [путь] [опции] [критерии поиска] [действия над файлами]

Путь

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false . Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false , тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл.
-size [±] N Размер файла равен N блокам, если указано +N , тогда размер файла больше N , -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C . Наиболее часто используемые значения для С: d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя.

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

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

Find . -type f -name "~*" -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak .

Find . -newer file.bak -type f -print

Операторы

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

В общем случае при использовании операторов критерии проверяются в порядке их приоритета. Изменить порядок можно с помощью скобок. Скобки нужно выделять с помощью обратного слеша.

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

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

Find . \(-name "~*" -or -name "temp*" \) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

Find . -maxdepth 1 \(\(-size +600M -and -size -1G \) -or -name "*.mpeg" \) -and -type f

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

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

В выполняемых командах вы можете использовать параметр {} в качестве аргумента, который заменяется путем к текущему файлу.

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

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

Find . -size +1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

Find . -name "~*" -type f -ok rm {} \;

Заключение

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

    Найдите файл по его имени. Такой простейший поиск выполняется при помощи утилиты find . Приведенная ниже команда будет искать файл в текущем каталоге и во всех его подкаталогах.

    find -iname "имя файла"

    • Введите -iname вместо -name , чтобы проигнорировать регистр в веденном имени файла. Команда -name учитывает регистр.
  1. Начните поиск в корневом каталоге. Чтобы запустить поиск по всей системе, к запросу добавьте модификатор / . В этом случае команда find будет искать файл во всех каталогах, начиная с корневого.

    find / -iname "имя файла"

    • Можно начать поиск в определенном каталоге; для этого замените / на путь к каталогу, например, /home/max .
    • Можно использовать. вместо / , чтобы искать файл только в текущем каталоге и его подкаталогах.
  2. Используйте символ обобщения . * , чтобы найти файлы, имя которого соответствует части запроса. При помощи символа обобщения * можно найти файл, полное имя которого неизвестно, или найти все файлы с определенным расширением.

    find /home/max -iname "*.conf"

    • Эта команда найдет все файлы с расширением.conf в папке пользователя Max (и ее подпапках).
    • Воспользуйтесь этой командой, чтобы найти все файл, имена которых соответствуют части запроса. Например, если на компьютере хранится множество файлов, связанных с WikiHow, найдите все файлы, введя "*wiki*" .
  3. Облегчите управление результатами поиска. Если результатов поиска слишком много, среди них сложно найти нужный файл. Используйте символ | , чтобы результаты поиска фильтровались командой less. Это облегчит просмотр и фильтрование результатов поиска.

    find /home/max -iname "*.conf" | less

    Найдите конкретные элементы. Используйте модификаторы, чтобы в результатах поиска отобразить только определенные элементы. Можно искать обычные файлы (f), каталоги (d), символьные ссылки (l), устройства посимвольного ввода-вывода (с) и блочные устройства (b).

    find / -type f -iname "имя файла"

  4. Отфильтруйте результаты поиска по размеру файлов. Если на компьютере хранится множество файлов с похожими именами, но размер искомого файла известен, отфильтруйте результаты поиска по размеру файлов.

    find / -size +50M -iname "имя файла"

    • Эта команда найдет все файлы, размер которых превышает 50 МБ. Используйте модификатор + или - , чтобы указать на увеличение или уменьшение размера. Если модификатора + или - нет, команда найдет файлы, размер которых точно совпадает с указанным размером.
    • Результаты поиска можно отфильтровать по байтам (c), килобайтам (k), мегабайтам (M), гигабайтам (G) или блокам по 512 байт (b). Обратите внимание, что приведенные модификаторы учитывают регистр.
  5. Используйте логические операторы (булевы операторы), чтобы объединить поисковые фильтры. Можно использовать операторы -and , -or , -not , чтобы объединить различные поисковые запросы в один запрос.

    find /travelphotos -type f -size +200k -not -iname "*2015*"

    • Эта команда найдет файлы в папке «Travelphotos», размер которых больше 200 кБ и в именах которых нет числа 2015.

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

Поиск по имени

Это наиболее очевидный способ поиска файлов. Для поиска по имени введите:

Find -name "имя"

Этот запрос будет чувствительным к регистру, то есть “file” и “File” будут восприниматься как разные имена.

Для поиска по имени без учёта регистра введите:

Find -iname "имя"

Если вам требуется найти все файлы, не соответствующие определенному шаблону, можно инвертировать поиск при помощи параметра “-not” или “!”. При использовании “!” нужно экранировать символ, чтобы bash не попытался интерпретировать его до начала работы find:

Find -not -name "исключаемое_имя"

Find \! -name "исключаемое_имя"

Поиск по типу

Вы можете указать тип файлов, которые вам нужно найти, при помощи параметра «-type» Это работает следующим образом:

Find -type дескриптор_типа запрос

Вот наиболее распространенные дескрипторы типа:

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

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

А так мы можем выполнить поиск всех файлов, которые заканчиваются на «.conf»:

Find / -type f -name "*.conf"

Поиск по времени и размеру

Find предоставляет ряд способов фильтрации результатов по размеру и времени.

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

Фильтрация по размеру осуществляется при помощи параметра «-size».

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

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

Чтобы найти все файлы с размером ровно 100 байт, введите:

Find / -size 100c

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

Find / -size -100c

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

Find / -size +500M

Поиск по время

Linux хранит данные о времени доступа, времени модификации и времени изменения.

  • Время доступа: время последнего чтения файла или записи в него.
  • Время модификации: время последнего изменения содержимого файла.
  • Время изменения: время последнего изменения метаданных в индексном узле (inode) файла.

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

Значение этих параметров указывает, на сколько дней назад нужно осуществлять поиск.

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

Find / -mtime 1

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

Find / -atime -1

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

Find / -ctime +3

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

Find / -mmin -1

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

Find / -newer myfile

Поиск по владельцу и разрешениям

Используя параметры «-user» и «-group», можно осуществлять поиск файлов по владельцу или группе, соответственно. Чтобы найти файл пользователя «syslog», нужно ввести:

Find / -user syslog

Аналогично можно задать поиск файлов группы «shadow»:

Find / -group shadow

Также можно искать файлы с определенными разрешениями.

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

Find / -perm 644

При необходимости найти все файлы с разрешениями не ниже указанных нужно ввести:

Find / -perm -644

Этому критерию будут соответствовать все файлы с дополнительными разрешениями. Например, в данном случае ему будет соответствовать файл с разрешениями «744».

Фильтрация по глубине

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

Создадим структуру выполнением следующих команд:

Mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10} touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}} cd ~/test

Для проверки структуры можно воспользоваться командами ls и cd. Разобравшись в организации нужно вернуться в тестовую директорию:

Cd ~/test

Теперь попробуем найти в этой структуре конкретные файлы. Начнем с примера обычного поиска по имени:

Find -name file1

Результатов очень много. Если мы переведем вывод на счётчик, мы увидим, что всего таких файлов 1111:

Find -name file1 | wc -l 1111

В большинстве случаев эти результаты избыточны. Давайте попробуем сузить поиск.

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

Find -maxdepth число -name имя

Чтобы найти «file1» только в директориях «level1» и выше, нужно указать максимальную глубину, равную 2 (1 для директории верхнего уровня и 1 для директорий уровня 1):

Find -maxdepth 2 -name file1

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Если вы часто работаете в командной строке на компьютере или на сервере, где вообще нет графической оболочки, перед вами рано или поздно встанет задача поиска файлов. К счастью, в 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 байт

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

© 2024 ermake.ru -- Про ремонт ПК - Информационный портал