HARDLINK(1)

NAZWA
hardlink - linkuje wiele kopii pliku

SKŁADNIA

hardlink [opcje] katalog|plik...

OPIS

hardlink jest narzędziem zastępującym kopie pliku dowiązaniami zwykłymi (twardymi) lub klonami typu kopia przy zapisie, oszczędzając miejsce na nośniku.

hardlink najpierw tworzy drzewo binarne z rozmiarami plików, porównując następnie zawartość plików o tym samym rozmiarze. Występują dwie proste metody porównywania zawartości. Metoda memcmp bezpośrednio odczytuje bloki danych z plików i porównuje je. Kolejna metoda opiera się na sumach kontrolnych (np. SHA256); w tym przypadku dla każdego bloku danych obliczana jest suma kontrolna przez kryptograficzny interfejs programistyczny jądra Linux (crypto); suma ta jest przechowywana w przestrzeni użytkownika i używana do porównywania plików.

Buforowane jest też początkowe 32 bajtów każdego pliku. Bufor ten jest używany niezależnie od metody porównywania oraz żądanego rozmiaru bufora i rozmiaru wejścia/wyjścia. Ten bufor początkowy znacznie ogranicza operacje na zawartości plików, ponieważ pliki bardzo często różnią się od samego początku.

OPCJE

-c, --content
    Przy określaniu identyczności plików rozważa tylko zawartość pliku, a nie jego atrybuty. Równoważne -pot.

-b, --io-size rozmiar
    Rozmiar bufora read(2) lub sendfile(2) używanego przy porównywaniu zawartości plików. Po argumencie rozmiar mogą wystąpić przyrostki określające wielokrotność: KiB, MiB itd. Cząstka "iB" jest opcjonalna, tzn. np. "K" znaczy to samo co "KiB". Wartością domyślną jest 8KiB w przypadku metody memcmp i 1MiB w przypadku innych metod. Jedynie metoda memcmp używa pamięci procesu do buforowania, inne metody korzystają z metody transferu danych bez kopiowania (zero-copy) oraz operacji wejścia/wyjścia dokonywanych w jądrze. Rozmiar może być dostosowany w locie, aby pomieścić sumy kontrolne zbuforowanej zawartości.

-d, --respect-dir
    Próbuje linkować tylko pliki o tej samej nazwie katalogu. Katalog najwyższego poziomu (podany w wierszu polecenia hardlink) jest ignorowany. Przykładowo hardlink --respect-dir /foo /bar spowoduje dowiązanie /foo/jakiś/plik do /bar/jakiś/plik, lecz nie do /bar/inny/plik. Przy łącznym użyciu z opcją --respect-name, porównywane będą całe ścieżki (poza katalogiem najwyższego poziomu).

-f, --respect-name
    Próbuje linkować tylko pliki o tej samej nazwie (basename). Usilnie zaleca się korzystanie z długiej opcji, zamiast z -f, ponieważ ta krótka opcja jest interpretowana odmiennie przez inne implementacje hardlink.

-F, --prioritize-trees
    Pozostawia pliki znalezione w najwcześniej podanym katalogu najwyższego poziomu, jeśli w różnych drzewach istnieją identyczne pliki. Na przykład hardlink foo/ bar/ dowiąże pliki w katalogu bar/ do identycznych plików w katalogu foo/.

-i, --include wyrażenie-regularne
    Wyrażenie regularne określające pliki do uwzględnienia. Jeśli podano opcję --exclude, niniejsza opcja ponownie obejmuje pliki, które zostałyby inaczej wyłączone. Jeśli nie podano opcji --exclude, uwzględniane są tylko pliki pasujące do podanego wyrażenia.

-m, --maximize
    Z identycznych plików, utrzymuje plik o największej liczbie dowiązań.

-M, --minimize
    Z identycznych plików, utrzymuje plik o najmniejszej liczbie dowiązań.

-n, --dry-run
    Nie dokonuje rzeczywistych zmian, jedynie wypisuje co by się stało.

-l, --list-duplicates
    Nie dowiązuje niczego, wypisuje jedynie absolutną ścieżkę każdego zduplikowanego pliku, po jednym na wiersz, przed którym znajdzie się 16-bajtowy ciąg rozróżniający oraz znak tabulacji.

-z, --zero
    W trybie -l rozdziela wiersze znakiem NUL, zamiast znakiem nowego wiersza.

-o, --ignore-owner
    Linkuje i porównuje pliki nawet, jeśli różnią się ich informacje właścicielskie (użytkownik i grupa). Rezultaty mogą być nieprzewidywalne.

-O, --keep-oldest
    Z identycznych plików, utrzymuje plik najstarszy (o najdawniejszym czasie modyfikacji). Domyślnie utrzymywany jest plik najnowszy. Jeśli podano --maximize lub --minimize, liczba dowiązań ma pierwszeństwo nad czasem modyfikacji.

-p, --ignore-mode
    Linkuje i porównuje pliki nawet, gdy różnią się trybem (uprawnieniami). Rezultaty mogą być nieco nieprzewidywalne.

-q, --quiet
    Tryb cichy, niczego nie wypisuje.

-r, --cache-size rozmiar
    Rozmiar pamięci podręcznej na sumy kontrolne zawartości plików. Wszystkie metody inne niż memcmp obliczają sumy kontrolne dla każdego bloku zawartości plików (zob. --io-size), te sumy kontrolne są buforowane do następnego porównania. Ustawiany rozmiar jest istotny w przypadku dużych plików lub dużych zbiorów plików o tym samym rozmiarze. Wartość domyślna to 10MiB.

