Antag att vi flyttar filen
dikter.tgz till katalogen kopior:$ ls
bellman dikter/ dikter.tgz kopior/ lenngren
$ mv dikter.tgz kopior/nr1
$Detta kan vålla problem eftersom vissa
kanske förväntar sig att finna
dikter.tgz där den fanns tidigare.
För att undvika sådana problem kan man göra
en symbolisk länk från den ursprungliga till den nya
positionen för filen. En symbolisk länk är väsentligen ett
meddelande om ny adress - ''jag finns inte här längre,
jag finns där''.
Symboliska länkar används flitigt på UNIX-system,
bland annat för att man ska
kunna vara säker på att alla program
ska hitta de filer de behöver.
Kommandot för att skapa en symbolisk länk
är ln -s.$ ln -s kopior/nr1 dikter.tgz
$Ovan skapade jag en symbolisk
länk till filen kopior/nr1.
Länkfilen, som heter dikter.tgz, listas av
ls ungefär som en vanlig fil:$ ls
bellman dikter/ dikter.tgz@ kopior/ lenngren
$Att dikter.tgz är en symbolisk länk markeras
ovan med tecknet @ efter dess namn.
Då vi begär utförlig information
om dikter.tgz, ser vi att den är en hänvisning till
kopior/nr1: $ ls -l dikter.tgz
lrwxrwxrwx 1 göran göran 10 mar 8 22:21 dikter.tgz -> kopior/nr1
$Det första
tecknet i filskyddskoden är l för symboliska länkar.
Vad händer ifall någon försöker använda filen dikter.tgz?
Låt oss prova!$ tar -ztvf dikter.tgz
drwxrwxr-x göran/göran 0 1998-02-27 19:43 dikter/
-rw------- göran/göran 372 1998-02-01 17:12 dikter/bellman
-rw-rw-r-- göran/göran 649 1998-02-01 17:12 dikter/lenngren
$De flesta kommandon skickas automatiskt
vidare till den riktiga filen när de använder en symbolisk länk.
Detta var vad som skedde vid kommandot ovan; tar
kördes i själva verket på filen kopior/nr1.
Ett undantag från denna
regel är rm: om vi ger kommandot rm dikter.tgz, så
raderas länkfilen i stället för test/ny.fil.$ rm dikter.tgz
$ ls
bellman dikter/ kopior/ lenngren
$ ls kopior
nr1
$Det kan också förekomma symboliska länkar till kataloger.$ ln -s kopior gammalt
$ ls
bellman dikter/ gammalt@ kopior/ lenngren
$Nu är gammalt en symbolisk länk till katalogen kopior.
Vi kan göra samma saker med gammalt som vi kan göra
med kopior:$ ls gammalt
nr1
$ cd gammalt
$ pwd
/home/göran/gammalt
$ ls -l
total 1
-rw-rw-r-- 1 göran göran 829 mar 1 22:58 nr1
$
Om man raderar en fil eller katalog
som det finns symboliska länkar till, så
kommer dessa symboliska länkar att peka ut i tomma intet.$ cd
$ rm -r kopior
$ ls gammalt
gammalt@
$ cd gammalt
bash: cd: gammalt: Filen eller katalogen finns inte
$ rm gammalt
$ ls
bellman dikter/ lenngren
$
Informationen om en fil (bland annat filens längd, datum för senaste
ändring, filen rättigheter samt var på lagringsmediet filen
placerats) lagras i något som kallas för en inod.
Filens namn lagras inte i inoden. Istället
har varje inod ett nummer, dess inodsnummer.
Kopplingen
mellan ett filnamn och mosvarande inod görs genom att
systemet i den katalog där filen finns lagrar enbart
filens namn och motsvarande inodsnummer - själva inoden
kan vara lagrad på någon annan plats.
Vilket inodsnummer som hör till ett givet filnamn skrivs ut
om man anger flaggan -i till ls.$ ls -i
157097 bellman 157098 dikter/ 157138 lenngren
$Utskriften betyder att filen bellman har
inodsnummer 157097 osv.
På sätt och vis kan man hävda att inoden är filen,
medan filens namn är ett slags länk,
en hård länk, till inoden.
Ingenting hindrar att man har mer än en hård länk
till en och samma fil/inod.
Därigenom kan en fil ha flera olika namn.
Kommandot för att skapa en ny hård länk
till en fil är ln (utan flaggan -s).$ ln bellman sång
$ ls -i
157097 bellman 157098 dikter/ 157138 lenngren 157097 sång
$Nu är sång en hård länk till filen bellman,
något som syns genom att de båda filerna har samma inodsnummer
i utskriften ovan.
Detta innebär att sång och bellman
är två olika (men helt likvärdiga) namn för en och samma fil/inod.
När ls anropas med flaggan -l, skrivs antalet
hårda länkar till varje fil ut efter dess skyddskod.$ ls -l
total 4
-rw------- 2 göran göran 372 feb 1 16:48 bellman
drwxrwxr-x 2 göran göran 1024 feb 27 19:43 dikter/
-rw-rw-r-- 1 göran göran 649 feb 1 15:53 lenngren
-rw------- 2 göran göran 372 feb 1 16:48 sång
$Siffran 2 som anges för sång och bellman i listningen
ovan, betyder att det finns två hårda länkar till dessa filer.
Låt oss skapa ytterligare en hård länk till dem:$ ln sång fredman
ls -li
total 5
157097 -rw------- 3 göran göran 372 feb 1 16:48 bellman
157098 drwxrwxr-x 2 göran göran 1024 feb 27 19:43 dikter/
157097 -rw------- 3 göran göran 372 feb 1 16:48 fredman
157138 -rw-rw-r-- 1 göran göran 649 feb 1 15:53 lenngren
157097 -rw------- 3 göran göran 372 feb 1 16:48 sång
$De tre filnamnen fredman, sång och bellman
är hårda länkar till inoden med nummer 157097.
Om man raderar
en hård länk, så påverkas inte de andra länkarna till samma inod
(inoden tas bort först när samtliga länkar till den raderats).$ rm sång
$ ls
bellman dikter/ fredman lenngren
$ rm fredman
$ ls -l
total 3
-rw------- 1 göran göran 372 feb 1 16:48 bellman
drwxrwxr-x 2 göran göran 1024 feb 27 19:43 dikter/
-rw-rw-r-- 1 göran göran 649 feb 1 15:53 lenngren
$
Hårda länkar är inte lika vanligt förekommande som symboliska. De används främst när ett program ska fungera på olika sätt beroende på vilket namn det anropas under. Symboliska och hårda länkar är lika såtillvida att de båda kan ge en och samma fil olika namn. Det finns dock några skillnader. För det första kan det inte förekomma hårda länkar mellan filer som ligger på olika fysiska lagringsmedium som tex olika hårddiskpartitioner. Det kan inte heller förekomma hårda länkar mellan kataloger. En fördel med hårda länkar är att olika hårda länkar till en och samma inod är fullständigt likvärdiga - för symboliska länkar fungerar länkfilen i vissa avseenden annorlunda än den verkliga filen.