HARDLINK(1)

NUME
hardlink - vinculează mai multe copii ale unui fișier

REZUMAT

hardlink [opțiuni] director|fișier...

DESCRIERE

hardlink este un instrument care înlocuiește copiile unui fișier fie cu legături dure, fie cu clone de copiere la scriere (copy-on-write clones), economisind astfel spațiu.

hardlink creează mai întâi un arbore binar al dimensiunilor fișierelor și apoi compară conținutul fișierelor care au aceeași dimensiune. Există două metode de bază de comparare a conținutului. Metoda memcmp citește direct blocurile de date din fișiere și le compară. Cealaltă metodă se bazează pe sume de control (cum ar fi SHA256); în acest caz, pentru fiecare bloc de date se calculează o sumă de control prin API-ul de criptografie al nucleului Linux, iar această sumă de control este stocată în spațiul utilizatorului și utilizată pentru compararea fișierelor.

Pentru fiecare fișier, este pusă în zona de prestocare (cache) și o memorie tampon (buffer) „intro” (32 de octeți). Această memorie tampon este utilizată independent de metoda de comparație și de „cache-size” și „io-size” solicitate. Memoria tampon „intro” reduce dramatic operațiunile cu conținutul datelor, deoarece fișierele sunt foarte des diferite de la început.

OPȚIUNI

-c, --content
    Ia în considerare numai conținutul fișierului, nu și atributele, atunci când se stabilește dacă două fișiere sunt egale. La fel ca -pot.

-b, --io-size dimensiunea
    Dimensiunea memoriei tampon read(2) sau sendfile(2) utilizată la compararea conținutului fișierelor. Argumentul dimensiunea poate fi urmat de sufixele multiplicative KiB, MiB, etc. Sufixul „iB” este opțional, de exemplu, „K” are aceeași semnificație ca și „KiB”. Valoarea implicită este de 8KiB pentru metoda „memcmp” și de 1MiB pentru celelalte metode. Doar metoda „memcmp” utilizează memoria de proces pentru memoria tampon, celelalte metode utilizează modul de copiere zero, iar operațiunea de intrare/ieșire se realizează în nucleu. Dimensiunea poate fi modificată din mers pentru a se potrivi unui număr de sume de control a conținutului din zona de stocare (cache).

-d, --respect-dir
    Încearcă să lege numai fișierele cu același nume de director. Directorul de nivel superior (așa cum este specificat în linia de comandă a hardlink) este ignorat. De exemplu, hardlink --respect-dir /foo /bar va lega /foo/un-dir/fișier cu /bar/un-dir/fișier, dar nu cu /bar/alt-dir/fișier. Dacă este combinată cu --respect-name, atunci sunt comparate rutele întregi (cu excepția directorului de nivel superior).

-f, --respect-name
    Încearcă să vinculeze numai fișiere cu același nume (de bază). Se recomandă cu tărie utilizarea opțiunilor lungi mai degrabă decât -f, care este interpretat în mod diferit de alte implementări hardlink.

-F, --prioritize-trees
    Păstrează fișierele găsite în cel mai anterior director de nivel superior specificat dacă există mai multe fișiere identice în arbori diferiți. De exemplu, hardlink foo/ bar/ va lega fișierele din bar/ la fișiere identice din directorul foo/.

-i, --include exp-reg
    O expresie regulată pentru a include fișiere. Dacă a fost introdusă opțiunea --exclude, această opțiune reinclude fișierele care altfel ar fi fost excluse. În cazul în care opțiunea este utilizată fără --exclude, sunt incluse numai fișierele care corespund modelului.

-l, --list-duplicates
    Nu leagă nimic, ci listează ruta absolută a fiecărui fișier duplicat, unul pe linie, precedat de un identificator unic de 16 octeți și de un tabulator.

-m, --maximize
    Dintre fișierele egale, păstrați fișierul cu cel mai mare număr de legături.

-M, --minimize
    Dintre fișierele egale, păstrează fișierul cu cel mai mic număr de legături.

--mount
    Nu parcurge directoare de pe sisteme de fișiere diferite (rămâne în cadrul aceluiași sistem de fișiere).

-n, --dry-run
    Nu face nimic, doar afișează ceea ce s-ar fi făcut.

-o, --ignore-owner
    Vinculează și compară fișierele chiar dacă informațiile despre proprietar (utilizator și grup) sunt diferite. Rezultatele pot fi imprevizibile.

-O, --keep-oldest
    Dintre fișierele egale, păstrează cel mai vechi fișier (cel mai recent timp de modificare). În mod implicit, se păstrează cel mai nou fișier. Dacă se specifică --maximize sau --minimize, numărul de legături are prioritate față de momentul modificării.

-p, --ignore-mode
    Vinculează și compară fișierele chiar dacă modul lor este diferit. Rezultatele pot fi ușor imprevizibile.

-q, --quiet
    Modul silențios, nu afișează nimic.

-r, --cache-size dimensiunea
    Dimensiunea zonei de prestocare (cache) pentru sumele de verificare a conținutului. Toate metodele diferite de „memcmp” calculează suma de control pentru fiecare bloc de conținut al fișierului (a se vedea --io-size), aceste sume de control sunt stocate în zona de stocare (cache) pentru următoarea comparație. Dimensiunea este importantă pentru fișierele mari sau pentru un set mare de fișiere de aceeași dimensiune. Valoarea implicită este 10Mio (10MiB).

