]> git.ipfire.org Git - thirdparty/util-linux.git/blame - misc-utils/hardlink.1.adoc
hardlink: Move -c option in --help
[thirdparty/util-linux.git] / misc-utils / hardlink.1.adoc
CommitLineData
295b3979 1//po4a: entry man manual
6c64d12d
MB
2////
3SPDX-License-Identifier: MIT
4
5Copyright (C) 2008 - 2012 Julian Andres Klode. See hardlink.c for license.
6Copyright (C) 2021 Karel Zak <kzak@redhat.com>
7////
8= hardlink(1)
9:doctype: manpage
10:man manual: User Commands
11:man source: util-linux {release-version}
12:page-layout: base
13:command: hardlink
14
15== NAME
16
17hardlink - link multiple copies of a file
18
19== SYNOPSIS
20
21*hardlink* [options] [_directory_|_file_]...
22
23== DESCRIPTION
24
114330ff
BS
25*hardlink* is a tool that replaces copies of a file with either hardlinks
26or copy-on-write clones, thus saving space.
27
28*hardlink* first creates a binary tree of file sizes and then compares
29the content of files that have the same size. There are two basic content
30comparison methods. The *memcmp* method directly reads data blocks from
31files and compares them. The other method is based on checksums (like SHA256);
32in this case for each data block a checksum is calculated by the Linux kernel
33crypto API, and this checksum is stored in userspace and used for file
34comparisons.
35
36For each file also an "intro" buffer (32 bytes) is cached. This buffer is used
37independently from the comparison method and requested cache-size and io-size.
38The "intro" buffer dramatically reduces operations with data content as files
39are very often different from the beginning.
f3212b91 40
6c64d12d
MB
41== OPTIONS
42
2b2d3172
MB
43include::man-common/help-version.adoc[]
44If specified once, every hardlinked file is displayed, if specified twice, it also shows every comparison.
6c64d12d
MB
45
46*-q*, *--quiet*::
2c646c80 47Quiet mode, don't print anything.
6c64d12d
MB
48
49*-n*, *--dry-run*::
2c646c80 50Do not act, just print what would happen.
6c64d12d 51
259bed15
KZ
52*-y*, *--method* _name_::
53Set the file content comparison method. The currently supported methods are
344b0cd4 54sha256, sha1, crc32c and memcmp. The default is sha256, or memcmp if Linux
259bed15 55Crypto API is not available. The methods based on checksums are implemented in
344b0cd4 56zero-copy way, in this case file contents are not copied to the userspace and all
259bed15
KZ
57calculation is done in kernel.
58
66a38e97
KZ
59*--reflink*[=_when_]::
60Create copy-on-write clones (aka reflinks) rather than hardlinks. The reflinked files
61share only on-disk data, but the file mode and owner can be different. It's recommended
62to use it with *--ignore-owner* and *--ignore-mode* options. This option implies
63*--skip-reflinks* to ignore already cloned files.
64+
65The optional argument _when_ can be *never*, *always*, or *auto*. If the _when_ argument
344b0cd4 66is omitted, it defaults to *auto*, in this case, *hardlink* checks filesystem type and
66a38e97 67uses reflinks on BTRFS and XFS only, and fallback to hardlinks when creating reflink is impossible.
344b0cd4 68The argument *always* disables filesystem type detection and fallback to hardlinks, in this case,
66a38e97
KZ
69only reflinks are allowed.
70
71*--skip-reflinks*::
72Ignore already cloned files. This option may be used without *--reflink* when creating classic hardlinks.
73
6c64d12d 74*-f*, *--respect-name*::
145d42e9 75Only try to link files with the same (base)name. It's strongly recommended to use long options rather than *-f* which is interpreted in a different way by other *hardlink* implementations.
6c64d12d
MB
76
77*-p*, *--ignore-mode*::
145d42e9 78Link and compare files even if their mode is different. Results may be slightly unpredictable.
6c64d12d
MB
79
80*-o*, *--ignore-owner*::
145d42e9 81Link and compare files even if their owner information (user and group) differs. Results may be unpredictable.
6c64d12d
MB
82
83*-t*, *--ignore-time*::
145d42e9 84Link and compare files even if their time of modification is different. This is usually a good choice.
6c64d12d 85
b18a986c
FFD
86*-c* *--content*::
87Consider only file content, not attributes, when determining whether two files are equal. Same as *-pot*.
88
6c64d12d 89*-X*, *--respect-xattrs*::
2c646c80 90Only try to link files with the same extended attributes.
6c64d12d
MB
91
92*-m*, *--maximize*::
2c646c80 93Among equal files, keep the file with the highest link count.
6c64d12d
MB
94
95*-M*, *--minimize*::
2c646c80 96Among equal files, keep the file with the lowest link count.
6c64d12d
MB
97
98*-O*, *--keep-oldest*::
2c646c80 99Among equal files, keep the oldest file (least recent modification time). By default, the newest file is kept. If *--maximize* or *--minimize* is specified, the link count has a higher precedence than the time of modification.
6c64d12d
MB
100
101*-x*, *--exclude* _regex_::
2c646c80 102A regular expression which excludes files from being compared and linked.
6c64d12d
MB
103
104*-i*, *--include* _regex_::
2c646c80 105A regular expression to include files. If the option *--exclude* has been given, this option re-includes files which would otherwise be excluded. If the option is used without *--exclude*, only files matched by the pattern are included.
6c64d12d
MB
106
107*-s*, *--minimum-size* _size_::
2c646c80 108The minimum size to consider. By default this is 1, so empty files will not be linked. The _size_ argument may be followed by the multiplicative suffixes KiB (=1024), MiB (=1024*1024), and so on for GiB, TiB, PiB, EiB, ZiB and YiB (the "iB" is optional, e.g., "K" has the same meaning as "KiB").
6c64d12d 109
40a82456
DP
110*-S*, *--maximum-size* _size_::
111The maximum size to consider. By default this is 0 and 0 has the special meaning of unlimited. The _size_ argument may be followed by the multiplicative suffixes KiB (=1024), MiB (=1024*1024), and so on for GiB, TiB, PiB, EiB, ZiB and YiB (the "iB" is optional, e.g., "K" has the same meaning as "KiB").
112
64c8db3c 113*-b*, *--io-size* _size_::
344b0cd4 114The size of the *read*(2) or *sendfile*(2) buffer used when comparing file contents.
f3212b91
KZ
115The _size_ argument may be followed by the multiplicative suffixes KiB, MiB,
116etc. The "iB" is optional, e.g., "K" has the same meaning as "KiB". The
117default is 8KiB for memcmp method and 1MiB for the other methods. The only
118memcmp method uses process memory for the buffer, other methods use zero-copy
119way and I/O operation is done in the kernel. The size may be altered on the fly
120to fit a number of cached content checksums.
121
122*-r*, *--cache-size* _size_::
123The size of the cache for content checksums. All non-memcmp methods calculate checksum for each
344b0cd4 124file content block (see *--io-size*), these checksums are cached for the next comparison. The
f3212b91
KZ
125size is important for large files or a large sets of files of the same size. The default is
12610MiB.
259bed15 127
6c64d12d
MB
128== ARGUMENTS
129
130*hardlink* takes one or more directories which will be searched for files to be linked.
131
132== BUGS
133
bd67ca44 134The original *hardlink* implementation uses the option *-f* to force hardlinks creation between filesystem. This very rarely usable feature is no more supported by the current *hardlink*.
6c64d12d 135
e6743239 136*hardlink* assumes that the trees it operates on do not change during operation. If a tree does change, the result is undefined and potentially dangerous. For example, if a regular file is replaced by a device, *hardlink* may start reading from the device. If a component of a path is replaced by a symbolic link or file permissions change, security may be compromised. Do not run *hardlink* on a changing tree or on a tree controlled by another user.
6c64d12d
MB
137
138== AUTHOR
139
140There are multiple *hardlink* implementations. The very first implementation is from Jakub Jelinek for Fedora distribution, this implementation has been used in util-linux between versions v2.34 to v2.36. The current implementations is based on Debian version from Julian Andres Klode.
141
625e9c61 142include::man-common/bugreports.adoc[]
6c64d12d 143
625e9c61 144include::man-common/footer.adoc[]
6c64d12d
MB
145
146ifdef::translation[]
625e9c61 147include::man-common/translation.adoc[]
6c64d12d 148endif::[]