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.

-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.

-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ń.

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

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

-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.

--reflink[=kiedy]
    Create copy-on-write clones (aka reflinks) rather than hardlinks. The reflinked files share only on-disk data, but the file mode and owner can be different. It’s recommended to use this option together with the --ignore-owner and --ignore-mode options. This option implies --skip-reflinks to ignore already cloned files.

    The optional argument when can be never, always, or auto. If the when argument is omitted, it defaults to auto, which means that hardlink checks the filesystem type and uses reflinks on BTRFS, XFS and ZFS only, and falls back to hardlinks when creating a reflink is impossible. The argument always disables filesystem-type detection and the fallback to hardlinks, which means that only reflinks are allowed.

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

-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.

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

-y, --method nazwa
    Set the file content comparison method. The currently supported methods are sha256, sha1, crc32c, and memcmp. The default is sha256, or memcmp if the Linux Crypto API is not available. The methods based on checksums are implemented in a zero-copy way, which means that file contents are not copied to userspace and all calculation is done in the kernel.

-z, --zero
    Separate lines with a NUL byte instead of a newline (for -l).

-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