Ce este un hard link? — definiție oferită de The Linux Information Project (LINFO)

O legătură dură este pur și simplu un nume suplimentar pentru un fișier existent pe Linux sau pe alte sisteme de operare de tip Unix.

Pentru orice fișier poate fi creat orice număr de legături dure și, prin urmare, orice număr de nume. De asemenea, pot fi create legături dure către alte legături dure. Cu toate acestea, ele nu pot fi create pentru directoare și nu pot traversa limitele sistemului de fișiere sau se pot întinde peste partiții.

Sistemul de operare nu face nici o distincție între numele care a fost atribuit inițial unui fișier atunci când a fost creat pentru prima dată și orice legături dure care sunt create ulterior pentru acel fișier, în afară de faptul că acestea sunt pur și simplu nume multiple pentru același fișier. Acest lucru se datorează faptului că numele original și toate legăturile permanente indică același inode. Un inode este o structură de date (adică un mod optimizat de stocare a informațiilor) care stochează toate informațiile despre un fișier (de exemplu, dimensiunea acestuia, permisiunile de acces, data creării și locul în care se află în sistem), cu excepția numelui (numelor) și a datelor efective. Faptul că numerele inode sunt unice numai în cadrul oricărui sistem de fișiere este motivul pentru care acestea nu funcționează între sisteme de fișiere și partiții.

Legăturile dure sunt create cu ajutorul comenzii ln. De exemplu, următoarea comandă ar crea o legătură dură numită hlink1 către un fișier numit fișier1, ambele în directorul curent (adică directorul în care lucrează în prezent utilizatorul):

ln file1 hlink1

Când este creată o legătură dură, nu există nici o indicație evidentă că este diferită de orice alt fișier. Adică, legăturile dure par a fi fișiere de același tip ca și fișierele lor țintă (adică fișierele la care sunt legate) atunci când sunt vizualizate cu comenzi precum ls (adică lista) și file (care este utilizată pentru a determina tipul oricărui fișier specificat). De asemenea, atunci când sunt vizualizate într-o interfață grafică a utilizatorului (GUI), pictogramele pentru legăturile permanente sunt identice cu cele ale fișierelor țintă.

Că numele inițial al unui fișier și toate legăturile permanente către acel fișier au în comun același inode poate fi văzut în mod clar prin utilizarea comenzii ls cu opțiunea -i (adică, inode). Astfel, de exemplu, următoarele ar arăta că numerele inode ale fișierului1 și hlink1 din exemplul de mai sus sunt identice:

ls -i file1 hlink1

Numărul de legături permanente către orice fișier este indicat în a doua coloană a ieșirii produse de utilizarea comenzii ls cu opțiunea -l (adică, long). Se poate observa că numărul este suma fișierului țintă și a oricăror legături dure către acesta (de ex, suma numelui inițial și a oricăror nume adăugate ulterior) și că este același pentru fișierul țintă și pentru fiecare astfel de legătură.

Filele cu legături dure pot fi, de asemenea, găsite prin utilizarea comenzii find cu opțiunea -type f (pentru a selecta numai fișiere obișnuite) urmată de opțiunea -links +1 (pentru a afișa toate fișierele obișnuite cu mai mult de o legătură dură către ele), după cum urmează:

find -type f -links +1

Când se face o modificare a conținutului unui fișier, se păstrează legătura către toate legăturile dure. Cu toate acestea, unii editori de text pot rupe legătura prin crearea unui nou inod pentru conținutul revizuit1 și, prin urmare, poate fi prudent să verificați legăturile importante după modificarea fișierelor.

Comanda rm pare, în mod superficial, să elimine sau să șteargă fișiere. Cu toate acestea, ceea ce face cu adevărat este să reducă numărul de legături dure ale unui fișier (adică numărul de nume pe care le are fișierul) cu unul, și nu afectează în mod direct inodul sau datele fișierului. Atunci când numărul ajunge la zero, fișierul pare să fi dispărut, deoarece nu mai există nicio modalitate ușoară de a face referire la el. Cu toate acestea, datele fișierului sunt șterse cu adevărat doar atunci când locația (locațiile) de pe unitatea de hard disk (HDD) sau de pe alt suport de stocare care îl conține este suprascrisă de un nou fișier.

Așa, de exemplu, următoarele ar elimina legătura hard link hlink1 care a fost creată în exemplul de mai sus:

rm hlink1

Utilizarea din nou a rm cu singurul nume rămas, după cum urmează, ar face apoi ca datele fișierului să fie practic inaccesibile:

rm file1

Poate cea mai utilă aplicație pentru hard link-uri este aceea de a permite fișierelor, programelor și scripturilor (i.e. programe scurte) să fie accesate cu ușurință într-un director diferit de cel al fișierului original sau al fișierului executabil (i.e, versiunea gata de execuție a unui program). Tastarea numelui legăturii dure va face ca programul sau scriptul să fie executat în același mod în care se utilizează numele original.

Legăturile simbolice, numite și soft link-uri, sunt mai utile decât hard link-urile, deoarece pot fi făcute atât către directoare, cât și către fișiere de pe sisteme de fișiere diferite și de pe partiții diferite. În plus, atunci când se utilizează o interfață grafică, legăturile simbolice au pictograme speciale care le identifică imediat ca fiind legături și nu fișiere obișnuite. Cu toate acestea, ele au dezavantajul că devin inutilizabile dacă fișierul lor țintă este șters.

Aliasele se aseamănă superficial cu legăturile dure prin faptul că sunt o altă modalitate de a furniza nume multiple pentru orice fișier. Cu toate acestea, comanda alias este încorporată în shell (adică în programul care furnizează interfața utilizator doar text), în loc să fie un program separat, iar mecanismul este foarte diferit de cel al legăturilor dure. La fel ca legăturile simbolice, alias-urile pot fi utilizate nu numai pentru fișiere, ci și pentru directoare și pot depăși limitele sistemului de fișiere și ale partițiilor. În plus, un alias poate fi utilizat ca un nume scurt pentru orice text din shell (adică o comandă sau o serie de comenzi legate, inclusiv opțiunile și/sau argumentele tbeir).

________
1Testările pe Red Hat Linux 9 au constatat că legăturile dure erau întrerupte atunci când se modificau fișiere cu ajutorul editorului de text gedit. Cu toate acestea, ele nu erau rupte atunci când se foloseau editorii de text vi și Abiword, precum și editorul hexazecimal KHexEdit pe aceeași versiune de Linux. Faptul că gedit nu reușea să păstreze legăturile dure se datora faptului că el creează de fapt o copie a fișierului modificat pe care o salvează (și, prin urmare, noul număr de inod), în loc să facă modificările în fișierul original, dar această copie primește numele fișierului original. Cu toate acestea, un test similar folosind o versiune mai nouă de gedit (2.14.0) pe Fedora Core 5 a arătat că problema a fost corectată și că nu a existat nicio întrerupere a legăturilor.

.