Vaikka find on epäilemättä yksi suosituimmista sekä tehokkaimmista komentorivin apuohjelmista tiedostojen etsimiseen Linuxissa, se ei ole tarpeeksi nopea tilanteisiin, joissa tarvitset välittömiä tuloksia. Jos haluat etsiä tiedostoa järjestelmästäsi komentorivin kautta ja nopeus on tärkein prioriteetti, voit käyttää toista komentoa: Locate.
Tässä opetusohjelmassa käsittelemme locate-komentoa helposti ymmärrettävien esimerkkien avulla. Huomaa, että kaikki tässä mainitut ohjeet/esimerkit on testattu Ubuntu 16.04 LTS:ssä, ja käyttämämme locate-versio on 0.26.
How to use locate command in Linux
Locate-komentoa on erittäin helppo käyttää. Sinun tarvitsee vain antaa sille tiedostonimi, jota haluat etsiä.
locate
Jos esimerkiksi haluan etsiä kaikki tiedostonimet, joissa on merkkijono ’dir2’, voin tehdä sen locate-komennolla seuraavalla tavalla:
Huomautus: Komento ’locate dir2’ (ilman tähtiä) kelpaa niin ikään, sillä locate-komento korvaa implisiittisesti antamasi nimen (vaikkapa NIMI) *NIMI*:llä.
Miten locate-komento toimii, tai miksi se on niin nopea
Syy locate-komennon nopeuteen on se, että se ei lue tiedostojärjestelmästä haetun tiedoston tai hakemiston nimeä. Se itse asiassa viittaa tietokantaan (joka on valmisteltu komennolla updatedb) löytääkseen sen, mitä käyttäjä etsii, ja tuottaa tulosteensa tuon haun perusteella.
Vaikka tämä on hyvä lähestymistapa, sillä on myös omat haittapuolensa. Suurin ongelma on se, että jokaisen uuden tiedoston tai hakemiston luomisen jälkeen järjestelmään on päivitettävä työkalun tietokanta, jotta se toimisi oikein. Muuten komento ei pysty löytämään tiedostoja/hakemistoja, jotka on luotu viimeisimmän tietokantapäivityksen jälkeen.
Jos esimerkiksi yritän etsiä tiedostoja, joiden nimissä on merkkijono ’tosearch’, järjestelmäni ’Downloads’-hakemistosta, find-komento tuottaa tulosteessa yhden tuloksen:
Mutta kun yritän suorittaa saman haun locate-komennolla, se ei tuota tulostetta.
Tämä tarkoittaa, että tietokanta, josta locate hakee, ei ole päivittynyt sen jälkeen, kun tiedosto luotiin järjestelmään. Päivitetään siis tietokanta, mikä voidaan tehdä komennolla updatedb. Näin se tehdään:
sudo updatedb
Ja nyt kun suoritan saman locate-komennon uudestaan, se näyttää tiedostot tulosteessa:
Samoin tiedoston tai hakemiston poistamisen jälkeen on varmistettava, että locate-tietokanta on päivitetty, sillä muutoin komento näyttää tiedoston edelleen tulosteessa, kun sitä haetaan.
Miten saat locate-komennon tulostamaan tulosteeseen vastaavien merkintöjen määrän tai lukumäärän
Kuten olemme nähneet, locate-komento tuottaa tulosteeseen vastaavien tiedostojen nimet sekä niiden täydelliset tai absoluuttiset polut. Voit kuitenkin halutessasi saada työkalun tukahduttamaan kaikki nämä tiedot ja tulostamaan sen sijaan vain vastaavien merkintöjen määrän tai lukumäärän. Tämä voidaan tehdä käyttämällä komentorivioptiota -c.
Miten pakotat locaten tulostamaan vain ne merkinnät, jotka vastaavat olemassa olevia tiedostoja
Kuten jo aiemmin tässä artikkelissa käsiteltiin, jos tiedosto poistetaan järjestelmästä, komento näyttää tuotoksessa edelleen kyseisen tiedoston nimen, kunnes päivität locate-tietokannan uudelleen. Tässä erityistapauksessa voit kuitenkin jättää tietokannan päivittämisen väliin ja saada silti oikeat tulokset tulosteeseen käyttämällä komentorivioptiota -e.
Poistin esimerkiksi tiedoston ’filetosearch.txt’ järjestelmästä. Tämän vahvisti find-komento, joka ei enää pystynyt etsimään tiedostoa:
Mutta kun suoritin saman operaation locate-komennolla, se näytti tiedoston edelleen tulosteessa:
Ja tiedämme miksi – koska locate-komennon tietokantaa ei päivitetty tiedoston poistamisen jälkeen. Option -e käyttäminen teki kuitenkin tepposet:
Tässä locate man-sivulla kerrotaan tästä vaihtoehdosta: ”Tulosta vain sellaiset merkinnät, jotka viittaavat tiedostoihin, jotka ovat olemassa locate-komennon suoritushetkellä.”
Miten saat locate-komennon jättämään huomiotta isojen ja pienten kirjainten väliset erot
Oletusarvoisesti locate-komennon suorittama hakuoperaatio ottaa huomioon isojen ja pienten kirjainten väliset erot. Voit kuitenkin pakottaa työkalun jättämään huomiotta isojen ja pienten kirjainten väliset erot käyttämällä komentorivioptiota -i.
Esimerkiksi minulla on järjestelmässäni kaksi tiedostoa, joiden nimet ovat ’newfiletosearch.txt’ ja ’NEWFILETOSEARCH.txt’. Kuten näet, tiedostonimet ovat siis samat, vain niiden tapaukset ovat erilaiset. Jos pyydät locatea etsimään vaikkapa ”*tosearch*”, se näyttää tulosteessa vain pienellä alkukirjaimella kirjoitetun nimen:
Mutta komentorivioptiota -i käyttämällä komento pakottaa komennon jättämään huomioimatta ison- ja pienaakkoset, ja tulosteessa näkyvät molemmat tiedostonimet:
Tulostemerkintöjen erottaminen ASCII NUL -merkillä
Oletusarvoisesti locate-komennon tuottamat tulostemerkinnät erotetaan toisistaan newline-merkillä (\n). Voit kuitenkin halutessasi muuttaa erotinta ja käyttää rivinvaihdon sijasta ASCII NUL -merkkiä. Tämä voidaan tehdä käyttämällä -0-komentorivioptiota.
Olen esimerkiksi suorittanut saman komennon, jota käytimme viimeisessä osiossa edellä, mutta lisännyt -0-komentorivioptiota:
Siten näet, että newline-erotin ei ole enää siellä – se on korvattu NUL:lla.
Katsele tietoja locate-tietokannasta
Jos haluat tietää, mitä tietokantaa locate käyttää, sekä muita tietokannan tilastoja, käytä komentorivillä olevaa -S-optiota.
Miten etsit tarkkaa tiedostonimeä locate-käskyllä
Oletusarvoisesti, kun etsit tiedostonimeä locate-käskyllä, antamasi nimi – vaikkapa NAME – korvataan epäsuorasti *NAME*:lla. Jos esimerkiksi etsin tiedostonimeä ’testitiedosto’, kaikki nimet, jotka vastaavat *testitiedosto*, tuotetaan tulosteessa:
Mutta entä jos vaatimuksena on etsiä tiedostoja, joiden nimet täsmälleen vastaavat ’testitiedostoa’? No, tässä tapauksessa sinun on käytettävä säännöllisiä lausekkeita, jotka voidaan ottaa käyttöön komentorivin -r-optiolla. Näin voit siis etsiä vain ’testfile’-nimistä tiedostoa käyttämällä säännöllisiä lausekkeita:
locate -r /testfile$
Jos säännölliset lausekkeet ovat sinulle uusia, suuntaa tänne.
Loppupäätelmä
Locate tarjoaa paljon muitakin optioita, mutta tässä käsittelemiemme pitäisi riittää antamaan sinulle peruskäsityksen komentorivin apuohjelmasta ja auttamaan sinut alkuun. Suosittelemme, että kokeilet ensin kaikkia tässä kuvattuja vaihtoehtoja Linux-koneellasi ja siirryt sitten muihin, jotka löydät työkalun man-sivulta.