-s, --minimum-size rozmiar
    Minimalny rozmiar do uwzględnienia. Domyślnie wynosi 1, dzięki czemu nie są linkowane puste pliki. Po argumencie rozmiar mogą wystąpić przyrostki określające wielokrotność: KiB(=1024), MiB (=1024*1024) itd. dla GiB, TiB, PiB, EiB, ZiB i YiB (cząstka "iB" jest opcjonalna, tzn. np. "K" znaczy to samo co "KiB").

-S, --maximum-size rozmiar
    Maksymalny rozmiar do uwzględnienia. Domyślnie wynosi 0, przy czym 0 ma specjalne znaczenie, oznaczając brak limitu. Po argumencie rozmiar mogą wystąpić przyrostki określające wielokrotność: KiB(=1024), MiB (=1024*1024) itd. dla GiB, TiB, PiB, EiB, ZiB i YiB (cząstka "iB" jest opcjonalna, tzn. np. "K" znaczy to samo co "KiB").

-t, --ignore-time
    Linkuje i porównuje pliki nawet, jeśli różnią się czasem modyfikacji. Zwykle to dobry wybór.

-v, --verbose
    Wyjście szczegółowe, wyjaśniające użytkownikowi co się dzieje. Jeśli poda się opcję jednokrotnie, wyświetlany jest każdy plik dla którego tworzone jest dowiązanie zwykłe. Jeśli poda się opcję dwukrotnie, wskazywane jest również każde porównanie.

-x, --exclude wyrażenie-regularne
    Wyrażenie regularne wyłączające pliki z porównywania i linkowania. Opcję można podać wielokrotnie.

--exclude-subtree wyrażenie-regularne
    Wyrażenie regularne wyłączające całe katalogi z porównywania i linkowania. Opcję można podać wielokrotnie.

--mount
    Nie przechodzi przez katalogi na różnych systemach plików (pozostaje wewnątrz tego samego systemu plików).

-X, --respect-xattrs
    Próbuje linkować tylko pliki o tych samych atrybutach rozszerzonych.

-y, --method nazwa
    Ustawia metodę porównywania zawartości plików. Obecnie obsługiwane są: sha256, sha1, crc32c i memcmp. Domyślną metodą jest sha256; albo memcmp gdy niedostępny jest linuksowy interfejs kryptograficzny (Crypto). Metody korzystające z sum kontrolnych są zaimplementowane aby korzystać z metody transferu danych bez kopiowania (zero-copy); zawartość plików nie jest wówczas kopiowana do przestrzeni użytkownika, a wszystkie obliczenia odbywają się w jądrze.

--reflink[=kiedy]
    Tworzy klony typu kopia przy zapisie (inaczej reflinki) zamiast dowiązań zwykłych (twardych). Pliki tego typu dzielą dane na dysku, ale tryb pliku i własność może być odmienny. Zaleca się łączyć tę opcję z opcjami --ignore-owner i --ignore-mode. Opcja wymusza --skip-reflinks, aby ignorować pliki już sklonowane.

    Opcjonalnym argumentem kiedy może być never, always lub auto. Jeśli nie poda się argumentu kiedy, przyjmie domyślną wartość auto; wówczas hardlink sprawdza typ systemu plików i używa reflinków tylko na BTRFS i XFS, korzystając z dowiązań zwykłych tam, gdzie tworzenie reflinków jest niemożliwe. Argument always wyłącza sprawdzanie typu systemów plików i tworzenie dowiązań zwykłych - wówczas dozwolone są tylko reflinki.

--skip-reflinks
    Ignoruje już sklonowane pliki. Opcję tę można używać bez --reflink przy tworzeniu klasycznych dowiązań zwykłych.

-h, --help
    Wyświetla ten tekst i wychodzi.

-V, --version
    Wyświetla wersję i wychodzi.

ARGUMENTY

hardlink przyjmuje jeden lub więcej katalogów, które zostaną przeszukane pod kątem plików do zlinkowania.

ŚRODOWISKO

ULFILEEQ_DEBUG=all
    Włącza wyjście debugowania dla porównywania plików.

USTERKI

Pierwotna implementacja hardlink używała opcji -f*do wymuszenia tworzenia dowiązań zwykłych pomiędzy systemami plików. Ta niezwykle rzadko użyteczna opcja nie jest już obsługiwana przez niniejszy program *hardlink.

hardlink zakłada, że drzewo na którym działa nie zmienia się podczas przebiegu programu. Jeśli drzewo ulegnie zmianie, rezultaty są niezdefiniowane i potencjalnie niebezpieczne. Na przykład jeśli zwykły plik zostanie zastąpiony przez urządzenie, hardlink może zacząć odczytywać z urządzenia. Jeśli składowa ścieżki zostanie zastąpiona przez dowiązanie symboliczne lub zmienią się uprawnienia pliku, może dojść do naruszenia bezpieczeństwa systemu. Nie należy uruchamiać hardlink na zmieniającym się drzewie ani drzewie, które kontroluje inny użytkownik.

AUTOR

Istnieje wiele implementacji hardlink. Pierwotna pochodzi od Jakuba Jelinka z dystrybucji Fedora; była używana w util-linux pomiędzy wersjami v2.34 i v2.36. Bieżąca implementacja powstała w oparciu o wersję z Debiana, autorstwa Juliana Andresa Klode’a.

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w

DOSTĘPNOŚĆ

Polecenie hardlink jest częścią pakietu util-linux, który można pobrać ze strony