Команда Linux Locate для начинающих (8 примеров)

Команда locate в Linux – это мощная утилита для быстрого поиска файлов и каталогов по их именам. Она использует предварительно созданную базу данных, которая обычно периодически обновляется программой updatedb команда для выполнения быстрого поиска, что делает его значительно быстрее других поисковых инструментов, таких как find. Когда пользователь вводит команду locate, сопровождаемую шаблоном поиска, она сканирует эту базу данных, а не саму файловую систему, предоставляя результаты практически мгновенно. Это делает locate особенно полезным для системных администраторов и пользователей, которым нужно быстро найти файлы без необходимости сканирования файловой системы. Однако точность работы locate зависит от частоты обновления базы данных, поскольку она может не отражать последние изменения в файловой системе до следующего обновления.

В этом руководстве мы расскажем о команде locate на понятных примерах. Обратите внимание, что все приведенные здесь инструкции/примеры были протестированы на Ubuntu 24.04.

1. Установите команду locate

Команда locate не поставляется предустановленной в Ubuntu и Debian Linux. Вы можете установить ее с помощью этой команды:

sudo apt install locate

Установить команду locate

Locate выполняет поиск файлов на основе предварительно скомпилированной базы данных имен файлов, что делает его гораздо быстрее, чем, например, команда find при последующих поисках. Но прежде чем мы сможем использовать эту команду, нам нужно будет создать и обновить базу данных файлов. Выполните следующую команду, чтобы создать базу данных locate:

sudo updatedb

Теперь мы готовы начать использовать locate.

2. Как использовать команду locate в Linux

Команда locate очень проста в использовании. Вам просто нужно передать имя файла, который вы хотите найти.

locate [filename]

Например, если нужно найти все имена файлов, в которых есть строка ‘dir2’, то это можно сделать с помощью команды locate следующим образом:

Как использовать команду locate в Linux

Примечание: Команда ‘locate dir2’ (без звездочек) также подойдет, поскольку locate неявно заменяет переданное имя (скажем, NAME) на *NAME*.

3. Как работает команда locate, или почему она такая быстрая

Команда locate работает так быстро, потому что она не читает файловую систему для поиска имени файла или каталога. Она обращается к базе данных (подготовленной командой updatedb), чтобы найти то, что ищет пользователь, и на основе этого поиска выдает результат.

Несмотря на то что это хороший подход, у него есть свои недостатки. Главный из них заключается в том, что после создания каждого нового файла или каталога в системе необходимо обновлять базу данных инструмента, чтобы он работал корректно. В противном случае команда не сможет найти файлы/каталоги, созданные после последнего обновления базы данных.

Например, если я попытаюсь найти файлы с именами, содержащими строку ‘tosearch’, в каталоге ‘Downloads’ моей системы, то команда find команда выдает один результат:

Почему команда locate работает так быстро

Но когда я пытаюсь выполнить тот же поиск с помощью команды locate, он не дает никакого результата.

вывод команды locate

Это означает, что база данных, в которой ищет locate, не была обновлена после создания файла в системе. Поэтому давайте обновим базу данных, что можно сделать с помощью команды updatedb команду. Вот как это делается:

sudo updatedb

И теперь, когда я снова запускаю ту же команду locate, она показывает файлы в выводе:

команда locate updatedb

Аналогично, после удаления файла или каталога необходимо убедиться, что база данных locate была обновлена, так как в противном случае команда будет продолжать показывать этот файл в результатах поиска.

4. Как заставить locate выводить на экран число или количество совпадающих записей

Как мы видели, команда locate выводит на экран имена найденных файлов и их полные или абсолютные пути. Но если вы хотите, вы можете использовать инструмент для подавления всей этой информации и просто вывести число или количество совпадающих записей. Это можно сделать с помощью команды -c опция командной строки.

make locate выводит количество или счетчик совпадающих записей

5. Как заставить locate печатать только те записи, которые соответствуют существующим файлам

Как мы уже обсуждали ранее в этой статье, если файл удален из системы, то пока вы не обновите базу данных locate, команда будет продолжать показывать это имя файла в выводе. Однако в данном конкретном случае можно пропустить обновление базы данных и все равно получить корректные результаты на выходе, используя команду -e опция командной строки.

Например, я удалил файл ‘filetosearch.txt’ из своей системы. Это подтвердила команда find, которая больше не могла найти этот файл:

используйте команду find вместо locate

Но когда я выполнил ту же операцию с помощью locate, файл все равно отобразился в выводе:

использовать команду locate

И мы знаем, почему – потому что база данных команды locate не была обновлена после удаления файла. Однако, используя команду -e :

заставить locate печатать только те записи, которые соответствуют существующим файлам

Вот что говорится об этой опции на странице locate man: “Печатать только те записи, которые относятся к файлам, существующим на момент запуска locate”.

6. Как заставить locate игнорировать различия регистров

По умолчанию операция поиска, выполняемая командой locate, чувствительна к регистру. Но вы можете заставить инструмент игнорировать различия регистра, используя параметр -i опция командной строки.

Например, у меня в системе есть два файла с именами ‘newfiletosearch.txt’ и ‘NEWFILETOSEARCH.txt’. Как видите, имена файлов одинаковые, просто регистры у них разные. Если вы спросите найти для поиска, скажем, “*tosearch*”, то в выводе будет показано только строчное имя:

заставить locate игнорировать различия регистра

Но использование параметра командной строки -i заставляет команду игнорировать регистр, и в выводе появляются оба имени файлов:

поиск без учета регистра

7. Как разделить выходные записи с помощью ASCII NUL

По умолчанию выходные записи, которые выдает команда locate, отделяются друг от друга символом новой строки (\n). Но если вы хотите, вы можете изменить разделитель и вместо новой строки использовать ASCII NUL. Это можно сделать с помощью команды -0 опция командной строки.

Например, я выполнил ту же команду, которую мы использовали в последнем разделе, но добавил параметр командной строки -0:

разделять записи вывода с помощью ASCII NUL

Таким образом, вы видите, что разделителя новой строки больше нет – он заменен на NUL.

8. Как просмотреть информацию о базе данных locate

Если вы хотите узнать, какую базу данных использует locate, а также другую статистику о базе данных, воспользуйтесь командой -S опция командной строки.

просмотр информации о базе данных locate

9. Как искать точное имя файла с помощью locate

По умолчанию, когда вы ищете имя файла с помощью locate, переданное вами имя – скажем, NAME – неявно заменяется на *NAME*. Например, если я ищу имя файла ‘testfile’, то все имена, соответствующие *testfile*, будут выведены на экран:

поиск точного имени файла с помощью locate

Но что делать, если требуется найти файлы с именами, точно совпадающими с ‘testfile’? В этом случае вам придется использовать регулярные выражения, которые можно включить с помощью функции -r опция командной строки. Итак, вот как вы можете искать только ‘testfile’ с помощью регулярных выражений:

locate -r /testfile$

поиск точного имени файла с помощью locate - вывод

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *