- 8 примеров использования команды locate в Linux
- 1. Использование команды locate в Linux
- 2. Принцип работы locate или почему поиск осуществляется так быстро
- 3. Вывод информации о количестве найденных файлов и директорий
- 4. Вывод информации лишь о существующих в данный момент файлах
- 5. Игнорирование регистра символов
- 6. Использование символа ASCII NUL для разделения имен файлов
- 7. Вывод информации о базе данных locate
- 8. Поиск файлов с четко заданным именем
- Заключение
- Поиск файлов в Linux при помощи команды locate
- База данных locate mlocate.db
- Использование locate
- Заключение
- Команда locate в Linux
- Установка locate (команда locate не найдена)
- Установите locate на Ubuntu и Debian
- Установить locate на CentOS и Fedora
- Как locate работу
- Как использовать команду locate
- Выводы
8 примеров использования команды locate в Linux
Оригинал: 8 Linux Locate Command Examples for Beginners
Автор: Himanshu Arora
Дата публикации: 20 апреля 2017 г.
Перевод: А.Панин
Дата перевода: 25 апреля 2017 г.
Хотя find, без сомнения, и является одной из наиболее популярных, а также мощных утилит с интерфейсом командной строки для поиска файлов в Linux, она не является настолько быстрой, чтобы мгновенно выводить результаты поиска. Если вам нужно найти файл в системе с помощью ее интерфейса командной строки, причем скорость поиска имеет решающее значение, вас может заинтересовать другая утилита под названием locate .
В данной статье мы будем обсуждать методику использования команды locate, рассматривая простые для понимания примеры. Помните о том, что все инструкции и примеры, приведенные в данной статье, были протестированы в системе Ubuntu 16.04 LTS с утилитой locate версии 0.26.
1. Использование команды locate в Linux
Команда locate крайне проста в использовании. Все, что вам нужно сделать — это передать ей имя файла, который необходимо найти.
Например, если вам нужно найти все файлы в именах которых содержится строка «dir2» , вы можете использовать locate следующим образом:
Примечание: команда locate dir2 (без звездочек) также вполне применима, ведь locate автоматически заменяет переданное имя файла (такое, как NAME ), на соответствующий шаблон (в данном случае, *NAME* ).
2. Принцип работы locate или почему поиск осуществляется так быстро
Причина, по которой утилита locate работает настолько быстро, заключается в том, что она не исследует файловую систему в поисках файла или директории с заданным именем. Вместо этого она использует информацию из базы данных (собранную утилитой updatedb) в процессе поиска элементов файловой системы с заданными именами и генерирует вывод на основе этой информации.
Хотя данный подход и имеет массу преимуществ, он не лишен недостатков. Основной его недостаток заключается в том, что после создания каждого нового файла или новой директории для корректной работы утилиты приходится обновлять информацию в базе данных. В противном случае утилита не сможет найти файлы и директории, созданные после последнего обновления информации в базе данных.
Например, если я попытаюсь найти файлы с именами, содержащими строку tosearch в директории Downloads , утилита find сгенерирует следующий вывод:
Но при поиске файлов с теми же именами с помощью утилиты locate не будет выведено каких-либо результатов:
Это означает, что информация в базе данных locate не была обновлена после создания интересующего меня файла. Ну что же, давайте обновим информацию в базе данных с помощью команды updatedb . Это делается следующим образом:
Теперь при исполнении приведенной выше команды locate выводится информация о найденных файлах:
Аналогично, после удаления файла или директории вам придется убедиться в наличии актуальной информации в базу данных locate, ведь в противном случае информация о них будет выводиться при последующих операциях поиска.
3. Вывод информации о количестве найденных файлов и директорий
Как вы уже знаете, утилита locate выводит имена найденных файлов вместе с их полными или абсолютными путями. Но при желании вы можете сообщить ей о том, что вместо вывода данной информации нужно выводить лишь информацию о количестве найденных файлов и директорий. Для этой цели предназначен параметр -c .
4. Вывод информации лишь о существующих в данный момент файлах
В данной статье уже говорилось о том, что при удалении файла с диска до обновления базы данных его имя будет выводиться в результатах поиска. Однако, в подобных случаях вы можете не обновлять базу данных и получать корректные результаты поиска благодаря поддержке параметра -e .
Например, рассмотрим следующую ситуацию: я умышленно удалил файл filetosearch.txt с диска. Этот факт был подтвержден утилитой find, которая не смогла найти его:
Но в случае осуществления аналогичной операции поиска с помощью утилиты locate информация о файле все еще выводилась:
И мы без труда можем догадаться, почему это происходит — база данных locate не была обновлена после удаления файла. Однако, в случае использования параметра -e проблема будет решена:
На странице руководства locate данный параметр описан следующим образом: «Выводить информацию лишь о тех файлах, которые существуют в момент запуска утилиты».
5. Игнорирование регистра символов
По умолчанию утилита locate осуществляет поиск файлов с учетом регистра их имен. Но вы можете сообщить утилите о необходимости игнорирования различий в регистре символов имен файлов с помощью параметра -i .
Например, в моей системе имеются два файла с именами newfiletosearch.txt и NEWILETOSEARCH.txt . Очевидно, что имена файлов отличаются лишь регистром символов. Если вы используете утилиту locate для поиска файлов по шаблону *tosearch* , она выведет лишь вариант имени файла в нижнем регистре:
Но в случае использования параметра -i утилита будет игнорировать регистр символов имен файлов, поэтому оба имени появятся в выводе:
6. Использование символа ASCII NUL для разделения имен файлов
По умолчанию имена файлов, выводимые утилитой locate, разделяются с помощью символа перехода на новую строку ( \n ). Но при необходимости вы можете изменить этот символ, а точнее, использовать вместо него символ ASCII NUL . Для этой цели предназначен параметр -0 .
Например, я могу выполнить команду из предыдущего раздела, добавив в нее параметр -0 :
Несложно заметить, что в выводе больше не используется символ перехода на новую строку — он был заменен на символ ASCII NUL .
7. Вывод информации о базе данных locate
Если вам необходима информация об используемой утилитой locate базе данных, а также статистические данные, касающиеся этой базы данных, вы можете воспользоваться параметром -S :
8. Поиск файлов с четко заданным именем
По умолчанию при поиске файла с помощью locate переданное имя, такое, как NAME , будет автоматически преобразовываться в в шаблон поиска *NAME* . Например, при поиске файла с именем testfile будут выведены все имена файлов, соответствующие шаблону поиска *testfile* :
Но что делать тогда, когда нужно искать лишь файлы с именем testfile ? Ну, вы этом случае вы можете воспользоваться регулярным выражением, которое активируется с помощью параметра -r . Исходя из этого, вы можете найти все файлы с именами testfile с помощью регулярного выражения аналогичным образом:
Если вы не знакомы с регулярными выражениями, рекомендую обратиться к данному материалу .
Заключение
Утилита locate поддерживает большое число дополнительных параметров, но тех из них, что описаны в статье, должно хватить для составления хотя бы поверхностного представления о назначении утилиты и успешного начала работы с ней. Рекомендую в первую очередь испытать самостоятельно все описанные параметры утилиты в своей системе Linux, после чего разобраться с дополнительными параметрами, описанными на странице руководства .
Не стесняйтесь оставлять комментарии при возникновении любых сомнений или вопросов.
Источник
Поиск файлов в Linux при помощи команды locate
Только что я понял, что я ни разу не писал об одной из моих любимых программ, используемых в командной оболочке Linux: locate .
Эта программа принимает в качестве параметра имя файла (или часть имени) и моментально выводит список путей до этого файла в файловой системе; альтернативой этой программе является find , но разница между ними заключается в том, что find производит поиск по файловой системе и требуется значительный период времени для получения результата, а отличие в работе этих программ состоит в том, что locate использует собственную базу данных для хранения имен файлов в то время, как find исследует директории в поисках заданного параметром командной строки имени файла.
База данных locate mlocate.db
Для получения результатов, соответствующих действительности, вам необходимо поддерживать в обновленном состоянии базу данных со списком имен файлов. Операционная система может быть настроена таким образом, что обновление будет выполняться автоматически как задача cron . Например, в моей операционной системе Ubuntu 12.04 эта задача описана в файле /etc/cron.daily/mlocate и выполняется ежедневно.
Если в вашем дистрибутиве обновление по умолчанию отключено, можно обновить базу данных вручную при помощи команды sudo updatedb (требуются права пользователя root); это очень удобно в том случае, когда вы только что установили пакеты с программным обеспечением и хотите найти какой-либо файл, так как время, уходящее на обновление базы данных при помощи updatedb , всегда меньше времени на поиск файлов по всей файловой системе при помощи find .
Ниже приведено содержимое файла конфигурации в моей системе:
Использование locate
Теперь, когда мы настроили и обновили базу данных, мы можем начать использовать команду locate (в рамках обычной пользовательской учетной записи или учетной записи пользователя root — на ваше усмотрение); ниже приведено несколько примеров использования:
Это очень полезная команда в том случае, когда вам нужно внести изменения в файл конфигурации php, но вы не можете вспомнить, где расположен файл php.ini.
Скрытие сообщений об ошибках
В результате будут выведены первые 10 файлов с расширением .php.
Подсчет количества результатов поиска
Независимый от регистра поиск
Информация о базе данных
Заключение
Эта команда помогала мне множество раз в различных ситуациях, поэтому она установлена на каждом сервере или настольном компьютере, который я использую. Я не стал включать раздел об установке программы в эту короткую статью по той причине, что locate доступна в любом дистрибутиве Linux, обычно в пакете с названием mlocate , поэтому вы можете использовать ваш менеджер пакетов для ее установки, и еще я уверен, что вы полюбите ее.
Источник
Команда locate в Linux
Одна из самых распространенных операций при работе в Linux — это поиск файлов и каталогов. В системах Linux есть несколько команд, которые позволяют искать файлы, причем поиск и определение местоположения являются наиболее часто используемыми.
Команда locate — это самый быстрый и простой способ поиска файлов и каталогов по их именам.
В этой статье мы объясним, как использовать команду locate .
Установка locate (команда locate не найдена)
В зависимости от дистрибутива и того, как была подготовлена система, пакет locate может быть предварительно установлен или не установлен в вашей системе Linux.
Чтобы проверить, установлена ли утилита locate , откройте терминал, введите locate и нажмите Enter . Если пакет установлен, система отобразит locate: no pattern to search for specified . В противном случае вы увидите что-то вроде locate command not found .
Если locate не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.
Установите locate на Ubuntu и Debian
Установить locate на CentOS и Fedora
Как locate работу
Команда locate выполняет поиск заданного шаблона в файле базы данных, созданном командой updatedb . Найденные результаты отображаются на экране по одному в строке.
Во время установки пакета mlocate создается задание cron, которое запускает команду updatedb каждые 24 часа. Это гарантирует регулярное обновление базы данных. Для получения дополнительной информации о задании cron проверьте файл /etc/cron.daily/mlocate .
Базу данных можно обновить вручную, запустив updatedb от имени пользователя root или пользователя с привилегиями sudo:
Процесс обновления займет некоторое время, в зависимости от количества файлов и каталогов, а также скорости вашей системы.
Файлы, созданные после обновления базы данных, не будут отображаться в результатах поиска.
По сравнению с более мощной командой find которая выполняет поиск в файловой системе, команда locate работает намного быстрее, но не имеет многих функций и может выполнять поиск только по имени файла.
Как использовать команду locate
Синтаксис команды locate следующий:
В самой простой форме, при использовании без каких-либо параметров, команда locate выводит на печать абсолютный путь ко всем файлам и каталогам, которые соответствуют шаблону поиска и для которых пользователь имеет разрешение на чтение.
Например, чтобы найти файл с именем .bashrc , введите:
Вывод будет включать имена всех файлов, содержащих в своих именах строку .bashrc :
Файл /root/.bashrc не будет показан, потому что мы /root/.bashrc команду как обычный пользователь, у которого нет прав доступа к каталогу /root .
Если список результатов длинный, для лучшей читаемости вы можете направить вывод в команду less :
Команда locate также принимает шаблоны, содержащие символы подстановки, такие как подстановочный знак * . Если в шаблоне нет дополнительных символов, команда ищет *PATTERN* . Поэтому в предыдущем примере отображались все файлы, содержащие в своем имени шаблон поиска.
Подстановочный знак — это символ, используемый для обозначения нуля, одного или нескольких символов. Например, чтобы найти все файлы .md в системе, вы должны ввести:
Чтобы ограничить результаты поиска, используйте параметр -n после которого укажите количество результатов, которые вы хотите отобразить. Следующая команда .py поиск всех файлов .py и отобразит только 10 результатов:
По умолчанию locate выполняет поиск с учетом регистра. Параметр -i ( —ignore-case ) указывает locate игнорировать регистр и запускать поиск без —ignore-case регистра.
Чтобы отобразить количество всех совпадающих записей, используйте параметр -c ( —count ). Следующая команда вернет количество всех файлов, содержащих .bashrc в своих именах:
По умолчанию locate не проверяет, существуют ли еще найденные файлы в файловой системе. Если вы удалили файл после последнего обновления базы данных, и если файл соответствует шаблону поиска, он будет включен в результаты поиска.
Чтобы отображать только имена файлов, которые существуют на момент запуска locate , используйте параметр -e ( —existing ). Например, следующее будет возвращать только существующие файлы .json :
Если вам нужно выполнить более сложный поиск, используйте параметр -r ( —regexp ), который позволяет вам искать, используя базовое регулярное выражение вместо шаблонов. Этот параметр можно указывать несколько раз.
Например, чтобы найти все файлы .mp4 и .avi в вашей системе и игнорировать регистр, вы должны запустить:
Выводы
Команда locate ищет в файловой системе файлы и каталоги, имена которых соответствуют заданному шаблону. Синтаксис команды легко запомнить, а результаты отображаются практически мгновенно.
Для получения дополнительной информации обо всех доступных параметрах команды locate введите команду man locate в вашем терминале.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
Источник