Hvad er et hard link? — definition af The Linux Information Project (LINFO)

Et hard link er blot et ekstra navn til en eksisterende fil på Linux eller andre Unix-lignende operativsystemer.

Der kan oprettes et vilkårligt antal hard links, og dermed et vilkårligt antal navne, for en hvilken som helst fil. Der kan også oprettes hardlinks til andre hardlinks. De kan dog ikke oprettes for mapper, og de kan ikke krydse filsystemgrænser eller gå på tværs af partitioner.

Driftssystemet skelner ikke mellem det navn, der oprindeligt blev tildelt en fil, da den blev oprettet første gang, og eventuelle hardlinks, der efterfølgende oprettes til den pågældende fil, ud over at de blot er flere navne for den samme fil. Dette skyldes, at det oprindelige navn og eventuelle hardlinks alle peger på den samme inode. En inode er en datastruktur (dvs. en optimeret måde at lagre oplysninger på), der gemmer alle oplysninger om en fil (f.eks. dens størrelse, dens adgangstilladelser, hvornår den blev oprettet, og hvor den befinder sig på systemet) undtagen dens navn(e) og dens faktiske data. Det faktum, at inode-numre kun er unikke inden for et filsystem, er grunden til, at de ikke fungerer på tværs af filsystemer og partitioner.

Hardlinks oprettes med kommandoen ln. Følgende ville f.eks. oprette et hard link ved navn hlink1 til en fil ved navn file1, begge i den aktuelle mappe (dvs. den mappe, som brugeren arbejder i for øjeblikket):

ln file1 hlink1

Når et hard link er oprettet, er der ingen åbenlys indikation af, at det er anderledes end en hvilken som helst anden fil. Det vil sige, at hardlinks ser ud til at være filer af samme type som deres målfiler (dvs. de filer, som de er knyttet til), når de ses med kommandoer som ls (dvs. liste) og file (som bruges til at bestemme typen af eventuelle angivne filer). På samme måde er ikonerne for hardlinks identiske med ikonerne for deres målfiler, når de vises i en GUI (grafisk brugergrænseflade).

Det kan tydeligt ses ved at bruge kommandoen ls med dens -i (dvs. inode) indstilling, at det oprindelige navn på en fil og alle hardlinks til denne fil alle deler den samme inode. Således vil f.eks. følgende vise, at inode-numrene for file1 og hlink1 fra ovenstående eksempel er identiske:

ls -i file1 hlink1

Antal af hardlinks til en fil vises i den anden kolonne i det output, der produceres ved at bruge ls med dens -l (dvs. long) indstilling. Det kan ses, at antallet er summen af målfilen og eventuelle hardlinks til den (dvs, summen af det oprindelige navn og alle efterfølgende tilføjede navne), og at det er det samme for målet og for hvert af disse links.

Hardlinkede filer kan også findes ved at bruge kommandoen find med dens indstilling -type f (for kun at vælge almindelige filer) efterfulgt af dens indstilling -links +1 (for at vise alle almindelige filer med mere end ét hardlink til dem) på følgende måde:

find -type f -links +1

Når der foretages en ændring i indholdet af en fil, bevares linket til alle hardlinks. Nogle tekstredigeringsprogrammer kan dog bryde linket ved at oprette en ny inode til det reviderede indhold,1 og det kan derfor være klogt at kontrollere vigtige links efter ændring af filer.

Den rm-kommando ser umiddelbart ud til at fjerne eller slette filer. Det, den i virkeligheden gør, er imidlertid at reducere en fil’s hard link count (dvs. antallet af navne, som filen har) med én, og den påvirker ikke direkte inoden eller filens data. Når tallet når nul, ser det ud til, at filen er forsvundet, fordi der ikke længere er nogen nem måde at henvise til den på. Filens data er dog først reelt slettet, når den eller de steder på harddisken (HDD) eller andre lagringsmedier, der indeholder den, overskrives af en ny fil.

Sådan ville f.eks. følgende fjerne hardlinket hlink1, der blev oprettet i ovenstående eksempel:

rm hlink1

Ved at bruge rm igen med det ene tilbageværende navn som følger, ville filens data derefter blive praktisk talt utilgængelige:

rm file1

Den måske mest nyttige anvendelse af hardlinks er at tillade filer, programmer og scripts (i.dvs. korte programmer) til let at få adgang til i en anden mappe end den oprindelige fil eller eksekverbare fil (dvs, den køreklare version af et program). Ved at skrive navnet på hardlinket vil programmet eller scriptet blive eksekveret på samme måde som ved at bruge det oprindelige navn.

Symbolske links, også kaldet softlinks, er mere nyttige end hardlinks, fordi de kan laves til mapper såvel som til filer på forskellige filsystemer og på forskellige partitioner. Desuden har symbolske links ved brug af en GUI særlige ikoner, der straks identificerer dem som værende links i stedet for almindelige filer. De har dog den ulempe, at de bliver ubrugelige, hvis deres målfil slettes.

Aliaser ligner overfladisk set hårde links, idet de er en anden måde at give flere navne til en hvilken som helst fil. Men alias-kommandoen er indbygget i shell’en (dvs. det program, der leverer den tekstbaserede brugergrænseflade) i stedet for at være et separat program, og mekanismen er meget forskellig fra den for hardlinks. Ligesom symbolske links kan aliaser ikke kun bruges til filer, men også til mapper, og de kan krydse filsystem- og partitionsgrænser. Desuden kan et alias bruges som et kort navn for enhver shell-tekst (dvs. en kommando eller en serie af sammenkædede kommandoer, inklusive tbeir-optioner og/eller argumenter).

________
1Test på Red Hat Linux 9 viste, at hardlinks blev brudt, når man ændrede filer ved hjælp af gedit-teksteditoren. De blev dog ikke brudt ved brug af tekstredigeringsprogrammerne vi og Abiword samt hexeditoren KHexEdit på den samme version af Linux. At gedit ikke bevarede hardlinks skyldtes, at den faktisk opretter en kopi af den ændrede fil, som den gemmer (og dermed det nye inode-nummer) i stedet for at foretage ændringerne i den oprindelige fil, men denne kopi får navnet på den oprindelige fil. En lignende test med en nyere version af gedit (2.14.0) på Fedora Core 5 viste imidlertid, at problemet var blevet korrigeret, og at der ikke var nogen brud på links.