Tiedostojen etsiminen Linuxissa Find- ja Locate-komentojen avulla

author
8 minutes, 6 seconds Read

Esittely

Yksi ongelma, johon käyttäjät törmäävät, kun he ovat ensimmäistä kertaa tekemisissä Linux-koneen kanssa, on se, miten he löytävät etsimänsä tiedostot.

Tämässä oppaassa käsitellään, miten käyttää osuvasti nimettyä find-komentoa. Sen avulla voit etsiä tiedostoja VPS:ltäsi käyttämällä erilaisia suodattimia ja parametreja. Käsitellään myös lyhyesti komentoa locate, jota voidaan käyttää tiedostojen etsimiseen eri tavalla.

Haku nimellä

Näyttävin tapa etsiä tiedostoja on etsiä nimellä.

Tiedoston etsiminen nimellä tapahtuu kirjoittamalla:

  • find -name "query"

Tämä on suur- ja pienaakkoset huomioiva komento, mikä tarkoittaa, että haku osoitteella find on erilainen kuin haku osoitteella File.

Jos haluat etsiä tiedoston nimen perusteella, mutta jättää ison ja pienen kirjaimen huomiotta, kirjoita:

  • find -iname "query"

Jos haluat löytää kaikki tiedostot, jotka eivät noudata tiettyä mallia, voit kääntää haun käyttämällä -not tai !. Jos käytät !, sinun on vältettävä merkki, jotta bash ei yritä tulkita sitä ennen kuin find voi toimia:

  • find -not -name "query_to_avoid"

Or

  • find \! -name "query_to_avoid"

Haku tyypin mukaan

Parametrilla -type voit määrittää, minkä tyyppisiä tiedostoja haluat etsiä. Se toimii näin:

  • find -type type_descriptor query

Joitakin yleisimpiä kuvaajia, joita voit käyttää tiedoston tyypin määrittämiseen, ovat tässä:

  • f: tavallinen tiedosto

  • d: hakemisto

  • l: symbolinen linkki

  • c: merkkilaitteet

  • b: lohkolaitteet

Jos haluaisimme esimerkiksi löytää kaikki järjestelmässämme olevat merkkilaitteet, voisimme antaa tämän komennon:

  • find / -type c
Output
/dev/parport0/dev/snd/seq/dev/snd/timer/dev/autofs/dev/cpu/microcode/dev/vcsa7/dev/vcs7/dev/vcsa6/dev/vcs6/dev/vcsa5/dev/vcs5/dev/vcsa4. . .

Voimme etsiä kaikkia tiedostoja, joiden pääte on .conf, näin:

  • find / -type f -name "*.conf"
Output
/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf/usr/share/base-files/nsswitch.conf/usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf/usr/share/rsyslog/50-default.conf/usr/share/adduser/adduser.conf/usr/share/davfs2/davfs2.conf/usr/share/debconf/debconf.conf/usr/share/doc/apt-utils/examples/apt-ftparchive.conf. . .

Suodatus ajan ja koon mukaan

Find antaa sinulle useita tapoja suodattaa hakutuloksia koon ja ajan mukaan.

Koko

Voit suodattaa koon mukaan -size-parametrin avulla.

Lisäämme arvomme loppuun jälkiliitteen, joka määrittää, miten laskemme. Nämä ovat joitakin suosittuja vaihtoehtoja:

  • c: tavuja

  • k: Kilotavut

  • M: Megatavut

  • G: Gigatavut

  • b: 512 tavun lohkot

Jos haluat löytää kaikki tiedostot, joiden koko on tasan 50 tavua, kirjoita:

  • find / -size 50c

Jos haluat löytää kaikki tiedostot, joiden koko on vähemmän kuin 50 tavua, voimme sen sijaan käyttää tätä muotoa:

  • find / -size -50c

Hakemaan kaikki tiedostot, jotka ovat yli 700 megatavua, voimme käyttää tätä komentoa:

  • find / -size +700M

Aika

Linux tallentaa aikatietoja käyttöajoista, muokkausajoista ja muutosajoista.

  • Access Time: Viimeisin kerta, kun tiedostoa luettiin tai siihen kirjoitettiin.

  • Muutosaika: Viimeksi kun tiedoston sisältöä muutettiin.

  • Change Time: Viimeisin kerta, kun tiedoston inode-metatietoja muutettiin.

Voidaan käyttää näitä parametrien -atime, -mtime ja -ctime kanssa. Näissä voidaan käyttää plus- ja miinussymboleja määrittämään suurempi kuin tai pienempi kuin, kuten teimme size-parametrin kanssa.

Tämän parametrin arvo määrittää, kuinka monta päivää sitten halutaan tehdä hakuja.

