Unix-opas, luku 7 Tiedostot ja hakemistot:

Tiedostojen ja hakemistojen nimet

Tiedostonnimien rakenne

Unix-järjestelmässä tiedoston tai hakemiston nimessä voi periaatteessa käyttää isoa valikoimaa merkkejä, mutta käytännössä kannattaa käyttää vain kirjaimia a-z ja numeroita sekä seuraavia erikoismerkkejä:

Näistä yhdysviivaa ei kannata käyttää tiedoston nimen ensimmäisenä merkkinä.

Skandinaaviset kirjaimemme å, ä ja ö yleensä aiheuttavat vain ongelmia, joten niitä ei kannata käyttää tiedostojen tai hakemistojen nimissä.

Muistathan, että Unixissa isot ja pienet kirjaimet ovat eri merkkejä, joten esim. TKK on aivan eri tiedostonnimi kuin tkk tai Tkk. Yleensä on tapana käyttää pääasiassa pieniä kirjaimia. Jotkut erottelevat tiedostojen nimet hakemiston nimestä kirjoittamalla tiedoston nimen pienellä alkukirjaimella, kun taas hakemiston nimen isolla alkukirjaimella. Silloin siis tkk olisi tiedosto ja Tkk hakemisto. Mutta on jokaisen itse päätettävissä, miten omat tiedostonsa ja hakemistonsa nimeää.

Nimen pituudella ei käytännössä ole rajoitusta, sillä tiedoston tai hakemiston nimi voi olla jopa 256 merkkiä pitkä. Pitkät nimet ovat kuitenkin hankalia käyttää.

Unix tulkitsee tiedostojen (ja hakemistojen) nimet seuraavasti:

Pisteellä alkavat tiedostonnimet

Piste on mahdollinen tiedoston (tai hakemiston) nimen ensimmäisenäkin merkkinä, mutta sillä on erikoismerkitys. Pisteellä alkavat tiedostonnimet eivät normaalisti näy tiedostolistoissa, jotka saadaan ls-komennolla. Sellaiset tiedostot ovat yleensä eri ohjelmien alustustiedostoja tai ohjelmien perustamia ja ylläpitämiä "kirjanpitotiedostoja", joista oletetaan, että käyttäjät eivät yleensä halua nähdä niitä.

Esimerkkejä: Emacs-editori suorittaa .emacs-nimisessä tiedostossa määritellyt toimenpiteet, jos sellainen tiedosto on käyttäjän kotihakemistossa. Nyysiohjelmat yleensä luovat tiedostoja, joiden nimet ovat sentapaisia kuin .newsrc, ja ylläpitävät niissä tietoja siitä, mitä nyysiryhmiä käyttäjä lukee ja mitä juttuja niistä hän on jo lukenut.

Muut erikoiset tiedostonnimet kuten foo~ ja #foo#

Jotkin ohjelmat saattavat automaattisesti luoda tiedostoja, joilla on erikoisia nimiä. Tavallisimmin käyttäjä huomaa sellaisten tiedostonnimien kuin foo~ ja #foo# syntymisen. Niitä luo Emacs-editori.

Kun Emacsilla editoidaan tiedostoja, se tallettaessaan tiedoston muokatussa muodossa automaattisesti tallettaa tiedoston aiemman sisällön tiedostoon, jonka nimen perässä on tildemerkki ~. Siis kun talletat tiedoston foo muokatussa muodossaan, Emacs panee vanhan version talteen tiedostoon foo~. Näitä "varmuuskopioita" ei yleensä kannata hävittää, ellei tiedosto ole hyvin suuri. "Varmuuskopiota" voit tarvita esimerkiksi silloin, kun huomaat tehneesi tiedostoon vääriä muutoksia.

Jos Emacsin toiminta päättyy epänormaalisti esimerkiksi tietokoneen (tai itse Emacs-ohjelman) "kaatumisen" tai modemiyhteyden katkeamisen takia, Emacs ainakin yrittää tallettaa editoitavan tiedoston senhetkisen tilan tiedostoon, joka koostuu tiedostonnimestä ristikkomerkkien # sisällä. Jos siis olet editoimassa tiedostoa foo ja Emacsin toiminta päättyy epänormaalisti, niin löydät tiedostosta foo tilanteen sellaisena, kuin se oli viimeisellä normaalilla tallennushetkellä, ja tiedostosta #foo# mahdollisesti uudemman version.

Joskus käyttäjä itse onnistuu saamaan aikaan hankalan tiedostonnimen, esimerkiksi sellaisen, joka alkaa yhdysviivalla tai sisältää kontrollimerkkejä. Sellaisiin tiedostoihin ei voi viitata normaalilla tavalla komennoissa, joissa haluttaisiin esim. poistaa näitä tiedostoja tai vaihtaa niiden nimiä. Muun muassa Unix-fakissa on ohjeita hankalien tiedostonnimien käsittelyyn. Tässä mainittakoon vain, että jos tiedostonnimi alkaa yhdysviivalla, esim. -foo, niin siihen voi viitata tyyliin ./-foo, jolloin komentotulkki käsittää sen tiedostonnimeksi eikä valitsimeksi.

Jokerimerkit * ja ? tiedostonnimissä

Unix-komennoissa voi tiedostonnimissä käyttää ns. jokerimerkkejä eli "villikorttimerkkejä" (wildcards). Nimitys johtunee canastan ja jokeripokerin tapaisista korttipeleistä, joissa joitakin kortteja kuten jokereita voi käyttää "villeinä kortteina" minkä hyvänsä kortin asemesta. Tarkkaan ottaen kyse ei tällöin ole varsinaisista tiedostonnimistä vaan rakenteista, joita voi käyttää komentojen argumentteina tiedostonnimien paikalla ja jotka komentotulkki laventaa tiedostonnimilistoiksi.

Unixissa jokerimerkkejä ovat

Esimerkiksi komennon argumenttina oleva marj? tarkoittaa kumpaakin tiedostonnimistä marja ja marjo ja myös mitä tahansa viisimerkkistä marj-alkuista merkkijonoa. Toisaalta marj* taas tarkoittaisi esimerkiksi tiedostonnimiä marjaana, marja, marjo, marj, marjukka jne., siis mitä tahansa merkkijonoa, mikä alkaa kirjaimilla marj.

Lisää esimerkkejä:

Rajoitus: tällainen lavennus ei tuota pisteellä alkavia tiedostonnimiä, ellei lavennettavassa nimessä itsessään ole pistettä. Esimerkiksi pelkkä * ei siis lavennu aivan kaikkien tiedostonnimien listaksi, vaan pisteellä alkavat jäävät pois.

Jokerimerkkien käyttö tehostaa työskentelyä, mutta siinä on omat riskinsä. Vahingossa saattaa tulla viitatuksi sellaisen tiedoston tai hakemiston nimeen, johon ei ollut aikomus puuttua. Jokerimerkkien käytössä on siis hyvä olla huolellinen, ettei esim. tiedostoja poistettaisi turhaan.