Команда Locate

Thank you for reading this post, don't forget to subscribe!

Одна из наи­бо­лее рас­про­стра­нен­ных опе­ра­ций при рабо­те в Linux – поиск фай­лов и ката­ло­гов. В систе­мах Linux есть несколь­ко команд, кото­рые поз­во­ля­ют вам искать фай­лы, find и locate наи­бо­лее часто исполь­зу­е­мые команды.

Коман­да locate – самый быст­рый и про­стой спо­соб поис­ка фай­лов и ката­ло­гов по их именам.

В этой ста­тье мы объ­яс­ним, как исполь­зо­вать коман­ду locate в Linux.

 

В зави­си­мо­сти от дис­три­бу­ти­ва и от того, как была предо­став­ле­на ​​систе­ма, пакет locate может быть или не быть пред­ва­ри­тель­но уста­нов­лен в вашей систе­ме Linux.

Что­бы про­ве­рить, уста­нов­ле­на ​​ли ути­ли­та locate в вашей систе­ме, открой­те тер­ми­нал, вве­ди­те locate и нажми­те Enter. Если пакет уста­нов­лен, систе­ма отоб­ра­зит locate: no pattern to search for specified, в про­тив­ном слу­чае вы уви­ди­те что-то вро­де locate command not found.

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

 

 

Синтаксис и основные опции

Син­так­сис коман­ды locate следующий:

Ути­ли­та про­из­во­дит поиск фай­лов, име­на кото­рых сов­па­да­ют с ука­зан­ным в пара­мет­ре PATTERN шаб­ло­ном и выво­дит най­ден­ные соот­вет­ствия. Опции, задан­ные пара­мет­ром OPTION, управ­ля­ют спе­ци­фич­ным пове­де­ни­ем ути­ли­ты locate.

Опция Зна­че­ние
-S, —statistics Выво­дит ста­ти­сти­ку по исполь­зу­е­мой ути­ли­той locate БД.
-i, —ignore-case Про­во­дит поиск без учё­та реги­стра сим­во­лов в шаб­лоне поиска.
-0, —null Отклю­ча­ет фор­ма­ти­ро­ва­ние (пере­вод стро­ки для каж­до­го сов­па­де­ния) в выводе.
-r, —regexp Зада­ние шаб­ло­на поис­ка с помо­щью регу­ляр­но­го выражения.
-c, —count Выво­дит толь­ко коли­че­ство сов­па­де­ний без подроб­ной информации.
-e, —existing Выво­дит резуль­та­ты толь­ко для суще­ству­ю­щих в ФС фай­лов и каталогов.

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

Во вре­мя уста­нов­ки паке­та mlocate созда­ет­ся зада­ние cron, кото­рое запус­ка­ет коман­ду updatedb каж­дые 24 часа. Это гаран­ти­ру­ет, что база дан­ных регу­ляр­но обнов­ля­ет­ся. Для полу­че­ния допол­ни­тель­ной инфор­ма­ции о рабо­те cron про­верь­те файл /etc/cron.daily/mlocate.

Базу дан­ных мож­но обно­вить вруч­ную, выпол­нив коман­ду updatedb от име­ни поль­зо­ва­те­ля root или поль­зо­ва­те­ля с при­ви­ле­ги­я­ми sudo:

 

Про­цесс обнов­ле­ния зай­мет неко­то­рое вре­мя, в зави­си­мо­сти от коли­че­ства фай­лов и ката­ло­гов и ско­ро­сти вашей системы.

Фай­лы, создан­ные после обнов­ле­ния базы дан­ных, не будут отоб­ра­жать­ся в резуль­та­тах поиска.

По срав­не­нию с более мощ­ной коман­дой find, кото­рая выпол­ня­ет поиск в фай­ло­вой систе­ме, locate рабо­та­ет намно­го быст­рее, но не име­ет мно­гих функ­ций и может выпол­нять поиск толь­ко по име­ни файла.

Син­так­сис коман­ды locate следующий:

 

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

Напри­мер, что­бы най­ти файл с име­нем .bashrc, введите:

 

