Many of you fellow Ubuntu users will be familiar with the ”Search for Files” tool that allows you to look for files. Kuten useimmille asioille Linuxissa, on olemassa hienoja työpöytätyökaluja, mutta Terminalista löytyy enemmän tehoa kuin mitä mikään virtaviivainen työpöytätyökalu voi saavuttaa.
Tänään haluan esitellä sinulle muutaman työkalun, jotka voivat tehdä tiedostojen etsimisen vaivalloisesta työstä helpon prosessin.
locate
Ensimmäinen työkalu, joka sinun tulisi oppia tuntemaan, on myös yksi yksinkertaisimmista. Ohjelma locate
toimii samalla tavalla kuin useimmat graafiset hakutyökalut.
Käyttö
Asettakaamme, että olet lukenut siitä, miten voit muokata X:ää parempaa videosuorituskykyä varten. Lukemassasi asiakirjassa käsketään muokkaamaan xorg.conf
-tiedostoa, mutta asiakirjassa ei sanota, missä se on, etkä tiedä, miten se löytyy. Voit käyttää locate
:tä löytääksesi sen nopeasti:
$ locate xorg.conf/etc/X11/xorg.conf/usr/share/man/man5/xorg.conf.5.gz/var/lib/x11/xorg.conf.md5sum/var/lib/x11/xorg.conf.roster
On selvää, että /etc/X11/xorg.conf
on etsimämme tiedosto, mutta entä jos tuloksia palautuu kymmeniä tai jopa satoja? Miten voisit hallita kaiken sen? Jos tiedät hieman säännöllisistä lausekkeista (jokaisen Linux-käyttäjän pitäisi todella opetella perusasiat), voit helposti käyttää säännöllisiä lausekkeita hakemistojen tai tiedostojen etsimiseen. Voimme esimerkiksi etsiä täsmälleen vastaavaa tiedostoa xorg.conf
seuraavalla komennolla:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Jos haluat etsiä tiedostoja ilman isojen ja pienten kirjainten herkkyyttä, voit käyttää -i
-vaihtoehtoa. Esimerkiksi:
$ locate -i 'monthly report'/home/chris/Documents/August Monthly Report.doc/home/chris/Documents/July Monthly Report.doc/home/chris/Downloads/latest monthly report.doc
Jotain, mikä saattaa hämmentää sinua, kun alat käyttää locate
:tä, on se, että se ei ainoastaan palauta osumia, vaan jos osuma on hakemisto, se myös listaa kaikki hakemiston alla olevat hakemistot ja tiedostot. Esimerkiksi:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
Tämä komento palauttaa yli tuhat merkintää minun järjestelmässäni. Jos haluat vähentää tulokset hakusanaa vastaavien merkintöjen luetteloon ilman kaikkia niihin sisältyviä tiedostoja ja hakemistoja, käytä -b
-vaihtoehtoa:
$ locate -b Desktop/home/chris/Desktop/home/chris/bin/recordSoundAndDesktop.sh/opt/HipChat4/lib/QtQuick/Controls/Styles/Desktop/usr/include/qt4/QtGui/QDesktopServices/usr/include/qt4/QtGui/QDesktopWidget/usr/lib/libreoffice/program/wizards/common/Desktop.py/usr/lib/libreoffice/share/gallery/computers/Computer-Desktop.png/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.py/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.pyc/usr/lib/python3/dist-packages/xdg/DesktopEntry.py/usr/lib/python3/dist-packages/xdg/__pycache__/DesktopEntry.cpython-35.pyc/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/Styles/Desktop/usr/share/kde4/apps/kio_desktop/DesktopLinks/usr/share/man/man3/File::DesktopEntry.3pm.gz/usr/share/perl5/File/DesktopEntry.pm/usr/share/sounds/KDE-Window-All-Desktops-Not.ogg/usr/share/sounds/KDE-Window-All-Desktops.ogg
Tuloksia on edelleen melko paljon, mutta meidän ei enää tarvitse lajitella kaikkia ylimääräisiä tuloksia löytääkseen etsimämme.
Tärkeä huomautus
Komento locate
toimii slocate-tietokannan varassa. Tämä tietokanta tallentaa tiedostojärjestelmän hakemistojen ja tiedostojen nimet välimuistiin, ja sen ansiosta locate
-komento voi toimia hetkessä sen sijaan, että koko tiedostojärjestelmän haku veisi pitkiä aikoja.
Tämä kyky ei kuitenkaan tule ilman kustannuksia. Oletusarvoisesti järjestelmäsi suorittaa komennon tämän tietokannan päivittämiseksi kerran päivässä klo 6:25 aamulla. Tämä komento päivittää tietokantaan kaikki tiedostojärjestelmään edellisen päivityksen jälkeen tehdyt muutokset.
Jos olet tehnyt viime aikoina muutoksia, kuten lisännyt tai poistanut suuria määriä tiedostoja ja hakemistoja, ja haluat käyttää locate
-komentoa näiden uusien hakemistojen ja tiedostojen etsimiseen, voit päivittää slocate-tietokannan manuaalisesti milloin tahansa seuraavalla komennolla:
$ sudo updatedb
Riippuen siitä, kuinka paljon muutoksia on tehty sen jälkeen, kun slocate-tietokanta viimeksi päivitettiin, päivitys voi kestää muutamasta sekunnista muutamaan minuuttiin. Kun se on tehty, voit tehdä haun uudelleen komennolla locate
.
joka
locate
soveltuu erinomaisesti koko tiedostojärjestelmän hakuun. Joskus kuitenkin haluat vain löytää, missä jokin komento sijaitsee. Silloin which
tulee kuvaan mukaan.
which
tekee vain yhden asian, mutta se tekee sen hyvin. Se antaa komennon nimen ja kertoo, missä kyseisen komennon tiedosto sijaitsee tiedostojärjestelmässä.
Ajatellaanpa, että haluamme selvittää, missä komento firefox
sijaitsee. Voimme yksinkertaisesti suorittaa seuraavan komennon saadaksemme sen selville:
$ which firefox/usr/bin/firefox
Miksi haluaisit etsiä nimenomaan komentoa? Kuvittele, että sinulla on koodia, jonka on korvattava vanha komento. Sinun on ensin poistettava vanha komento (yleensä nimeän sen uudelleen samannimiseksi ja sen jälkeen ”.bak”, jotta se säilyy, jos tarvitsen sitä), ennen kuin laitat uuden komennon sen tilalle. which
auttaa sinua löytämään tiedoston nopeasti ja helposti, jotta sinun ei tarvitse etsiä sitä kaikkialta.
whereis
Komento whereis
on samanlainen kuin mikä, mutta menee askeleen pidemmälle. Se ei ainoastaan kerro, missä suoritettava tiedosto sijaitsee, vaan se etsii myös lähdekoodin, man-sivun ja muut siihen liittyvät hakemistot.
Jatketaan which
esimerkkiä, kysytään whereis
komennosta firefox
:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Se auttoi minua löytämään /usr/lib/firefox/plugins
aiemmin, kun työskentelin Flash-ratkaisun parissa, sillä kyseiseen paikkaan tallennetaan Firefoxin globaalit lisäosat.
find
find
on äärimmäinen etsintätyökalu, Linuxin haun sveitsiläinen armeijan veitsi, jos niin halutaan. find
voi tehdä kaikenlaista: etsiä tiedostoja viimeksi muutettujen aikojen, omistajien ja ryhmien, käyttöoikeuksien, tyypin (tiedosto, hakemisto, symbolinen linkki jne.), sen, onko tiedosto nykyisen käyttäjän luettavissa/kirjoitettavissa/suoritettavissa, tiedoston koon, onko tiedosto tai hakemisto tyhjä, ja paljon muuta. Voit myös etsiä osumia säännöllisillä lausekkeilla.
Kun käytät tätä työkalua yhdessä xargs
-komennon kanssa (jota käsittelen joskus toiste), voit tehdä todella hämmästyttäviä asioita komentorivillä. Kuvittele, että voit hakea rekursiivisesti nykyisestä hakemistosta ”.bak”-päätteisiä tiedostoja, joita on viimeksi muutettu yli 100 päivää sitten, ja sitten poistaa ne yhdellä komennolla:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Aluksi se näyttää hyvin monimutkaiselta, mutta kun hallitset find
:n käytön taidon, siitä tulee itsestäänselvyys. Pian ihmettelet, miten olet ikinä etsinyt asioita ilman sitä.
Puhtaasti sanottuna on paljon enemmän löydettävää kuin mitä olen valmis käsittelemään, ja työkalusta on monia, monia loistavia esittelyjä, jotka tekevät parempaa työtä kuin minä. Niinpä osoitan sinulle vain kolme loistavaa referenssiä, joiden avulla voit päästä liikkeelle findin kanssa.
- Esimerkkejä Linux-komennon findin käytöstä
- (Pahoittelen hirvittäviä värejä jo etukäteen) Unix/Linuxin ”find”-komennon opetusohjelma
- Komennon find käyttäminen
Happy searching.
Auttoinko sinua?
- Lähetä minulle vinkki Paypalin kautta.
- Auta tämän sivuston isännöinnissä Linode-viitekoodillani.