Что такое locate linux

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, ведь в противном случае информация о них будет выводиться при последующих операциях поиска.

Читайте также:  Atom cherry trail windows

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, после чего разобраться с дополнительными параметрами, описанными на странице руководства .

Читайте также:  Windows zip setup exe

Не стесняйтесь оставлять комментарии при возникновении любых сомнений или вопросов.

Источник

Поиск файлов в 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 не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.

Читайте также:  Не могу отформатировать установочную флешку windows

Установите 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 в вашем терминале.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии.

Источник

Оцените статью