Вывод будет вклю­чать име­на всех фай­лов, содер­жа­щих стро­ку .bashrc в их именах:

 

Файл /root/.bashrc не будет пока­зан, так как мы запу­сти­ли коман­ду как обыч­ный поль­зо­ва­тель, кото­рый не име­ет пра­во досту­па к ката­ло­гу /root.

Если спи­сок резуль­та­тов длин­ный, для луч­шей чита­е­мо­сти вы може­те напра­вить вывод в коман­ду less:

 

Коман­да locate так­же при­ни­ма­ет шаб­ло­ны, содер­жа­щие сим­во­лы-заглуш­ки, такие как под­ста­но­воч­ный знак *. Когда шаб­лон не содер­жит сим­во­лов-гло­бу­сов *PATTERN*, кото­рые ищет коман­да, поэто­му в преды­ду­щем при­ме­ре отоб­ра­жа­лись все фай­лы, содер­жа­щие шаб­лон поис­ка в сво­их именах.

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

 

Что­бы огра­ни­чить резуль­та­ты поис­ка, исполь­зуй­те -nпа­ра­метр, за кото­рым сле­ду­ет коли­че­ство резуль­та­тов, кото­рые вы хоти­те отоб­ра­зить. Напри­мер, сле­ду­ю­щая коман­да будет искать все фай­лы .py и отоб­ра­жать толь­ко 10 результатов:

 

По умол­ча­нию locate выпол­ня­ет поиск с уче­том реги­стра. Опция -i( –ignore-case) ука­зы­ва­ет locate на игно­ри­ро­ва­ние реги­стра и запуск поис­ка без уче­та регистра.

 

 

Что­бы отоб­ра­зить коли­че­ство всех сов­па­да­ю­щих запи­сей, исполь­зуй­те пара­метр -c( –count). Сле­ду­ю­щая коман­да вер­нет номер всех фай­лов, содер­жа­щих­ся .bashrc в их именах:

 

 

По умол­ча­нию locate не про­ве­ря­ет, суще­ству­ют ли най­ден­ные фай­лы в фай­ло­вой систе­ме. Если вы уда­ли­ли файл после послед­не­го обнов­ле­ния базы дан­ных, если файл соот­вет­ству­ет шаб­ло­ну поис­ка, он будет вклю­чен в резуль­та­ты поиска.

Что­бы отоб­ра­зить толь­ко име­на фай­лов, кото­рые суще­ству­ют в дан­ный момент, в locate исполь­зуй­те пара­метр -e( –existing). Напри­мер, сле­ду­ю­щее вер­нет толь­ко суще­ству­ю­щие фай­лы .json:

 

Если вам нуж­но выпол­нить более слож­ный поиск, вы може­те исполь­зо­вать опцию -r( –regexp), кото­рая поз­во­ля­ет выпол­нять поиск, исполь­зуя базо­вое регу­ляр­ное выра­же­ние вме­сто шаб­ло­нов. Эта опция может быть ука­за­на несколь­ко раз.
Напри­мер, для поис­ка всех фай­лов .mp4 и .avi в вашей систе­ме и игно­ри­ро­ва­ния реги­стра вы долж­ны выполнить:

 

Команда locate в примерах

Для того, что­бы исклю­чить выда­чу ути­ли­той locate недо­сто­вер­ных резуль­та­тов, необ­хо­ди­мо сле­дить за тем, что­бы БД нахо­ди­лась в акту­аль­ном состо­я­нии. Это поз­во­ля­ет команда:

Теперь мож­но рас­смот­реть основ­ные при­ё­мы исполь­зо­ва­ния ути­ли­ты locate для самых рас­про­стра­нён­ных случаев.

Получение информации о состоянии БД

Когда нуж­но узнать, какая БД исполь­зу­ет­ся для индек­си­ро­ва­ния фай­лов, исполь­зу­е­мая ути­ли­той locate, а так­же неко­то­рые её ста­ти­сти­че­ские пока­за­те­ли, сле­ду­ет выпол­нить команду:

