Unixin komentorivin perusteet

Käymme läpi joitakin Unix-tyyppisten järjestelmien ominaisuuksia ja komentorivin käyttöä. Oletamme käyttäjän kirjautuneen Unix-/Linux-koneelle esimerkiksi ssh:n kautta merkkipohjaisesti.

Hakemistorakenne

Windows-maailmassa tallennusmediat on jaoteltu erillisiin asemiin: C:\, D:\, E:\ jne. Kukin kiintolevyjen osio omana asemanaan ja kukin irroitettava media (cd, dvd, usb,…) omanaan. Unix-tyyppisissä järjestelmissä ei käytetä tällaista jaottelua vaan kaikki tiedostot on koottu yhteen hakemistopuuhun, jolla on yksi juuri, josta käytetään merkintää /. Windows-järjestelmissä sekä monessa muussa graafisessa käyttöympäristössä tiedostojen hierarkisesta tallennusjärjestelmästä käytetään nimitystä kansiot (folder). Kansiot voivat sisältää tiedostoja ja toisia kansioita. Unixeissa samasta asiasta käytetään vanhataan nimitystä hakemistot (directory). Toinen ero Windows- ja Unix-järjestelmien kansio-/hakemistorakenteen välillä on niiden merkinnässä. Windowsissa kansioiden erottimena toimii (taka)kenoviiva \, esimerkiksi “C:\windows\system\”, ja Unixissa tavallinen kauttaviiva, eli etukeno /, esimerkiksi “/usr/lib/”. Kolmas selvä ero näiden järjestelmien välillä on isojen ja pienten kirjaimien käytössä. Windowsissa ei kirjainkoolla ole merkitystä, mutta Unixissa esimerkiksi tiedostot “Dokumetti.txt” ja “dokumentti.TXT” ovat kaksi eri tiedostoa.

Unix-järjestelmän tiedostot on järjestetty hakemistohierarkiaan tiettyjen sääntöjen mukaisesti. Esimerkiksi ohjelmat löytyvät suurimmaksi osaksi hakemistn /usr alta, järjestelmänlaajuiset asetukset hakemistosta /etc ja laitteistoa kuvaavat laitetiedostot hakemistosta /dev. Käyttäjien kotihakemistot, eli Windowsin “C:\Document and settings\käyttäjä”-kansioita vastaavat hakemistot, löytyvät /home -hakemiston alta.

Komentorivin peruskomennot

Komentorivillä ollessaan käyttäjä on aina jossain hakemistossa. Toisin sanoen, jokin hakemisto on aina työhakemistona. Sisään kirjautumisen jälkeen käyttäjä löytää itsensä omasta kotihakemistostaan (/home/tunnus). Kulloisenkin työhakemiston voi aina tarkistaa komennolla pwd (print working directory).

pesasa@etakone:~$ pwd  
/home/pesasa

Hakemistorakenteessa liikkuminen

Hakemiston vaihtaminen tapahtuu cd-komennolla. Kohdehakemiston voi antaa suhteellisena:

pesasa@etakone:~$ cd dokumentit  
pesasa@etakone:~/dokumentit$ pwd  
/home/pesasa/dokumentit

eli suhteessa nykyiseen työhakemistoon, tai absoluuttisena:

pesasa@etakone:~/dokumentit$ cd /usr/bin  
pesasa@etakone:/usr/bin$ pwd  
/usr/bin

eli antamalla koko hakemistopolun juuresta lähtien.

Erityisiä hakemistoja ovat . ja .., jotka viittaavat sen hetkiseen hakemistoon(.) ja hakemistoon, joka on yhden tason verran lähempänä juurta (..).

pesasa@etakone:/usr/bin$ pwd  
/usr/bin  
pesasa@etakone:/usr/bin$ cd ../lib  
pesasa@etakone:/usr/lib$ pwd  
/usr/lib  
pesasa@etakone:/usr/lib$ cd .  
pesasa@etakone:/usr/lib$ pwd  
/usr/lib

