- Примеры использования команды find в Linux
- Используем команду find в Linux
- Переход в директорию через консоль
- Поиск файлов в текущей директории
- Поиск файлов в указанном каталоге
- Поиск по имени
- Указание глубины поиска
- Поиск в нескольких директориях
- Отображение скрытых элементов
- Сканирование домашних папок групп и пользователей
- Фильтрация по дате изменений
- Фильтрация по размеру файлов
- Поиск пустых файлов и каталогов
- Использование Find и Locate для поиска файлов на сервере Linux
- Поиск по имени файла
- Поиск по типу файла
- Фильтрация по времени и размеру
- Размер файла
- Поиск в зависимости от времени
- Поиск по владельцу и привилегиям
- Фильтрация файлов по глубине
- Выполнение и объединение команд
- Поиск файлов с помощью команды locate
- Итоги
Примеры использования команды find в Linux
Большинство популярных файловых менеджеров для операционных систем на ядре Linux обладают достаточно функциональным инструментом поиска. Однако не всегда присутствующих в нем параметров хватает пользователю для поиска необходимой информации. В таком случае на помощь приходить стандартная утилита, запускающаяся через «Терминал». Она позволяет путем ввода команды, аргумента и опции запросто отыскать требуемые данные в определенной директории или во всей системе.
Используем команду find в Linux
Команда find предназначена для поиска различных объектов, включая файлы любых форматов и директории различной глубины. От пользователя требуется только ввести саму команду, указать искомое значение и присвоить аргументы, чтобы задать параметры фильтрации. Выполнение процедуры самой утилитой обычно не занимает много времени, но это зависит еще от объема сканируемой информации. Теперь же давайте остановимся на примерах использования find более детально.
Переход в директорию через консоль
Для начала хотелось бы немного отступить от основной команды и затронуть тему дополнительных действий, которые в будущем помогут при управлении из консоли. Дело в том, что утилиты в дистрибутивах Linux не заточены под поиск всех находящихся на компьютере элементов. Все процессы следует запускать только с указанием полного расположения к элементам либо переходить в расположение через команду cd. Сделать это можно достаточно легко:
- Откройте установленный файловый менеджер и перейдите в требуемую папку, где хотите в дальнейшем использовать команду find.
На любом объекте щелкните ПКМ и найдите пункт «Свойства».
Вы увидите его родительскую папку с полным указанием пути. Запомните его, чтобы осуществить переход из «Терминала».
Пропишите там команду cd /home/user/folder , где user — имя домашней папки пользователя, а folder — название требуемой директории.
Если перед тем, как задействовать find, выполнить указанную выше инструкцию, можно не прописывать полный путь к файлу при условии, что он находится в выбранном расположении. Такое решение значительно ускорит ввод команд в дальнейшем.
Поиск файлов в текущей директории
При выполнении find из только что запущенной консоли вы получите результат поиска в своем домашнем каталоге активного пользователя. В другом случае, например, когда осуществляете активацию во время поиска по расположению, в результатах увидите все подпапки и присутствующие в них файлы этого места.
Активация find без аргументов и опций используется тогда, когда надо просмотреть сразу все элементы. Если их название полностью не помещается в строки, стоит изменить команду, чтобы она обрела вид find . -print .
Поиск файлов в указанном каталоге
Команда для отображения файлов через заданный путь практически не отличается от той, которую мы упомянули выше. Вам так же следует прописать find , а после добавить ./folder , если хотите узнать данные о каталоге в текущем расположении, либо же потребуется указать полный путь, путем ввода, например, find ./home/user/downloads/folder , где folder — конечная директория. Каждые элементы будут выведены отдельными строками в порядке их глубины.
Поиск по имени
Иногда появляется надобность отобразить только удовлетворяющие по названию объекты. Тогда пользователю нужно задать отдельную опцию для команды, чтобы она поняла обращение. Строка ввода обретает такой вид: find . -name «word» , где word — ключевое слово для поиска, которое обязательно прописывается в двойных кавычках и с учетом регистра каждого символа.
Если же вы не знаете точный регистр каждой буквы либо же желаете отобразить все подходящие названия, не взяв во внимание этот параметр, введите в консоли find . -iname «word» .
Для фильтрации результатов по ключевому слову к аргументу -name добавляется еще один. Команда обретает вид find . -not -name «word» , где word — слово, которое надо исключить.
Еще порой возникает потребность отыскать объекты по одному ключу, исключив при этом другой. Тогда поочередно присваивается сразу несколько опций поиска и строка ввода получается следующей: find . -name «word» -not name «*.txt» . Обратите внимание, что во втором аргументе в кавычках указано «*.txt», а это значит, что find работает не только с названиями, но и с форматами файлов, которые задаются в таком виде.
Существует и оператор ИЛИ. Он позволяет найти один или сразу несколько подходящих аргументов. Каждый указывается отдельно, с добавлением при этом соответствующих аргументов. В итоге получится примерно следующее: find -name «word» -o -name «word1» .
Указание глубины поиска
Команда find поможет юзеру и тогда, когда ему нужно найти содержимое директорий только до указанной глубины, например, не требуется осуществление анализа внутри третьей подпапки. Для установки подобных ограничений впишите find . -maxdepth N -name «word» , где N — максимальная глубина, а -name «word» — любые последующие аргументы.
Поиск в нескольких директориях
Во многих каталогах присутствует сразу по несколько папок с различным содержимым. Если их там находится большое количество, а поиск нужно осуществить только в определенных, тогда потребуется указать это при вводе команды find ./folder ./folder1 -type f -name «word» , где ./folder ./folder1 — перечень подходящих директорий, а -name «word» — остальные аргументы.
Отображение скрытых элементов
Без указания соответствующего аргумента скрытые объекты, находящиеся в сканируемых каталогах, отображаться в консоли не будут. Потому пользователь вручную прописывает дополнительную опцию, чтобы в итоге команда была такой: find
-type f -name «.*» . Вы получите полный список всех файлов, но если же к некоторым из них нет доступа, перед словом find в строке пропишите sudo , чтобы активировать права суперпользователя.
Сканирование домашних папок групп и пользователей
Каждый пользователь может создавать неограниченное количество каталогов и объектов в разных расположениях. Быстрее всего отыскать ту информацию, которая принадлежит одному из юзеров, с помощью команды find и одного из ее аргументов. В «Терминале» пропишите find . -user username , где username — имя пользователя. После ввода сканирование запустится автоматически.
Примерно такая же схема работает и с группами пользователей. Запуск анализа файлов, связанных с одной из групп, происходит через find /var/www -group groupname . Не забывайте, что объектов может быть большое количество и на вывод их всех иногда уходит много времени.
Фильтрация по дате изменений
Операционная система автоматически сохраняет информацию о дате изменения каждого существующего файла. Команда find позволяет найти их все по указанному параметру. Требуется только прописать sudo find / -mtime N , где N — количество дней назад, когда объект был изменен последний раз. Приставка sudo здесь нужна для того, чтобы получить данные и о файлах, предназначенных только для суперпользователя.
Если же вас интересует просмотр элементов, которые последний раз открывались определенное количество дней назад, тогда строка немного меняет свой вид на sudo find / -atime N .
Фильтрация по размеру файлов
Каждый объект имеет свой размер, соответственно, команда для поиска файлов должна обладать функцией, позволяющей фильтровать их по этому параметру. find умеет это делать, юзеру необходимо только задать сам размер через аргумент. Достаточно ввести find / -size N , где N — объем в байтах, мегабайтах (M) или гигабайтах (G).
Указать можно и диапазон искомых элементов. Тогда в команду вписываются определители и получится, например, такая строка: find / -size +500M -size -1000M . Такой анализ будет отображать файлы более 500 мегабайтов, но менее 1000.
Поиск пустых файлов и каталогов
Некоторые из файлов или папок бывают пустые. Они просто занимают лишнее пространство на диске и иногда мешают нормально взаимодействовать с компьютером. Их следует найти, чтобы определиться с дальнейшими действиями, а в этом поможет find /folder -type f -empty , где /folder — место, где осуществляется сканирование.
Отдельно хотелось бы вкратце отметить другие полезные аргументы, которые время от времени становятся полезными для юзера:
- -mount — ограничение только на текущую файловую систему;
- -type f — отображать только файлы;
- -type d — показывать только директории;
- -nogroup , -nouser — поиск файлов, которые не относятся к никакой группе или не принадлежат пользователю;
- -version — узнать версию используемой утилиты.
На этом ознакомление с командой find законченно. Если желаете детально изучить другие стандартные консольные инструменты операционных систем на ядре Линукс, советуем обратиться к отдельному нашему материалу по следующей ссылке.
После поиска требуемой информации вы можете осуществлять с ними любые другие действия, например, редактирование, удаление или изучение содержимого. В этом помогут другие встроенные утилиты «Терминала». Примеры их использования найдете далее.
Читайте также: Примеры команд grep / cat / ls в Linux
Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Источник
Использование Find и Locate для поиска файлов на сервере Linux
Начиная работу с сервером Linux, пользователи часто сталкиваются с проблемой поиска необходимых файлов.
Данное руководство рассматривает использование соответствующей команды find, которая позволяет искать файлы при помощи различных фильтров и параметров. Кроме того, это руководство вкратце охватывает команду locate, которую можно быть использовать для поиска команд.
Поиск по имени файла
Конечно, поиск файла по имени – самый очевидный способ найти нужный файл.
Для этого используйте:
find -name «query»
Данная команда чувствительна к регистру (то есть, она воспринимает файлы с именем file и File как два разных файла).
Чтобы найти файл по имени без учета регистра, наберите:
find -iname «query»
Чтобы найти файлы, которые не совпадают с определенным шаблоном, нужно инвертировать поиск при помощи флагов -not или метасимвола «!». Обратите внимание, при использовании «!» нужно избегать символов, чтобы оболочка bash не интерпретировала «!» еще до выполнения команды find.
find -not -name «query_to_avoid»
find \! -name «query_to_avoid»
Поиск по типу файла
При помощи параметра «-type» можно указать тип необходимого файла. Это работает так:
find -type type_descriptor query
Вот список общих дескрипторов, при помощи которых можно указать тип файла:
- f: обычный файл;
- d: каталог;
- l: символическая ссылка;
- c: символьные устройства;
- b: блочные устройства.
К примеру, чтобы найти в системе все символьные устройства, нужно выполнить команду:
find / -type c
/dev/parport0
/dev/snd/seq
/dev/snd/timer
/dev/autofs
/dev/cpu/microcode
/dev/vcsa7
/dev/vcs7
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
/dev/vcsa4
. . .
Чтобы найти все файлы, которые заканчиваются на .conf, используйте:
find / -type f -name «*.conf»
/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf
/usr/share/base-files/nsswitch.conf
/usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf
/usr/share/rsyslog/50-default.conf
/usr/share/adduser/adduser.conf
/usr/share/davfs2/davfs2.conf
/usr/share/debconf/debconf.conf
/usr/share/doc/apt-utils/examples/apt-ftparchive.conf
. . .
Фильтрация по времени и размеру
Команда find позволяет фильтровать полученный результат, руководствуясь размером и временем последнего изменения.
Размер файла
Чтобы отфильтровать файлы по размеру, используйте параметр -size.
Также нужно внести суффикс в конце значения, чтобы указать размер:
Чтобы найти файлы размером ровно в 50 байт, наберите:
Чтобы найти файлы, размер которых меньше 50 байт, используйте символ «-» перед значением:
Соответственно, чтобы найти файлы, размер которых превышает 700 мегабайт, используйте перед значением символ +; команда имеет такой вид:
find / -size +700M
Поиск в зависимости от времени
Linux хранит данные о access time, modification time и change time.
- access time: время последнего обращения к файлу (когда файл был прочитан или дописан);
- modification time: время последнего изменения содержимого файла;
- change time: время последнего изменения инода (inode) файла.
Для фильтрации файлов по времени используйте параметры «-atime», «-mtime» и «-ctime» соответственно.
Значение данного параметра указывает, сколько дней назад был изменен файл. Как и в случае с размером файла, можно использовать символы – и +, чтобы получить файлы, измененные меньше чем или больше чем n дней назад.
То есть, чтобы найти файл, содержимое которого было изменено 1 день назад, используйте:
Чтобы вывести файлы, к которым обращались меньше 1 дня назад, используйте:
Чтобы найти файлы, иноды которых были изменены более трех дней назад, введите:
Существуют также сопутствующие параметры, с помощью которых можно указать минуты вместо дней:
Это вернет файлы, содержание которых было изменено минуту назад.
Кроме того, команда find может сравнивать файлы и выводить более новые из них:
find / -newer myfile
Поиск по владельцу и привилегиям
С помощью команды find файлы можно искать по владельцу или правам на файл.
Для того используются параметры –user, –group, и -perm соответственно. Например, чтобы найти файл, принадлежащий пользователю с именем syslog, наберите:
find / -user syslog
Аналогично, чтобы вывести файлы, принадлежащие группе shadow, используйте:
find / -group shadow
Также можно искать файлы с особыми привилегиями.
Чтобы найти файл с определенными правами, используйте:
Данная строка выведет все файлы с такими правами.
Чтобы вывести все файлы, привилегии которых больше или равны указанным, используйте синтаксис:
Это вернет все файлы с дополнительными привилегиями (например, файл с привилегиями 744).
Фильтрация файлов по глубине
Чтобы выполнить примеры данного раздела, создайте во временном каталоге структуру каталогов. Она должна состоять из трех уровней каталогов, с десятью каталогами на первом уровне. Каждый каталог (в том числе тестовый каталог) должен содержать десять файлов и десять подкаталогов.
Чтобы создать такую структуру, выполните следующую команду:
Чтобы ознакомиться с только что созданной структурой и проверить, все ли создано правильно, используйте команды ls и cd. Затем вернитесь в тестовый каталог test:
Данный раздел покажет, как извлекать определенные каталоги из этой структуры. Для начала попробуйте выполнить простой поиск файла по имени:
find -name file1
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .
Эта команда вывела достаточно объемный результат. Передав этот результат в счетчик, можно увидеть, что в итоге выведено 1111 файлов.
find -name file1 | wc -l
1111
Конечно, в большинстве случаев этот вывод слишком объемный и неудобный. Попробуйте сузить его.
Для этого можно использовать параметр –maxdepth, чтобы задать максимальную глубину поиска:
find -maxdepth num -name query
Чтобы найти file1 в каталогах level1 и выше, укажите максимальную глубину 2 (1 для каталога верхнего уровня и 1 для каталогов level1).
find -maxdepth 2 -name file1
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1
Как видите, данный результат имеет гораздо более удобный вид.
Кроме того, можно указать минимальную глубину поиска:
find -mindepth num -name query
Это используется для поиска файлов, которые находятся в конце ветвей каталога:
find -mindepth 4 -name file
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .
Опять же, данный результат будет содержать огромное количество файлов (1000).
Максимальную и минимальную глубину поиска можно комбинировать, чтобы уменьшить диапазон поиска:
find -mindepth 2 -maxdepth 3 -name file
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .
Выполнение и объединение команд
Утилита find позволяет выполнять любую вспомогательную команду на все найденные файлы; для этого используется параметр –exec. Базовый синтаксис выглядит так:
find параметры_поиска -exec команда_и_параметры <> \;
Символы <> используются в качестве заполнителя для найденных файлов. Символы \; используются для того, чтобы find могла определить, где заканчивается команда.
Для примера можно найти файлы с привилегиями 644 (как в предыдущем разделе) и изменить их привилегии на 664:
/test
find . -perm 644 -exec chmod 664 <> \;
Затем можно сменить привилегии каталога:
find . -perm 755 -exec chmod 700 <> \;
Чтобы связать несколько результатов, используйте команды -and или -or. Команда –and предполагается, если она опущена.
find . -name file1 -or -name file9
Поиск файлов с помощью команды locate
Команда locate является альтернативой для find. Данная команда, как правило, работает быстрее и может легко производить поиск по всей файловой системы.
Установить эту команду можно при помощи с apt-get:
sudo apt-get update
sudo apt-get install mlocate
Но почему команда locate быстрее, чем find? Дело в том, что locate зависит от базы данных файлов в файловой системе.
Как правило, cron-скрипт обновляет эту базу данных раз в день; но ее можно обновить и вручную. Запустите эту команду:
Запомните: БД нужно регулярно обновлять, чтобы она содержала актуальные данные; в противном случае найти недавно полученные или созданные файлы будет невозможно.
Чтобы найти файлы с помощью команды locate, просто используйте следующий синтаксис:
Полученный результат также можно фильтровать.
К примеру, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы выводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно использовать флаг –b (чтоб искать только basename, базовое имя файла):
Чтобы команда locate возвращала только файлы, которые все еще существуют в файловой системе (то есть, файлы, которые не были удалены в промежутке между последним запуском updated и текущим вызовом locate), используйте флаг –е:
Чтобы просмотреть статистику, занесенную командой locate в каталог, используйте опцию –S:
locate -S
Database /var/lib/mlocate/mlocate.db:
3,315 directories
37,228 files
1,504,439 bytes in file names
594,851 bytes used to store database
Итоги
Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Каждая из этих утилит имеет свои преимущества.
Несмотря на то, что команды find и locate сами по себе очень мощны, их действие можно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте фильтровать их результаты при помощи команд wc, sort и grep.
Источник