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 , которая предоставляет практически неограниченные возможности для поиска файлов по многим критериям и шаблонам. А с использованием команд (действий) вы можете искать файлы и выполнять над ними любые операции.
- Введите -iname вместо -name , чтобы проигнорировать регистр в веденном имени файла. Команда -name учитывает регистр.
-
Начните поиск в корневом каталоге. Чтобы запустить поиск по всей системе, к запросу добавьте модификатор / . В этом случае команда find будет искать файл во всех каталогах, начиная с корневого.
find / -iname "имя файла"
- Можно начать поиск в определенном каталоге; для этого замените / на путь к каталогу, например, /home/max .
- Можно использовать. вместо / , чтобы искать файл только в текущем каталоге и его подкаталогах.
-
Используйте символ обобщения . * , чтобы найти файлы, имя которого соответствует части запроса. При помощи символа обобщения * можно найти файл, полное имя которого неизвестно, или найти все файлы с определенным расширением.
find /home/max -iname "*.conf"
- Эта команда найдет все файлы с расширением.conf в папке пользователя Max (и ее подпапках).
- Воспользуйтесь этой командой, чтобы найти все файл, имена которых соответствуют части запроса. Например, если на компьютере хранится множество файлов, связанных с WikiHow, найдите все файлы, введя "*wiki*" .
-
Облегчите управление результатами поиска. Если результатов поиска слишком много, среди них сложно найти нужный файл. Используйте символ | , чтобы результаты поиска фильтровались командой less. Это облегчит просмотр и фильтрование результатов поиска.
find /home/max -iname "*.conf" | less
Найдите конкретные элементы. Используйте модификаторы, чтобы в результатах поиска отобразить только определенные элементы. Можно искать обычные файлы (f), каталоги (d), символьные ссылки (l), устройства посимвольного ввода-вывода (с) и блочные устройства (b).
find / -type f -iname "имя файла"
-
Отфильтруйте результаты поиска по размеру файлов. Если на компьютере хранится множество файлов с похожими именами, но размер искомого файла известен, отфильтруйте результаты поиска по размеру файлов.
find / -size +50M -iname "имя файла"
- Эта команда найдет все файлы, размер которых превышает 50 МБ. Используйте модификатор + или - , чтобы указать на увеличение или уменьшение размера. Если модификатора + или - нет, команда найдет файлы, размер которых точно совпадает с указанным размером.
- Результаты поиска можно отфильтровать по байтам (c), килобайтам (k), мегабайтам (M), гигабайтам (G) или блокам по 512 байт (b). Обратите внимание, что приведенные модификаторы учитывают регистр.
-
Используйте логические операторы (булевы операторы), чтобы объединить поисковые фильтры. Можно использовать операторы -and , -or , -not , чтобы объединить различные поисковые запросы в один запрос.
find /travelphotos -type f -size +200k -not -iname "*2015*"
- Эта команда найдет файлы в папке «Travelphotos», размер которых больше 200 кБ и в именах которых нет числа 2015.
Найдите файл по его имени. Такой простейший поиск выполняется при помощи утилиты find . Приведенная ниже команда будет искать файл в текущем каталоге и во всех его подкаталогах.
find -iname "имя файла"
Одна из наиболее распространенных проблем, с которыми сталкиваются пользователи, впервые работающие с 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 байт
Это всего несколько способов применения мощной команды. Больше способов можно найти в руководстве, выполнив команду