Myös käyttäjän kotihakemistolle on oma lyhennysmerkintänsä:

pesasa@etakone:/usr/lib$ cd ~  
pesasa@etakone:~$ pwd  
/home/pesasa

Tosin kotihakemistoon pääsemiseksi riittää myös pelkkä cd-komento.

pesasa@etakone:~$ cd /tmp  
pesasa@etakone:/tmp$ pwd  
/tmp  
pesasa@etakone:/tmp$ cd  
pesasa@etakone:~$ pwd  
/home/pesasa

Nykyisen ja edellisen työhakemiston välillä voi näppärästi liikkua seuraavasti:

pesasa@etakone:~$ cd -  
pesasa@etakone:/tmp$ pwd  
/tmp  
pesasa@etakone:/tmp$ -  
pesasa@etakone:~$ pwd  
/home/pesasa

Komento cd - siirtyy aina siis edelliseen työhakemistoon.

Hakemistojen sisältöä

Hakemistojen sisältöä voi tarkastella komennolla ls

pesasa@etakone:~$ ls  
bar  baz  foo  foobar  
pesasa@etakone:~$ ls foobar  
barbababa  bazaar

Jos komennon väritystoiminto on päällä, näkyvät eri tyyppiset tiedostot ja hakemistot eri väreillä. Tarkempaa tietoa tiedostoista, niiden koosta, luontipäivämäärästä yms. saa käyttämällä komentoa ls -l

pesasa@etakone:~$ ls -l  
total 12  
-rw-r--r-- 1 pesasa mat    0 2009-09-16 21:30 bar  
-rw-r--r-- 1 pesasa mat   55 2009-09-16 21:35 baz  
-rw-r--r-- 1 pesasa mat   28 2009-09-16 21:34 foo  
drwxr-xr-x 2 pesasa mat 4096 2009-09-16 21:32 foobar

Tästä tulosteesta käy muun muassa ilmi, että foobar on hakemisto (d-kirjain rivin alussa), tiedostot ovat kaikki käyttäjän pesasa omistuksessa ja niiden ryhmäksi on merkitty ryhmä mat. Omistajalla on oikeudet lukea ja kirjoittaa tiedostoja (rw-) sekä myös viitata hakemiston sisällä oleviin tiedostoihin (rwx). Ryhmän mat jäsenillä ja sen ulkopuolisilla muilla on oikeus vain lukea tiedostoja (r–) ja lukea ja viitata hakemiston foobar sisältöön (r-x). Tiedostot ja hakemisto on kaikki luoto 16.9.2009 hieman puoli kymmenen jälkeen illalla. Tiedostot baz ja foo ovat varsin pieniä, 55 ja 28 tavua, ja tiedosto bar on tyhjä.

Tiedostojen oikeudet

Kuten edellä jo kävi ilmi, Unixeissa oikeudet tiedostoihin jaetaan kolmella eri tasolla. Ensinnäkin on tiedoston omistava käyttäjä, toiseksi ryhmä, jolle voi antaa oikeuksia tiedoston käyttöön sekä kolmanneksi joukko “muut”, joka sisältää kaikki koneen käyttäjät. Tiedostoihin voi kullekin näistä tasoista antaa erikseen luku-, kirjoitus- tai suoritusoikeuden. Hakemistoille vastaavasti luku-, kirjoitus- tai viittausoikeuden. Viittausoikeudella tarkoitetaan lupaa viitata komennoissa kyseisen hakemiston alla oleviin tiedostoihin tai hakemistoihin. Tiedostojen ja hakemistojen oikeuksia muutetaan komennolla chmod

pesasa@etakone:~$ chmod u+x,g+w,o-r bar  
pesasa@etakone:~$ ls -l bar  
-rwxrw---- 1 pesasa mat 0 2009-09-16 21:30 bar  
pesasa@etakone:~$ chmod u-x bar  
pesasa@etakone:~$ ls -l bar  
-rw-rw---- 1 pesasa mat 0 2009-09-16 21:30 bar