Haluaksemme tiedostoja, joiden muutosajankohta on päivä sitten, kirjoita:

  • find / -mtime 1

Jos haluamme tiedostoja, joita on käytetty alle päivä sitten, voimme kirjoittaa:

  • find / -atime -1

Haluaksemme tiedostoja, joiden metatietoja on viimeksi muutettu yli 3 päivää sitten, kirjoita:

  • find / -ctime +3

On myös joitakin liitännäisparametreja, joilla voimme määrittää minuutit päivien sijasta:

  • find / -mmin -1

Tällöin saamme tiedostot, joiden metatietoja on muutettu järjestelmään viimeisen minuutin aikana.

Find voi myös tehdä vertailuja viitetiedostoon ja palauttaa ne, jotka ovat uudempia:

  • find / -newer myfile

Haku omistajan ja käyttöoikeuksien mukaan

Tiedostoja voi etsiä myös tiedoston omistajan tai ryhmän omistajan mukaan.

Tehdään tämä käyttämällä parametreja -user ja -group vastaavasti. Etsi tiedosto, jonka omistaa ”syslog”-käyttäjä, kirjoittamalla:

  • find / -user syslog

Voidaan vastaavasti määrittää ”shadow”-ryhmän omistamat tiedostot kirjoittamalla:

  • find / -group shadow

Voidaan myös etsiä tiedostoja, joilla on tietyt käyttöoikeudet.

Jos haluamme etsiä tarkan joukon käyttöoikeuksia, käytämme tätä muotoa:

  • find / -perm 644

Tämä vastaa tiedostoja, joilla on täsmälleen määritetyt käyttöoikeudet.

Jos haluamme määritellä mitä tahansa, jolla on vähintään nämä käyttöoikeudet, voit käyttää tätä muotoa:

  • find / -perm -644

Tämä vastaa kaikkia tiedostoja, joilla on lisäoikeuksia. Tässä tapauksessa sovitettaisiin tiedosto, jonka oikeudet ovat ”744”.

Suodatus syvyyden mukaan

Tässä osiossa luomme hakemistorakenteen väliaikaiseen hakemistoon. Se sisältää kolme tasoa hakemistoja, ja ensimmäisellä tasolla on kymmenen hakemistoa. Jokainen hakemisto (mukaan lukien väliaikainen hakemisto) sisältää kymmenen tiedostoa ja kymmenen alihakemistoa.

Tehdään tämä rakenne antamalla seuraavat komennot:

  • cd
  • mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}
  • touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}
  • cd ~/test

Katsele rohkeasti hakemistorakenteita ls:llä ja cd:llä saadaksesi käsityksen siitä, miten asiat on järjestetty. Kun olet valmis, palaa testihakemistoon:

  • cd ~/test

Palataan siihen, miten tästä rakenteesta voidaan palauttaa tiettyjä tiedostoja. Kokeillaan ensin vertailun vuoksi esimerkkiä pelkällä tavallisella nimihaulla:

  • find -name file1
Output
./level1dir7/level2dir8/level3dir9/file1./level1dir7/level2dir8/level3dir3/file1./level1dir7/level2dir8/level3dir4/file1./level1dir7/level2dir8/level3dir1/file1./level1dir7/level2dir8/level3dir8/file1./level1dir7/level2dir8/level3dir7/file1./level1dir7/level2dir8/level3dir2/file1./level1dir7/level2dir8/level3dir6/file1./level1dir7/level2dir8/level3dir5/file1./level1dir7/level2dir8/file1. . .

Tuloksia on paljon. Jos putkitamme tuloksen laskuriin, näemme, että tuloksia on yhteensä 1111:

  • find -name file1 | wc -l
Output
1111

Tämä on luultavasti liian paljon tuloksia, jotta niistä olisi hyötyä useimmissa tilanteissa. Yritetään rajata sitä:

Voit määrittää haun maksimisyvyyden ylimmän tason hakemiston alta:

  • find -maxdepth num -name query

Jos haluat löytää ”file1”:n vain ”level1”-hakemistoista ja sen yläpuolelta, voit määrittää maksimisyvyydeksi 2 (1 ylimmän tason hakemistolle ja 1 level1-hakemistoille):

  • find -maxdepth 2 -name file1
Output
./level1dir7/file1./level1dir1/file1./level1dir3/file1./level1dir8/file1./level1dir6/file1./file1./level1dir2/file1./level1dir9/file1./level1dir4/file1./level1dir5/file1./level1dir10/file1

Tämä on paljon helpommin hallittava lista.

Voit myös määrittää minimihakemiston, jos tiedät, että kaikki tiedostot ovat olemassa tietyn pisteen jälkeen nykyisen hakemiston alla:

  • find -mindepth num -name query