--reflink[=când]
    Creează clone de copiere la scriere (aka reflink) în loc de legături dure. Fișierele clonate cu «reflink» partajează doar datele de pe disc, dar modul fișierului și proprietarul pot fi diferite. Se recomandă utilizarea acestei opțiuni împreună cu opțiunile --ignore-owner și --ignore-mode. Această opțiune implică utilizarea opțiunii --skip-reflinks pentru a ignora fișierele deja clonate.

    Argumentul opțional când poate fi never (niciodată), always (întotdeauna) sau auto. Dacă argumentul când este omis, valoarea implicită este auto, ceea ce înseamnă că hardlink verifică tipul sistemului de fișiere și utilizează reflink-uri numai pe BTRFS, XFS și ZFS, recurgând la legături dure atunci când crearea unui reflink nu este posibilă. Argumentul always dezactivează detectarea tipului de sistem de fișiere și revenirea la crearea de legături dure; în acest caz, sunt permise numai creările de clone cu «reflink».

--skip-reflinks
    Ignoră fișierele deja clonate. Această opțiune poate fi utilizată fără --reflink atunci când se creează legăturile dure clasice.

-s, --minimum-size dimensiunea
    Dimensiunea minimă de luat în considerare. În mod implicit, valoarea este 1, astfel încât fișierele goale nu vor fi legate. Argumentul dimensiunea poate fi urmat de sufixele multiplicative KiB (=1024), MiB (=1024*1024), și așa mai departe pentru GiB, TiB, PiB, EiB, ZiB și YiB („iB” este opțional, de exemplu, „K” are aceeași semnificație ca și „KiB”).

-S, --maximum-size dimensiunea
    Dimensiunea maximă care trebuie luată în considerare. În mod implicit este 0, iar 0 are semnificația specială de nelimitat. Argumentul dimensiunea poate fi urmat de sufixele multiplicative KiB (=1024), MiB (=1024*1024), și așa mai departe pentru GiB, TiB, PiB, EiB, ZiB și YiB („iB” este opțional, de exemplu, „K” are aceeași semnificație ca și „KiB”).

-t, --ignore-time
    Vinculează și compară fișierele chiar dacă momentul modificării lor este diferit. Aceasta este de obicei o alegere bună.

-v, --verbose
    Ieșire descriptivă, care explică utilizatorului ce se face. Dacă este specificată o singură dată, este afișat fiecare fișier cu legătură directă. Dacă este specificată de două ori, se afișează și fiecare comparație.

-x, --exclude exp-reg
    O expresie regulată care exclude fișierele de la a fi comparate și vinculate. Această opțiune poate fi utilizată de mai multe ori.

--exclude-subtree exp-reg
    O expresie regulată care exclude directoare întregi de la a fi comparate și vinculate. Această opțiune poate fi utilizată de mai multe ori.

-X, --respect-xattrs
    Încercați să vinculeze numai fișiere cu aceleași atribute extinse.

-y, --method nume
    Stabilește metoda de comparare a conținutului fișierului. Metodele acceptate în prezent sunt sha256, sha1, crc32c și memcmp. Valoarea implicită este sha256, sau memcmp dacă Linux Crypto API nu este disponibil. Metodele bazate pe sume de control sunt implementate în modul „zero-copy”, în acest caz conținutul fișierului nu este copiat în spațiul utilizatorului și toate calculele sunt efectuate în nucleu.

-z, --zero
    Separă liniile cu un octet NUL în loc de o linie nouă (pentru -l).

-h, --help
    Afișează acest mesaj de ajutor și iese.

-V, --version
    Afișează versiunea și iese.

ARGUMENTE

hardlink preia unul sau mai multe directoare în care vor fi căutate fișierele care urmează să fie vinculate.

MEDIU

ULFILEEQ_DEBUG=all
    Activează ieșirea de depanare pentru comparațiile de fișiere.

ERORI

Implementarea originală hardlink utilizează opțiunea -f pentru a forța crearea de legături dure între sistemele de fișiere. Această caracteristică, foarte rar utilizată, nu mai este suportată de actualul hardlink.

hardlink presupune că arborii pe care operează nu se modifică în timpul funcționării. În cazul în care un arbore se modifică, rezultatul este nedefinit și potențial periculos. De exemplu, dacă un fișier obișnuit este înlocuit cu un dispozitiv, hardlink poate începe să citească de pe dispozitiv. Dacă o componentă a unei rute este înlocuită de o legătură simbolică sau dacă se schimbă permisiunile fișierelor, securitatea poate fi compromisă. Nu rulați hardlink pe un arbore în schimbare sau pe un arbore controlat de un alt utilizator.

AUTOR

Există mai multe implementări hardlink. Prima implementare este cea a lui Jakub Jelinek pentru distribuția Fedora, această implementare a fost utilizată în util-linux între versiunile v2.34 și v2.36. Implementarea actuală se bazează pe versiunea Debian de la Julian Andres Klode.

RAPORTAREA ERORILOR

Pentru rapoarte de eroare, folosiți

DISPONIBILITATE

Comanda hardlink face parte din pachetul util-linux care poate fi descărcat de la