Menu

Примеры использования команды Locate для начинающих

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

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

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

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

locate [filename] 

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

-$ locate *dir2*
/home/himanshu/downloads/glibc-2.21/dirent/tst-fdopendir2.c
/home/homanshu/downloads/glibc-2.21/manual/examples/dir2.c
 

Примечание: команда 'locate dir2' (без звездочки) будет действовать так же, как locate implicitly,то есть заменять имя пропуска (говорите имя) с *имя*.

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

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

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

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

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

-$ find /home/himanshu/downloads/ -name “*tosearch*”
/home/himanshu/downloads/filetosearch.txt 

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

-$ locate ''*tosearch*''
-$ 

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

 -$ sudo updatedb
 -$ locate ‘’*tosearch*’’
/home/himanshu/Downloads/filetosearch.txt
-$

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

3. Как сделать так,чтобы команда locate показывала количество совпадающих записей на выходе

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

-$ locate –c’’*tosearch*’’
1
-$

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

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

Например, я удалил файл 'filetosearch.txt из моей системы. Это было подтверждено командой locate, которая не смогла выполнить поиск файла:

-$ find /home/himanshu/Dowloads/-name ‘’*tosearch*’’ 

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

 >-$  locate *tosearch*/home/himanshu/Dowloads/ filetosearch.txt 

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

 >-$ locate –e ‘’*tosearch*’’
-$  

Вот что говорится об этой опции на странице руководства: "только операции печати, которые ссылаются на файлы, существующие на момент поиска это выполнить".

5. Как сделать так,чтобы locate игнорировал различия регистра

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

Например, у меня есть два файла в моей системе 'newfiletosearch.txt и NEWFILETOSEARCH.txt'. Так что, как видите, имена одинаковые. Если вы запустите locate для поиска, скажем, "*tosearch*", тогда он будет показывать только строчные названия:

-$ locate’’*tosearch*’’
/home/himanshu/Downloads/newfiletosearch.txt
-$

Но через опция-I командной строки команда игнорирует, и имена обоих файлов в результате производятся :

-$locate –i’’*tosearch*’’
/home/himanshu/Downloads/NEWFILETOSEARCH.txt
/home/himanshu/Downloads/newfiletosearch.txt
-$

6. Как отделить записи с нулевым кодом ASCII

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

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

-$ locate –i – 0’’*tosearch*’’
/home/himnshu/Downloas/ NEWFILETOSEARCH.txt/home/himnshu/Downloads/ newfiletosearch.txt 

Так что вы можете увидеть, что строки разделитель уже не было - он был заменен нуль.

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

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

-$ locate -$
Database/var/lib/mlocate/mlocate.db:
46,122 directories
4,57,970 files
2,69,56,478 bytes in file names
1,13,67,408 bytes used to store database
-$ 

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

По умолчанию, когда ищите файл с помощью команды locate, то имя - это неявно заменяется на *имя*. Например, если я ищу файл по имени 'официальный', то все имена, совпадающие с *вопросами и ответами* выпускаются в один выход:

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

- $ locate -r /testfile$
/home/himashu/downloads/testfile
-$

Заключение

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

В случае любого сомнения или вопроса, пожалуйста, не стесняйтесь, напишите в комментарии.

Авторизуйтесь, чтобы получить возможность оставлять комментарии
Go to top