目录
内容来源:
【GUN】【ln】指令介绍
【busybox】【ln】指令介绍
【linux】【ln】指令介绍
使用示例:
创建链接文件 - 链接文件(默认 - 硬链接)
创建链接文件 - 链接文件(软链接)
创建链接文件 - 根据软链接创建一个指向原始文件的硬链接
创建链接文件 - 根据软链接创建一个指向软链接的硬链接
创建链接文件 - 链接成功后打印每个文件的名称
创建链接文件 - 链接文件夹(系统限制会失败)
创建链接文件 - 链接文件夹
创建链接文件 - 删除软连接
创建链接文件 - 不删除链接的情况下,更换链接
常用组合指令:
指令不常用/组合用法还需继续挖掘:
内容来源:
GUN : Coreutils - GNU core utilities
busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客
【GUN】【ln】指令介绍
ln:建立文件间的链接
ln 在文件之间建立链接。默认情况下,它会创建硬链接;使用-s选项,可以生成符号链接(或软链接)。
简介:
ln [option]... [-T] target linkname
ln [option]... target
ln [option]... target... directory
ln [option]... -t directory target...
如果给出了两个文件名,ln将从第二个文件创建到第一个文件的链接。
如果指定了一个目标,ln将在当前目录中创建指向该文件的链接。
如果指定了--target-directory (-t)选项,如果最后一个文件是一个目录,并且没有指定--no-target-directory (-t)选项,ln将使用目标文件的名称创建指向指定目录中的每个目标文件的链接。
通常情况下,ln不会替换现有文件。使用--force (-f)选项无条件地替换它们,使用--interactive (-i)选项有条件地替换它们,使用--backup (-b)选项重命名它们。除非使用--backup (-b)选项,否则不会有目的地不存在的短暂时刻;这是POSIX的扩展。
硬链接是现有文件的另一个名称。链接和原始是无法区分的。从技术上讲,它们共享同一个inode,而inode包含了一个文件的所有信息。实际上,将该inode称为文件并不错误。大多数系统禁止建立到目录的硬链接;在允许循环的地方,只有超级用户可以这样做(要小心,因为创建循环会给许多其他实用程序带来问题)。硬链接不能跨文件系统边界。(但POSIX没有强制要求这些限制。)
另一方面,符号链接(简称符号链接)是一种特殊的文件类型(并非所有内核都支持该类型:System V release 3(和更老的)系统都没有符号链接),其中的链接文件实际上是指另一个文件。在向符号链接文件传递大多数操作(打开、读取、写入,等等)时,内核自动解引该链接,并对链接的目标进行操作。但有些操作(例如删除)是针对链接文件本身进行的,而不是针对目标。
符号链接的所有者和所属组对通过该链接执行的文件访问不重要,但从设置了限制删除位的目录中删除符号链接时,会有影响。在GNU系统上,符号链接的模式没有意义,不能改变,但在一些BSD系统上,可以改变符号链接的模式,这会影响文件名解析时是否遍历该符号链接。请参阅GNU C库参考手册中的“符号链接”一节。
符号链接可以包含任意字符串;当符号链接中的字符串没有解析为文件时,就会出现悬空符号链接。对于创建悬挂符号链接没有限制。使用绝对符号链接和相对符号链接是有权衡的。绝对符号链接总是指向同一个文件,即使包含该链接的目录已经移动。但如果符号链接在多台机器上可见(例如在网络文件系统上),则所指向的文件可能并不总是相同的。
相对符号链接是根据包含该链接的目录解析的,通常用于引用同一设备上的文件,而不管通过联网的机器访问装载的设备的名称。
当在与当前目录不同的位置创建相对符号链接时,符号链接的解析将与当前目录中相同字符串的解析不同。因此,许多用户喜欢先将目录更改为相对符号链接将要创建的位置,这样制表符补全或其他文件解析将找到与将放置在符号链接中的内容相同的目标。
该程序接受以下选项。参见第2章[常见选项],第2页。
‘-b’
‘--backup[=method]’
参见第2.1节[备份选项],第2页。备份每个文件,否则将被覆盖或删除。
‘-d’
‘-F’
‘--directory’
允许具有适当权限的用户尝试建立到目录的硬链接。但是,由于系统限制,这可能会失败,即使对超级用户也是如此。
‘-f’
‘--force’
删除现有的目标文件。
‘-i’
‘--interactive’
提示是否删除现有的目标文件,如果响应不肯定则失败。
‘-L’
‘--logical’
如果-s无效,且源文件是符号链接,则创建指向该符号链接引用的文件的硬链接,而不是符号链接本身。
‘-n’
‘--no-dereference’
如果最后一个操作数是指向目录的符号链接,请不要特别对待它。相反,把它当作一个普通的文件。
如果目标是一个实际的目录(而不是指向某个目录的符号链接),就不会有歧义。该链接在该目录中创建。但是,当指定的目标是指向目录的符号链接时,有两种方法处理用户的请求。Ln可以像对待普通目录一样对待目标,并在其中创建链接。另一方面,可以将目标视为非目录——即符号链接本身。
在这种情况下,ln必须在创建新链接之前删除或备份该符号链接。默认情况下,将指向目录的符号链接视为目标,就像对待目录一样。
这个选项比 --no-target-directory (-T)选项弱,所以如果同时提供了这两个选项,它不会起作用。
‘-P’
‘--physical’
如果-s无效,且源文件是符号链接,则创建指向符号链接本身的硬链接。在内核不支持的平台上,该选项创建一个内容相同的符号链接。由于符号链接内容不能编辑,因此通过任何链接执行的任何文件名解析都将与创建硬链接时相同。
‘-r’
‘--relative’
创建相对于链接位置的符号链接。这个选项只对--symbolic选项有效。
例子:
ln -srv /a/file /tmp
'/tmp/file' -> '../a/file'
相对符号链接根据其被规范化的包含目录和被规范化的目标生成。也就是说,这些文件名中的所有符号链接都会被解析。参见18.5节[realpath调用],第179页,它对相对文件名生成提供了更大的控制,如下面的例子所示:
ln --relative() {
test "$1" = --no-symlinks && { nosym=$1; shift; }
target="$1";
test -d "$2" && link="$2/." || link="$2"
rtarget="$(realpath $nosym -m "$target" \
--relative-to "$(dirname "$link")")"
ln -s -v "$rtarget" "$link"
}
‘-s’
‘--symbolic’
制作符号链接而不是硬链接。在不支持符号链接的系统上,此选项仅产生错误消息。
‘-S suffix’
‘--suffix=suffix’
为每个用-b生成的备份文件添加后缀。参见第2.1节[备份选项],第2页。
‘-t directory’
‘--target-directory=directory’
指定目标目录。参见第2.6节[目标目录],第7页。
‘-T’
‘--no-target-directory’
当最后一个操作数是目录或指向目录的符号链接时,不要特别对待它。参见第2.6节[目标目录],第7页。
‘-v’
‘--verbose’
链接成功后打印每个文件的名称。
如果-L和-P都给定,则最后一个优先。如果同时给出了-s, -L和-P将被静默地忽略。如果这两个选项都没有给出,那么如果系统链接支持指向符号链接的硬链接(如GNU系统),则该实现默认为-P;如果link在符号链接之后(如BSD上),则默认为-L。
退出状态为零表示成功,非零值表示失败。
例子:
不好的例子:
# 创建链接../a指向该目录中的a。
# 不是很有用,因为它指向自己。
ln -s a ..
更好的例子:
#在创建符号链接之前更改target,以避免混淆。
cd ..
ln -s adir/a .
不好的例子:
#硬编码的文件名难以移动。
ln -s $(pwd)/a /some/dir/
更好的例子:
#相对文件名在目录移动后仍然有效
#跨网络文件系统工作。
ln -s afile anotherfile
ln -s ../adir/afile yetanotherfile
【busybox】【ln】指令介绍
【linux】【ln】指令介绍
[root@localhost bin]# ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME
or: ln [OPTION]... TARGET
or: ln [OPTION]... TARGET... DIRECTORY
or: ln [OPTION]... -t DIRECTORY TARGET...
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.
必选参数对长短选项同时适用。
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup,但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive prompt whether to remove destinations
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference treat LINK_NAME as a normal file if
it is a symbolic link to a directory
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
--help 显示此帮助信息并退出
--version 显示版本信息并退出
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
Using -s ignores -L and -P. Otherwise, the last option specified controls
behavior when a TARGET is a symbolic link, defaulting to -P.
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 ln 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/ln>
或者在本地使用:info '(coreutils) ln invocation'
[root@localhost bin]#
使用示例:
创建链接文件 - 链接文件(默认 - 硬链接)
默认是创建硬链接
指令: ln test test_link
创建链接文件 - 链接文件(软链接)
-s 选项可以创建软连接
指令: ln -s test test_link
创建链接文件 - 根据软链接创建一个指向原始文件的硬链接
-L 如果-s无效,且源文件是符号链接,则创建指向该符号链接引用的文件的硬链接,而不是符号链接本身。
指令: ln -L test_link test_link_1
创建链接文件 - 根据软链接创建一个指向软链接的硬链接
-P 如果-s无效,且源文件是符号链接,则创建指向符号链接本身的硬链接。在内核不支持的平台上,该选项创建一个内容相同的符号链接。由于符号链接内容不能编辑,因此通过任何链接执行的任何文件名解析都将与创建硬链接时相同。
指令: ln -P test_link test_link_2
创建链接文件 - 链接成功后打印每个文件的名称
-v 选项
指令:ln -v test_link test_link_3
创建链接文件 - 链接文件夹(系统限制会失败)
允许具有适当权限的用户尝试建立到目录的硬链接。但是,由于系统限制,这可能会失败,即使对超级用户也是如此。
-d -F --directory 选项
指令: ln -d bin/ test_bin
指令: ln -F bin/ test_bin
创建链接文件 - 链接文件夹
-r 选项,创建相对于链接位置的符号链接。这个选项只对--symbolic选项有效。
-sr 选项
指令: ln -srv bin/ bin_1
创建链接文件 - 删除软连接
删除文件夹时,不要在后面加 /。
指令:rm -rf bin_1
创建链接文件 - 不删除链接的情况下,更换链接
-f 选项 -n选项
指令:ln -s test1 test3
更换软链接
指令:ln -snf test2 test3
指令:ln test1 test3
更换硬链接
指令:ln test2 test3
常用组合指令:
NA
指令不常用/组合用法还需继续挖掘:
NA