Tiedoston omistavaan käyttäjään viitataan kirjaimella u (user), ryhmään kirjaimella g (group) ja muihin kirjaimella o (others). Oikeuksia lisätään plusmerkillä ja vähennetään miinusmerkillä.

Tiedostojen kopiointi ja siirto

Tiedosto kopioidaan komennolla cp

pesasa@etakone:~$ cp foo abcd

Ensimmäinen parametri on kopioitavan tiedoston nimi ja toinen luotavan uuden kopiotiedoston nimi. Jos parametreina luetellaan enemmän kuin kaksi tiedostoa, on viimeisen parametrin oltava hakemisto, johon edellä olevat tiedostot kopioidaan.

pesasa@etakone:~$ cp foo abcd bar foobar  
pesasa@etakone:~$ ls foobar  
abcd  bar  barbababa  bazaar  foo

Jos halutaan kopioida kokonainen hakemisto sisältöineen, pitää kopiointi tehdä rekursiivisesti.

pesasa@etakone:~$ cp -r foobar copyfoo

Linux-järjestelmissä käytettävässä GNU-projektin cp:ssä on lisäksi käytössä vaihtoehto -a (archive), joka varmistaa, että tiedostojen omistajuudet, oikeudet sekä päivämäärät säilyvät, jos mahdollista.

pesasa@etakone:~$ cp -a foobar copyfoo2

Tiedoston siirto tapahtuu vastaavasti kuin kopiointi, mutta komennolla mv.

pesasa@etakone:~$ mv abcd foobar  
pesasa@etakone:~$ ls foobar  
abcd  bar  barbababa  bazaar  foo

Tiedostojen uudelleen nimeäminen voidaan tulkita tiedoston siirtämisenä toiselle nimelle.

Jokerimerkit

Kun käsitellään useita tiedostoja on joskus tarpeen käyttää lyhennysmerkintää joukolle tiedostoja. Tiedostojen nimissä yhden merkin voi korvata kysymysmerkillä ? ja useamman merkin jonon tähdellä *.

pesasa@etakone:~$ ls -l ba?  
-rw-rw---- 1 pesasa mat  0 2009-09-16 21:30 bar  
-rw-r--r-- 1 pesasa mat 55 2009-09-16 21:35 baz  
pesasa@etakone:~$ ls -l *a*  
-rw-rw---- 1 pesasa mat    0 2009-09-16 21:30 bar  
-rw-r--r-- 1 pesasa mat   55 2009-09-16 21:35 baz  

foobar:  
total 8  
-rw-r--r-- 1 pesasa mat 28 2009-09-16 22:13 abcd  
-rw-r----- 1 pesasa mat  0 2009-09-16 22:13 bar  
-rw-r--r-- 1 pesasa mat  0 2009-09-16 21:32 barbababa  
-rw-r--r-- 1 pesasa mat  0 2009-09-16 21:32 bazaar  
-rw-r--r-- 1 pesasa mat 28 2009-09-16 22:13 foo

Näistä edellinen komento vastaa komentoa:

pesasa@etakone:~$ ls -l bar baz

ja jälkimmäinen komentoa

pesasa@etakone:~$ ls -l bar baz foobar

jolla näytetään ensin tiedostot bar ja baz ja sen jälkeen koko hakemiston foobar sisältö.

Muita tapoja määritellä tiedostojen nimiä lyhyesti ovat kirjainten luetteleminen: [aAki] sekä merkkijonojen luetteleminen: {abc,def}. Esimerkiksi:

pesasa@etakone:~$ ls ba[rz]  
bar baz  
pesasa@etakone:~$ ls foobar/*{ba,bc}*  
foobar/abcd  foobar/bar  foobar/barbababa  foobar/bazaar

Ensimmäinen komento luettelee työhakemistosta tiedostot bar ja baz. Jälkimmäinen luettelee kaikki foobar-alihakemiston tiedostot, joissa esiintyy jossain kohtaa merkkijono ba tai bc.