Mikä on kova linkki? — The Linux Information Projectin (LINFO) määritelmä

Kova linkki on vain lisänimi olemassa olevalle tiedostolle Linuxissa tai muissa Unixin kaltaisissa käyttöjärjestelmissä.

Mille tahansa tiedostolle voidaan luoda mikä tahansa määrä kovia linkkejä ja siten mikä tahansa määrä nimiä. Kovia linkkejä voidaan luoda myös toisiin koviin linkkeihin. Niitä ei kuitenkaan voi luoda hakemistoihin, eivätkä ne voi ylittää tiedostojärjestelmän rajoja tai ulottua osioiden yli.

Käyttöjärjestelmä ei tee eroa tiedostolle sen luomisvaiheessa alun perin annetun nimen ja tiedostolle myöhemmin luotujen kiintolinkkien välillä muuten kuin siten, että ne ovat vain useita nimiä samalle tiedostolle. Tämä johtuu siitä, että alkuperäinen nimi ja mahdolliset kiintolinkit viittaavat kaikki samaan inode-koodiin. Inode on tietorakenne (eli optimoitu tapa tallentaa tietoja), johon tallennetaan kaikki tiedot tiedostosta (esim. sen koko, käyttöoikeudet, milloin se on luotu ja missä se sijaitsee järjestelmässä) lukuun ottamatta sen nimeä tai nimiä ja varsinaista dataa. Se, että inode-numerot ovat ainutlaatuisia vain minkä tahansa tiedostojärjestelmän sisällä, on syy siihen, että ne eivät toimi tiedostojärjestelmien ja osioiden välillä.

Kovat linkit luodaan ln-komennolla. Esimerkiksi seuraavalla komennolla luodaan kova linkki nimeltä hlink1 tiedostoon nimeltä file1, jotka molemmat ovat nykyisessä hakemistossa (eli hakemistossa, jossa käyttäjä parhaillaan työskentelee):

ln file1 hlink1

Kun kova linkki luodaan, ei ole mitään ilmeistä merkintää siitä, että se eroaa millään tavalla muista tiedostoista. Toisin sanoen kovat linkit näyttävät olevan tiedostot, jotka ovat samantyyppisiä kuin niiden kohdetiedostot (eli tiedostot, joihin ne on linkitetty), kun niitä tarkastellaan komennoilla, kuten ls (eli lista) ja file (jota käytetään määrittämään määritettyjen tiedostojen tyyppi). Samoin graafisessa käyttöliittymässä (GUI) katsottaessa kovien linkkien kuvakkeet ovat identtiset kohdetiedostojen kuvakkeiden kanssa.

Tieto siitä, että tiedoston alkuperäisellä nimellä ja kaikilla kovilla linkeillä kyseiseen tiedostoon on sama inode-koodi, voidaan nähdä selvästi käyttämällä ls-komentoa sen -i (eli inode) -vaihtoehdon kanssa. Näin esimerkiksi seuraava osoittaa, että edellä olevan esimerkin tiedosto1:n ja hlink1:n inode-numerot ovat samat:

ls -i file1 hlink1

Mihin tahansa tiedostoon johtavien kovien linkkien määrä näkyy toisessa sarakkeessa tulosteessa, joka syntyy, kun käytetään komentoa ls, jossa on optio -l (eli long). Voidaan nähdä, että luku on kohdetiedoston ja siihen mahdollisesti kohdistuvien kovien linkkien summa (ts, alkuperäisen nimen ja myöhemmin lisättyjen nimien summa) ja että se on sama sekä kohdetiedostolle että jokaiselle tällaiselle linkille.

Kovasti linkitetyt tiedostot voidaan löytää myös komennolla find, jossa on -type f -vaihtoehto (valitaan vain tavalliset tiedostot) ja sen jälkeen -links +1 -vaihtoehto (näytetään kaikki tavalliset tiedostot, joihin on useampi kuin yksi kova linkki) seuraavasti:

find -type f -links +1

Kun tiedoston sisältöä muutetaan, kaikkien kovien linkkien linkitys säilyy. Jotkin tekstieditorit saattavat kuitenkin rikkoa linkin luomalla uuden inoden muutetulle sisällölle1 , joten voi olla järkevää tarkistaa tärkeät linkit tiedostojen muuttamisen jälkeen.

