Vad är en hård länk? — definition från The Linux Information Project (LINFO)

En hård länk är bara ett ytterligare namn för en befintlig fil i Linux eller andra Unix-liknande operativsystem.

Varje antal hårda länkar, och därmed valfritt antal namn, kan skapas för en fil. Hårda länkar kan också skapas till andra hårda länkar. De kan dock inte skapas för kataloger, och de kan inte korsa filsystemgränser eller sträcka sig över partitioner.

Operativsystemet gör ingen skillnad mellan det namn som ursprungligen tilldelades en fil när den först skapades och eventuella hårda länkar som senare skapas till den filen, annat än att de bara är flera namn för samma fil. Detta beror på att det ursprungliga namnet och eventuella hårda länkar alla pekar på samma inod. En inode är en datastruktur (dvs. ett optimerat sätt att lagra information) som lagrar all information om en fil (t.ex. dess storlek, dess åtkomstbehörighet, när den skapades och var den finns i systemet) utom dess namn och dess faktiska data. Det faktum att inodnummer är unika endast inom ett filsystem är anledningen till att de inte fungerar över filsystem och partitioner.

Hårda länkar skapas med kommandot ln. Följande skulle till exempel skapa en hårdlänk med namnet hlink1 till en fil med namnet file1, båda i den aktuella katalogen (dvs. den katalog där användaren för närvarande arbetar):

ln file1 hlink1

När en hårdlänk har skapats finns det ingen uppenbar indikation på att den skiljer sig från någon annan fil. Det vill säga, hårda länkar verkar vara filer av samma typ som deras målfiler (dvs. de filer som de är länkade till) när de ses med kommandon som ls (dvs. lista) och file (som används för att bestämma typen av alla angivna filer). På samma sätt är ikonerna för hårda länkar identiska med ikonerna för deras målfiler när de visas i ett GUI (grafiskt användargränssnitt).

Det faktum att det ursprungliga namnet på en fil och alla hårda länkar till den filen alla delar samma inod kan tydligt ses genom att använda kommandot ls med dess -i (dvs. inode) alternativ. Följande skulle till exempel visa att inodnumren för file1 och hlink1 från exemplet ovan är identiska:

ls -i file1 hlink1

Antalet hårdlänkar till en fil visas i den andra kolumnen i det utdata som produceras genom att använda ls med dess -l (dvs. long) alternativ. Man kan se att antalet är summan av målfilen och alla hårda länkar till den (dvs, summan av det ursprungliga namnet och alla namn som lagts till senare) och att det är samma för målet och för varje sådan länk.

Hårdlänkade filer kan också hittas genom att använda kommandot find med alternativet -type f (för att bara välja vanliga filer) följt av alternativet -links +1 (för att visa alla vanliga filer med mer än en hårdlänk till dem) på följande sätt:

find -type f -links +1

När en ändring görs i en fils innehåll, bevaras länkningen till alla hårda länkar. Vissa textredigerare kan dock bryta länken genom att skapa en ny inod för det reviderade innehållet,1 och därför kan det vara klokt att kontrollera viktiga länkar efter ändring av filer.

Kommandot rm verkar ytligt sett ta bort eller radera filer. Vad det egentligen gör är dock att minska antalet hårda länkar i en fil (dvs. antalet namn som filen har) med ett, och det påverkar inte direkt inoden eller filens data. När antalet når noll verkar filen ha försvunnit eftersom det inte längre finns något enkelt sätt att referera till den. Filens data är dock inte riktigt borttagna förrän platsen/platserna på hårddisken (HDD) eller annat lagringsmedium som innehåller filen skrivs över av en ny fil.

Så skulle till exempel följande ta bort den hårda länken hlink1 som skapades i exemplet ovan:

rm hlink1

Om du använder rm igen med det enda kvarvarande namnet enligt följande skulle du sedan göra filens data praktiskt taget oåtkomliga:

rm file1

Den kanske mest användbara tillämpningen av hårda länkar är att tillåta filer, program och skript (dvs.dvs. korta program) att lätt komma åt i en annan katalog än den ursprungliga filen eller den körbara filen (dvs, den körklara versionen av ett program). Om man skriver namnet på hårdlänken kommer programmet eller skriptet att exekveras på samma sätt som om man använde det ursprungliga namnet.

Symboliska länkar, även kallade mjuklänkar, är mer användbara än hårda länkar eftersom de kan göras till kataloger såväl som till filer på olika filsystem och på olika partitioner. När man använder ett grafiskt gränssnitt har symboliska länkar dessutom speciella ikoner som omedelbart identifierar dem som länkar snarare än vanliga filer. De har dock den nackdelen att de blir oanvändbara om målfilen raderas.

Aliaser liknar ytligt sett hårda länkar i och med att de är ett annat sätt att ge flera namn åt en fil. Alias-kommandot är dock inbyggt i skalet (dvs. det program som tillhandahåller det textbaserade användargränssnittet) i stället för att vara ett separat program, och mekanismen skiljer sig mycket från mekanismen för hårda länkar. Liksom symboliska länkar kan alias användas inte bara för filer utan även för kataloger och kan korsa filsystem- och partitionsgränser. Dessutom kan ett alias användas som ett kortnamn för vilken skaltext som helst (dvs. ett kommando eller en serie länkade kommandon, inklusive deras alternativ och/eller argument).

________
1Tester på Red Hat Linux 9 visade att hårda länkar bröts när man ändrade filer med hjälp av textredigeraren gedit. De bröts dock inte när man använde textredigerarna vi och Abiword samt hexeditorn KHexEdit på samma version av Linux. Att gedit inte lyckades bevara hårda länkar berodde på att den faktiskt skapar en kopia av den ändrade filen som den sparar (och därmed det nya inodnumret) i stället för att göra ändringarna i originalfilen, men denna kopia får samma namn som originalfilen. Ett liknande test med en nyare version av gedit (2.14.0) på Fedora Core 5 visade dock att problemet hade korrigerats och att inga länkar bröts.