Voidaan käyttää tätä löytämään vain hakemistohaarojen lopussa olevat tiedostot:

  • find -mindepth 4 -name file
Output
./level1dir7/level2dir8/level3dir9/file1./level1dir7/level2dir8/level3dir3/file1./level1dir7/level2dir8/level3dir4/file1./level1dir7/level2dir8/level3dir1/file1./level1dir7/level2dir8/level3dir8/file1./level1dir7/level2dir8/level3dir7/file1./level1dir7/level2dir8/level3dir2/file1. . .

Jälleen, haarautuvan hakemistorakenteemme vuoksi tämä palauttaa suuren määrän tuloksia (1000).

Voit yhdistää min- ja max-syvyysparametrit keskittyäksesi kapeaan alueeseen:

  • find -mindepth 2 -maxdepth 3 -name file
Output
./level1dir7/level2dir8/file1./level1dir7/level2dir5/file1./level1dir7/level2dir7/file1./level1dir7/level2dir2/file1./level1dir7/level2dir10/file1./level1dir7/level2dir6/file1./level1dir7/level2dir3/file1./level1dir7/level2dir4/file1./level1dir7/file1. . .

Hakukomentojen suorittaminen ja yhdistäminen

Voit suorittaa mielivaltaisen apukomennon kaikkeen, mihin find osuu, käyttämällä -exec-parametria. Tätä kutsutaan näin:

  • find find_parameters -exec command_and_params {} \;

Parametria {} käytetään sijoitusmerkkinä tiedostoille, joihin find vastaa. \; käytetään, jotta find tietää, mihin komento päättyy.

Voisimme esimerkiksi etsiä edellisessä kappaleessa olevat tiedostot, joilla oli 644-oikeudet, ja muuttaa ne 664-oikeuksiksi:

  • cd ~/test
  • find . -type f -perm 644 -exec chmod 664 {} \;

Voisimme sitten muuttaa hakemistojen oikeuksia näin:

  • find . -type d -perm 755 -exec chmod 700 {} \;

Jos haluat ketjuttaa eri tuloksia toisiinsa, voit käyttää komentoja -and tai -or. -and oletetaan, jos se jätetään pois.

  • find . -name file1 -or -name file9

Find Files Using Locate

Vaihtoehto find:n käytölle on komento locate. Tämä komento on usein nopeampi ja pystyy etsimään koko tiedostojärjestelmästä helposti.

Komennon voi asentaa Debianissa tai Ubuntussa komennolla apt:

  • sudo apt install mlocate

CentOS:ssa käytä sen sijaan komentoa dnf:

  • sudo dnf install mlocate

Syy siihen, miksi komento locate on nopeampi kuin find, on se, että se luottaa tietokantaan tiedostojärjestelmässä olevista tiedostoista.

Tietokanta päivitetään yleensä kerran päivässä cron-skriptillä, mutta voit päivittää sen manuaalisesti kirjoittamalla:

  • sudo updatedb

Aja tämä komento nyt. Muista, että tietokannan on aina oltava ajan tasalla, jos haluat löytää hiljattain hankittuja tai luotuja tiedostoja.

Tiedostojen etsimiseen locate-komennolla voit käyttää tätä syntaksia:

  • locate query

Voit suodattaa tulostetta joillakin tavoilla.

Voit esimerkiksi palauttaa vain tiedostot, jotka sisältävät itse kyselyn, sen sijaan, että palauttaisit jokaisen tiedoston, joka sisältää kyselyn siihen johtavissa hakemistoissa, voit käyttää -b vain ”pohjanimen” etsimiseen:

  • locate -b query

Voidaksesi saada locate:n palauttamaan vain sellaiset tulokset, jotka ovat edelleen olemassa tiedostojärjestelmässä (joita ei ole poistettu viimeisimmän updatedb-kutsun ja tämänhetkisen locate-kutsun välisenä aikana), voit käyttää merkkiä -e:

  • locate -e query

Käyttääksesi tilastoja locaten luetteloimista tiedoista, käytä -S-vaihtoehtoa:

  • locate -S
Output
Database /var/lib/mlocate/mlocate.db:3,315 directories37,228 files1,504,439 bytes in file names594,851 bytes used to store database

Conclusion

Kumpaakin find- ja locate-toimintoa voidaan käyttää hyvänä tapana etsiä tiedostoja järjestelmästäsi. Sinun on päätettävä, kumpi näistä työkaluista on sopiva kussakin tilanteessa.

Find ja locate ovat tehokkaita komentoja, joita voidaan vahvistaa yhdistämällä niitä muihin apuohjelmiin putkistojen avulla. Kokeile suodattamista käyttämällä komentoja kuten wc, sort ja grep.

Similar Posts

Vastaa

Sähköpostiosoitettasi ei julkaista.