Rm-komento näyttää pinnallisesti poistavan tai poistavan tiedostoja. Todellisuudessa se kuitenkin vähentää tiedoston kovien linkkien lukumäärää (eli tiedostolla olevien nimien lukumäärää) yhdellä, eikä se vaikuta suoraan inodeen tai tiedoston tietoihin. Kun luku on nolla, tiedosto näyttää kadonneen, koska siihen ei voi enää viitata helposti. Tiedoston tiedot poistetaan kuitenkin todella vasta, kun uusi tiedosto korvaa sen sisältävän kiintolevyn tai muun tallennusvälineen sijainnin (sijainnit).

Siten esimerkiksi seuraava poistaisi yllä olevassa esimerkissä luodun kiintolinkin hlink1:

rm hlink1

Käyttämällä rm:ää uudestaan yhdellä jäljellä olevalla nimellä seuraavalla tavalla tiedoston tiedot olisivat tällöin käytännössä saavuttamattomissa:

rm file1

Kovien linkkien ehkä hyödyllisin sovellus on sallia tiedostojen, ohjelmien ja skriptien (i.ts. lyhyitä ohjelmia) on helppo käyttää eri hakemistossa kuin alkuperäinen tiedosto tai suoritettava tiedosto (ts, ohjelman valmis versio). Kun kirjoitat kovan linkin nimen, ohjelma tai skripti suoritetaan samalla tavalla kuin sen alkuperäistä nimeä käyttämällä.

Symboliset linkit, joita kutsutaan myös pehmeiksi linkeiksi, ovat hyödyllisempiä kuin kovat linkit, koska niitä voidaan tehdä sekä hakemistoihin että eri tiedostojärjestelmissä ja eri osioissa oleviin tiedostoihin. Lisäksi graafista käyttöliittymää käytettäessä symbolisilla linkeillä on erityiset kuvakkeet, jotka tunnistavat heti, että ne ovat linkkejä eivätkä tavallisia tiedostoja. Niillä on kuitenkin se haittapuoli, että ne muuttuvat käyttökelvottomiksi, jos niiden kohdetiedosto poistetaan.

Aliasit muistuttavat pintapuolisesti kovia linkkejä siinä mielessä, että ne ovat toinen tapa antaa useampia nimiä mille tahansa tiedostolle. Alias-komento on kuitenkin sisäänrakennettu komentotulkkiin (eli ohjelmaan, joka tarjoaa pelkän tekstimuotoisen käyttöliittymän) sen sijaan, että se olisi erillinen ohjelma, ja sen mekanismi on hyvin erilainen kuin kovien linkkien. Symbolisten linkkien tavoin aliaksia voidaan käyttää tiedostojen lisäksi myös hakemistoihin, ja ne voivat ylittää tiedostojärjestelmän ja osioiden rajat. Lisäksi aliasta voidaan käyttää lyhyenä nimenä mille tahansa komentotulkin tekstille (eli komennolle tai sarjalle linkitettyjä komentoja, mukaan lukien tbeir-optiot ja/tai -argumentit).

________
1Testeissä Red Hat Linux 9:ssä havaittiin, että kovat linkit katkesivat, kun tiedostoja muokattiin gedit-tekstieditorilla. Ne eivät kuitenkaan menneet rikki, kun käytettiin vi- ja Abiword-tekstieditoreita sekä KHexEdit-heksadesitori-editoria samassa Linux-versiossa. Se, että gedit ei pystynyt säilyttämään kovia linkkejä, johtui siitä, että se itse asiassa luo muutetusta tiedostosta kopion, jonka se tallentaa (ja siten uuden inode-numeron) sen sijaan, että se tekisi muutokset alkuperäiseen tiedostoon, mutta tämä kopio saa alkuperäisen tiedoston nimen. Samanlainen testi uudemmalla gedit-versiolla (2.14.0) Fedora Core 5:llä osoitti kuitenkin, että ongelma oli korjattu ja että linkit eivät katkenneet.