Поиск папок 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, которую мы будем использовать в консольном режиме. Давайте рассмотрим возможности поиска файлов в системе посредством консоли. Для поиска файлов в системе 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. Навыки грамотного поиска файлов значительно экономит ваше личное время, а как известно время бесценно. Успехов в труде!
Привет всему сообществу Хабра.
Это мой первый пост и, надеюсь, не последний. Поэтому неизбежны всяческие недочеты, баги и некоторая водянистость текста, так что прошу строго не судить:)
К написанию этого поста меня сподвиг топик «Консоль для новичка.» , где ISVir поднял острую, на мой взгляд, тему - как доступным языком рассказать новичкам о консоли, не отпугнув их мнимой сверх-сложностью.
Не собираюсь отбирать у ISVir паритет, лишь расскажу о практическом использовании нескольких самых основных утилит «на каждый день», без которых работа в консоли для меня невозможна.
Итак, что мы имеем:
find - поиск файлов. позволяет искать файлы, каталоги, симлинки и другие файловые объекты. find Позволяет задать множество опций поиска таких как:
- поиск по маске (в имени)
- контроль глубины вложенности поиска
- поиск определенных типов файлов(каталог, симлинки, сокеты)
- поиск по времени создания/модификации файла
- можно задать размер (от и до в диапазоне) файла
- выполнение действий с каждым найденным файлом
Итак, с места в карьер - поиск всех файлов в каталоге /etc/, измененных за последние сутки:
$find /etc/ -type f -mtime -1
разберем, что мы написали:
Первым параметром всегда указывается начальный каталог для поиска.
опция -type
с параметром f
говорит find
, что нужно искать только обыкновенные файлы.
опция -mtime
с параметром -1
указывает find
, что нужно найти файлы, изменившиеся за последние сутки.
"-"
перед 1
задает верхнюю границу диапазона, т.е. «все, что изменилось за последние 24 часа»
Если бы мы указали "+"
перед 1
, то find
нашел бы всех файлы, изменившиеся от 01.01.1970 до вчерашнего дня (более суток назад)
так же можно указать точную дату поставив число без модификатора.
Выполнение действий с найденными файлами.
опция -exec
принимает строку с командой, которая будет выполнятся для каждого найденного файла
параметр передающийся команде обозначается через {}
строка должна заканчиваться символами " \; "
Рассмотрим пример:
* найти в каталоге /tmp все файлы, изменившиеся за последний месяц и скопировать их в каталог
/tmp/backup/
$find /tmp -type f -mtime -30 -exec cp {} /tmp/backup \;
* удалить все каталоги(рекурсивно) с именем logs, изменившиеся за последний день в каталоге
/var/www
$find /var/www -type d -mtime 0 -name logs -exec sudo rm -fr {} \;
параметр d в опции -type указывает на поиск только каталогов
опция -name задает поиск по имени.
здесь стоит добавить, что удалять таким образом файлы не оптимально(медленно).
для удаления у find есть встроенная опция -delete, которая отрабатывает на порядок быстрее.
Рассмотрим утилиту awk
.
awk
- это язык программирования, предназначенный для обработки файлов. Цель его
разработки - облегчить постановку и решение многих задач, связанных с переработкой текстовой информации. По сути, awk
- это утилита, доступная из консоли.
Я по понятным причинам не буду здесь рассматривать приемы написания awk кода - расскажу только про один важный для нас прием.
Во первых, awk может получать данные из STDIN: $echo «test»|awk ...
во вторых, awk эффективен при написании однострочников в консоли, т.к. выполняет код, данные ему как параметр:
awk разделяет входной поток на поля и помещает эти поля в переменные вида $1,$2,..$N
по умолчанию, разделитель полей - пробел, но с помощью опции -F"_разделитель_" это можно переопределить:
$head -4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh$cat /etc/passwd|awk -F":" "{print $1}"
root
daemon
binНапример, у нас в каталоге /var/www есть несколько сайтов. для каждого сайта существует каталог logs, куда пишутся логи апача (для этого сайта).и вот мы хотим узнать суммарный обьем этих логов, а так же найти все логи больше 100Mb.
1.поиск больших логов:$find /var/www -type f -name «access.log*» -size +100M
/var/www/site1/logs/access.log
/var/www/site2/logs/access.log.1.gz2.подсчитаем суммарный обьем логов:
Find /var/www/ -type f -name «access.log*» -exec du -k {} \;|awk "{s+=$1}END{print s}"
5071604
так, не пугаться - щас все обьясню:)Find ищет все файлы по маске (access.log*) и для каждого запускает команду du .
команда du печатает размер файла. опция -k делает вывод в килобайтах.
дальше запускается процессор awk , просто суммирует первое поле строк (числа) в переменную s и выводит значение переменной на экран.Еще примерчик: найдем в системе все файлы и каталоги принадлежищие юзеру test1 и подсчитаем суммарный обьем.
#find / -user test1 -exec du -sm {} \;|awk "{s+=$1}END{print s}"
т.е. здесь с помощью опции -user find ищет файлы, принадлежашие юзеру test1 и для каждого файла/каталога подсчитываем его размер (команда du)
дальше через конвеер эти данные принимает awk и, как мы делали выше, считает их сумму в Kb.Ок. думаю, на сегодня хватит.
пост вышел довольно большим, видимо с непривычки:)Сразу хочу сказать - я не ставил цель просто рассказать об использовании find и awk, а привести примеры именно практического применения в реальных ситуациях.
если статья понравится - продолжу писать в данном направлении.Спасибо, что уделили время.
Возможно, вам известна такая проблема как: Не можете найти файл, а он где то в компьютере. Тогда удобна команда 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, искать файлы по дате!
Всем спасибо, пока!
Бывает, что вы знаете, что файл или каталог существует, но не знаете, как его найти. Существует несколько команд, которые помогут вам в этом: find , locate и which .
4.10.1. Команда find
Команда find имеет следующий формат:
Find путь образец_для_поиска
Если вы не укажете путь, find начнет поиск заданного образца с текущего каталога и продолжит его по всем имеющимся в нем подкаталогам.
Команда find имеет множество опций, ознакомиться с которыми можно, прочитав man-страницу (введите в командной строке man find). Чаще всего используется опция -name , которая задает поиск всех файлов и каталогов, содержащих в названии определенное сочетание букв.
Find . -name tes
Эта команда задает поиск в текущем каталоге всех файлов, содержащих в названии «tes ».
4.10.2. Команда locate
С помощью этой команды вы можете увидеть все файлы или каталоги, названия которых содержат искомый образец. Например, для поиска файла, содержащего в названии слово dog , введите в командной строке:
Locate dog
Команда locate использует базу данных для определения местонахождения файлов или каталогов, содержащих в названии слово dog . Результаты поиска могут включать файл с названием dog , файл с названием bulldog.txt , каталог с названием /dogs/ и так далее. Чтобы узнать больше о команде locate , обратитесь к ее man-странице (введите в командной строке man locate).
При условии, что база данных обновлена, команда locate осуществляет поиск очень быстро. Обновление базы данных команды locate происходит каждую ночь при помощи службы cron .
cron - это небольшая программа, которая запускается в фоновом режиме и выполняет различные задачи (такие как обновление базы данных команды locate) через определенные промежутки времени. Для доступа к руководству cron наберите в командной строке man cron .
cron периодически обновляет базу данных slocate , которая используется для определения местонахождения файлов или каталогов. Переключение между операционными системами и отключение машины в конце дня препятствует автоматическому обновлению базы данных при помощи cron .
Чтобы обновить базу данных вручную, войдите в систему как root (набрав в командной строке su - и введя пароль root"а) и наберите в командной строке updatedb .
Через некоторое время база данных slocate , используемая командой locate , обновится.
Закончив работу, для выполнения которой необходимо быть root"ом, наберите в командной строке exit - вы вернетесь в вашу сессию.