Вывод информации о количестве найденных совпадений

По-умол­ча­нию ути­ли­та locate выво­дит най­ден­ные фай­лы вме­сте с их абсо­лют­ны­ми путя­ми в ФС. Но в неко­то­рых ситу­а­ци­ях необ­хо­ди­мо про­сто узнать, как часто в систе­ме встре­ча­ет­ся тот или иной файл, без лиш­ней инфор­ма­ции. Мож­но про­сто выве­сти дан­ные о коли­че­стве тре­бу­е­мых фай­лов, кото­рые име­ют­ся в систе­ме. Для это­го слу­жит опция «-c»:

Запись “*kde*” озна­ча­ет, что будут искать­ся все фай­лы, в име­ни кото­рых встре­ча­ет­ся под­стро­ка «kde».

Вывод только актуальных результатов

Посколь­ку досто­вер­ность резуль­та­тов поис­ка ути­ли­ты locate зави­сит от акту­аль­но­сти БД, то необ­хо­ди­мо эту БД свое­вре­мен­но обнов­лять. Одна­ко, есть воз­мож­ность это­го не делать, а вос­поль­зо­вать­ся опци­ей «-e», кото­рая поз­во­ля­ет про­из­во­дить поиск, све­ряя резуль­та­ты с реаль­ной струк­ту­рой ФС. Но в дан­ном слу­чае по понят­ным при­чи­нам ско­рость поис­ка будет снижена:

Вывод результатов с точными совпадениями

До это­го в выше­при­ве­дён­ных при­ме­рах рас­смат­ри­ва­лись «нечёт­кие» сов­па­де­ния. Но ути­ли­та locate поз­во­ля­ет про­из­во­дить поиск, учи­ты­ва­ю­щий точ­но задан­ные запро­сы. Напри­мер нуж­но най­ти ката­ло­ги и фай­лы, имя кото­рых точ­но соот­вет­ству­ет «notebook»:

В дан­ном слу­чае опция -r акти­ви­ру­ет исполь­зо­ва­ние регу­ляр­но­го выра­же­ния для зада­ния шаб­ло­на поис­ка. Само выра­же­ние заклю­ча­ет­ся меж­ду сим­во­ла­ми ‘\’ и ‘$’.

Другие полезные функции

Сре­ди про­чих воз­мож­но­стей ути­ли­ты locate наи­бо­лее полез­ной явля­ет­ся игно­ри­ро­ва­ние реги­стра сим­во­лов в поис­ко­вом шаб­лоне. По-умол­ча­нию ути­ли­той locate поиск про­из­во­дит­ся с учё­том реги­стра сим­во­лов. Но если в систе­ме име­ют­ся два фай­ла с име­на­ми locate.txt и LOCATE.TXT, то для того, что­бы исклю­чить зави­си­мость поис­ка от реги­стра сим­во­лов, нуж­но исполь­зо­вать опцию «-i»:

Дру­гой воз­мож­но­стью ути­ли­ты locate явля­ет­ся заме­на сим­во­ла пере­во­да стро­ки при выво­де резуль­та­тов поис­ка. По-умол­ча­нию, каж­дое сов­па­де­ние отоб­ра­жа­ет­ся в новой стро­ке. Если необ­хо­ди­мо, что­бы вывод был нефор­ма­ти­ро­ван­ным, то мож­но исполь­зо­вать опцию «-0». Она поз­во­ля­ет выво­дить резуль­та­ты в самом «чистом» виде, без исполь­зо­ва­ния пере­во­дов строк:

Коман­да locate ищет в фай­ло­вой систе­ме фай­лы и ката­ло­ги, чье имя соот­вет­ству­ет задан­но­му шаб­ло­ну. Син­так­сис коман­ды лег­ко запом­нить, а резуль­та­ты отоб­ра­жа­ют­ся прак­ти­че­ски мгновенно.

Для полу­че­ния допол­ни­тель­ной инфор­ма­ции обо всех доступ­ных опци­ях коман­ды locate, набе­ри­те man locate в вашем терминале.