Find синтаксис. «примеры эффективного использования GNU утилит в 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 - вы вернетесь в вашу сессию.
Возможно, вам известна такая проблема как: Не можете найти файл, а он где то в компьютере. Тогда удобна команда 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, искать файлы по дате!
Всем спасибо, пока!
- Введите -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 "имя файла"
Проблема с поиском нужных файлов или папок была, есть, и будет актуальна всегда. Люди постоянно забывают, куда именно они сохранили нужный файл Хрень.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.
Команда find - это одна из самых полезных и важных команд на Linux.
Она по умолчанию установлена и доступна практически на всех версиях Linux. В Linux все хранится в виде файлов, и очевидно стоит знать, как эти файлы искать.
С помощью команды find можно искать интересующие файлы по ряду поисковых критериев. Критерии можно указывать как вместе, так и по отдельности, а затем уже совершать действия с полученном результатом. В этом руководстве мы собираемся описать команду find с помощью примеров использования.
1)Выведите списки всех файлов текущей директории и ее подкаталогов
Для того чтобы вывести списки всех файлов текущей директории и ее подкаталогов, мы можем использовать:
В качестве альтернативы, мы можем также использовать ‘find . ’ , которая выдаст вам тот же результат.
2)Найдите все файлы и директории в вашей текущей рабочей директории
Если нужно найти только директории, то можно использовать:
$ find . -type d
Чтобы найти только файлы, а не директории:
$ find . -type f
3)Выведите список всех файлов определенной директории
Для того чтобы найти файлы из определенной директории надо ввести:
$ find /root
This command will look for all the files in /root directory.
4)Найдите файл по имени в директории
Для поиска файла по имени в определенной директории введите:
$ find /root -name "linuxtechi.txt"
Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением.txt:
$ find /root -name "*.txt"
5)Найдите файл во множестве директорий
Для поиска файлов во множестве директорий введите:
$ find /root /etc -name "linuxtechi.txt"
With this command, we can look for linuxtechi.txt file in /root & /etc directories.
С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc .
6)Найдите файл по имени без учета регистра
Ищите файлы без учета регистра с помощью -iname:
$ find /root -iname "Linuxtechi.txt"
В результате вы получите все файлы с названием linuxtechi.txt. При этом файлов может быть несколько, так как linuxtechi.txt будет равняться LINUXTECHI.txt .
7)Найдите все типы файлов отличные от упомянутого
Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:
$ find /root -not -name "*.txt"
8)Найдите файлы по множеству признаков
Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями.txt и.html:
$ find . -regex ".*\.\(txt\|html\)$"
9)Найдите файлы с использованием условия OR
Так же мы можем совмещать несколько поисковых критериев, что приведет к поиску файлов на основе удовлетворения одному из условий. Делается это с помощью оператора OR:
$ find -name "*.txt" -o -name "linuxtechi*"
10)Поиск файлов на основе разрешений
Чтобы найти файлы с определенным доступом используйте -perm:
$ find /root -type f -perm 0777
11)Найдите все скрытые файлы
Для поиска скрытых файлов в директории введите:
$ find ~ -type f name ".*"
12)Найдите все файлы со SGID
Для поиска файлов с битами SGID исполните команду:
$ find . -perm /g=s
13) Найдите все файлы со SUID
Для поиска файлов с битами SUID используем:
$ find . -perm /u=s
14)Найдите все исполняемые файлы
Для поиска только исполняемых файлов введите:
$ find . -perm /a=x
15)Найдите файлы с доступом только для чтения
К тому же, с помощью команды find можно найти файлы, доступные только для чтения:
$ find /root -perm /u=r
16)Найдите все файлы пользователя
Для поиска файлов определенного пользователя надо использовать следующую команду:
$ find . -user linuxtechi
17)Найдите все файлы группы
Для поиска файлов определенной группы используем:
$ find . -group apache
18)Найдите все файлы определенного размера
Если мы хотим искать, размер которого нам известен, тогда можно использовать -size:
$ find / -size -2M
19)Найдите все файлы в диапазоне размеров
Если мы ищем файл, размер которого нам не известен, но зато мы знаем примерный его размер, или нам просто сделать выборку файлов в определенном диапазоне размеров, то можно ввести:
$ find / -size +2M -size -5M
Можно использовать команд find при поиске файлов тяжелее, чем, например, 50 mb:
$ find / -size +50M
20)Найдите файлы, измененные N дней назад
For example, we want to locate all the files that have been modified 8 days ago. We can accomplish that using ‘-mtime‘ option in find command
Например, мы можем обнаружить найти все файлы отредактированные 8 дней назад. Делается это с помощью команды -mtime:
$ find / -mtime 8
21)Найдите файлы, в которые заходили N дней назад
Можно найти файлы, в которые входили 8 дней назад с помощью -atime:
$ find / -atime 8
22)Найдите все пустые файлы и директории
Для нахождения всех пустых файлов в системе введем:
$ find / -type f -empty
А чтобы вывести их директории:
$ find ~/ -type d -empty
23)Найдите самый большой и самый маленький файлы
Для вывода списка самых больших или самых маленьких файлов используем find в связке с sort , и, если нам понадобится вывести 3 "самых-самых", то используем еще head .
Для вывода трех файлов из текущей директории введем:
$ find . -type f -exec ls -s {} \; | sort -n -r | head -3
Схожим образом мы можем вывести самые маленькие файлы текущей директории:
$ find . -type f -exec ls -s {} \; | sort -n | head -3
24)Найдите все файлы с определенным доступом и сменить его на 644 (или еще на что-нибудь)
Команда find может предложить продвинутые варианты использования. К примеру, мы может изменить все разрешения 644 определенных файлов на 777. Для этого исполняем:
$ find / -type f -perm 644 -print -exec chmod 777 {} \;
25)Найдите все файлы, подходящие по определенным критериям, и удалите их
Рано или поздно может понадобиться удалить те или иные файлы. Если так произошло, то вводим:
$ find / -type f -name "linuxtechi.*" -exec rm -f {} \;
Вышеуказанные примеры отлично демонстрируют возможности команды find , которая способна существенно упростить задачу поиска файлов.