1.命令作用
默认创建硬链接,使用--symbolic创建符号链接/软链接(Create hard links by default, symbolic links with --symbolic.)。
默认情况下,创建每个链接目标(新链接的名称)不应该已经存在(By default, each destination (name of new link) should not already exist.)。
创建硬链接时,每个TARGET(创建链接的实际文件)必须存在(When creating hard links, each TARGET must exist.)。
符号链接可以保存任意文本(Symbolic links can hold arbitrary text;)。
注意:
- 链接包括2种,分别是硬链接和软连接,软链接又叫符号链接
- 硬链接文件ls -l查看无特殊标识,软连接ls -l查看时l开头的文件
- 硬链接不能给目录创建链接,仅软链接可用给目录创建链接
- 硬链接文件和源文件会相互同步更新内容,且硬链接是以副本方式存在,但不占实际空间
2.命令语法
Usage: ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
or: ln [OPTION]... TARGET (2nd form)
or: ln [OPTION]... TARGET... DIRECTORY (3rd form)
or: ln [OPTION]... -t DIRECTORY TARGET... (4th form)
1st form:创建一个到TARGET的链接,名称为LINK_NAME(常用的语法)
2st form:在当前目录中创建一个到TARGET的链接(TARGET在当前目录中无相同的文件目录名)
3st form and 4st form:在DIRECTORY中创建指向每个TARGET的链接(作用不明显)
3.参数详解
OPTION:
- --backup[=CONTROL],对每个现有的目标文件(新链接名称)进行备份,CONTROL可设置如下参数
- none, off,永远不要做备份(即使提供了--backup参数)
- numbered, t,进行编号备份
- existing, nil,如果存在编号备份,则编号,否则简单
- simple, never,总是做简单的备份
- 备份名后缀,默认为'~'符号,除非使用--suffix进行设置(实际测试无明显效果)
- -b,类似于--backup,但-b不接受任何参数,即只能进行简单备份
- -d, -F, --directory,允许超级用户尝试硬链接目录(注意:由于系统限制,可能会失败,即使对于超级用户也是如此)
- -f, --force,删除现有目标文件(新链接的名称)
- -i, --interactive,提示是否删除目的地(新链接的名称),-f是直接删除,-i是提升
- -L, --logical,解引用的目标是符号链接,创建符号链接时指定链接的目标文件或目录的路径(无明显效果)
- -n, --no-dereference,如果LINK_NAME是指向目录的符号链接,则将其视为普通文件(无明显效果)
- -P, --physical,将硬链接直接设置为符号链接(无明显效果)
- -r, --relative,创建相对于链接位置的符号链接,即就算指定全路径创建符号链接,创建好后的符号链接显示是相对路径
- -s, --symbolic,用符号链接代替硬链接,即创建一个符号链接(软链接)
- -S, --suffix=SUFFIX,与--backup命令一起使用时,指定/覆盖通常的备份名后缀(无明显效果)
- -t, --target-directory=DIRECTORY,指定在其中创建链接的DIRECTORY(无明显效果)
- -T, --no-target-directory,始终将LINK_NAME视为普通文件
- -v, --verbose,打印链接文件及其链接源文件对应的名称,默认情况下不打印任何内容
4.常用用例
4.1.1st from(ln [OPTION]... [-T] TARGET LINK_NAME)
4.1.1.创建硬链接
[root@node2 Desktop]# ll
total 8
-rw-r--r--. 1 root root 23 Feb 22 20:09 file1.txt
-rw-r--r--. 1 root root 202 Feb 22 14:22 file2.txt
[root@node2 Desktop]# cat file1.txt
root
bin
daemon
adm
lp
[root@node2 Desktop]# ln file1.txt hln_file1.txt ## 硬链接文件创建不需要参数
[root@node2 Desktop]# ll
total 12
-rw-r--r--. 2 root root 23 Feb 22 20:09 file1.txt
-rw-r--r--. 1 root root 202 Feb 22 14:22 file2.txt
-rw-r--r--. 2 root root 23 Feb 22 20:09 hln_file1.txt
[root@node2 Desktop]# echo 'aaaaa' > file1.txt ## 更新硬链接源文件,硬链接文件也更新
[root@node2 Desktop]# cat file1.txt
aaaaa
[root@node2 Desktop]# cat hln_file1.txt
aaaaa
[root@node2 Desktop]# echo 'bbbbb' >> hln_file1.txt ## 更新硬链接文件,硬链接源文件也更新
[root@node2 Desktop]# cat file1.txt
aaaaa
bbbbb
[root@node2 Desktop]# cat hln_file1.txt
aaaaa
bbbbb
[root@node2 Desktop]# ll ## 硬链接文件和硬链接源文件大小一致
total 12
-rw-r--r--. 2 root root 23 Feb 22 20:09 file1.txt
-rw-r--r--. 1 root root 202 Feb 22 14:22 file2.txt
-rw-r--r--. 2 root root 23 Feb 22 20:09 hln_file1.txt
[root@node2 Desktop]#
[root@node2 Desktop]# rm -rf file1.txt
[root@node2 Desktop]# cat hln_file1.txt ## 删除硬链接源文件,硬链接文件可正常访问
aaaaa
bbbbb
[root@node2 Desktop]#
[root@node2 Desktop]#
[root@node2 Desktop]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 7.5G 11G 42% /
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.6M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 297M 147M 151M 50% /boot
tmpfs 98M 4.0K 98M 1% /run/user/42
tmpfs 98M 28K 98M 1% /run/user/0
[root@node2 Desktop]# ll -h
total 2.1G
-rw-r--r--. 1 root root 1.7G Feb 22 20:51 file5.txt
[root@node2 Desktop]#
[root@node2 Desktop]# ln file5.txt hln_file5.txt ## 创建硬链接,ll查看是1.7G,但是总可用空间没有变化,前后都是 11 GB
[root@node2 Desktop]# ll -h
total 4.1G
-rw-r--r--. 2 root root 1.7G Feb 22 20:51 file5.txt
-rw-r--r--. 2 root root 1.7G Feb 22 20:51 hln_file5.txt
[root@node2 Desktop]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 7.5G 11G 42% /
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.6M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 297M 147M 151M 50% /boot
tmpfs 98M 4.0K 98M 1% /run/user/42
tmpfs 98M 28K 98M 1% /run/user/0
[root@node2 Desktop]#
说明:
- 硬链接不需要任何参数,
- ll(ls -l)查看硬链接文件与普通文件没有任何区别
- 更新硬链接文件或者链接源文件,另外一个文件都会更新
- 硬链接文件和链接源文件大小一致,以副本方式存在,但不占用实际空间
- 删除硬链接源文件,硬链接文件内容也可正常访问
4.1.2.创建软链接
[root@node2 Desktop]# ll
total 8
-rw-r--r--. 1 root root 202 Feb 22 14:22 file2.txt
-rw-r--r--. 1 root root 12 Feb 22 20:10 hln_file1.txt
[root@node2 Desktop]# ln -s file2.txt sln_file2.txt ## 软链接需要指定-s参数
[root@node2 Desktop]# ll ## 软连接和软链接源文件大小不一样
total 8
-rw-r--r--. 1 root root 202 Feb 22 14:22 file2.txt
-rw-r--r--. 1 root root 12 Feb 22 20:10 hln_file1.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:18 sln_file2.txt -> file2.txt
[root@node2 Desktop]#
[root@node2 Desktop]# echo 'aaaaa' > sln_file2.txt ## 更新软连接文件,软连接源文件也更新
[root@node2 Desktop]# cat file2.txt
aaaaa
[root@node2 Desktop]# cat sln_file2.txt
aaaaa
[root@node2 Desktop]# echo 'bbbbb' >> file2.txt ## 更新软连接源文件,软连接文件也更新
[root@node2 Desktop]# cat file2.txt
aaaaa
bbbbb
[root@node2 Desktop]# cat sln_file2.txt
aaaaa
bbbbb
[root@node2 Desktop]#
[root@node2 Desktop]# ll
total 8
-rw-r--r--. 1 root root 12 Feb 22 20:20 file2.txt
-rw-r--r--. 1 root root 12 Feb 22 20:10 hln_file1.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:18 sln_file2.txt -> file2.txt
[root@node2 Desktop]# rm -rf file2.txt ## 删除软链接源文件,软链接文件->后的原文件名称会闪烁,且软链接文件不能正常访问
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 12 Feb 22 20:10 hln_file1.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:18 sln_file2.txt -> file2.txt
[root@node2 Desktop]# cat sln_file2.txt
cat: sln_file2.txt: No such file or directory
[root@node2 Desktop]#
说明:
- 软链接需要添加-s参数,
- ll(ls -l)查看软链接文件与普通文件有区别,软连接以 l 开头
- 更新软链接文件或者链接源文件,另外一个文件都会更新
- 硬链接文件和链接源文件大小不一致,不管怎么更新文件内容软链接大小都不变
- 删除软链接源文件,软链接文件内容不可正常访问
- 软链接实质类似Windows的快捷键
4.1.3.链接存在删除链接
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
[root@node2 Desktop]# ln -s file3.txt sln_file3.txt ## 创建一个软链接
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:29 sln_file3.txt -> file3.txt
[root@node2 Desktop]#
[root@node2 Desktop]# ln -s file3.txt sln_file3.txt ## 创建一个已经存在的软连接,默认会报错
ln: failed to create symbolic link ‘sln_file3.txt’: File exists
[root@node2 Desktop]# ln -f -s file3.txt sln_file3.txt ## 添加-f参数,创建一个已经存在的连接,会强制删除已经存在的文件,再创建链接文件
[root@node2 Desktop]# ll ## 可用看文件名称前时间,已经变化
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:30 sln_file3.txt -> file3.txt
[root@node2 Desktop]#
[root@node2 Desktop]# ln -i -s file3.txt sln_file3.txt ## 添加-i参数,创建一个已经存在的连接,会有提示,输入y则删除重建,输入n则退出
ln: replace ‘sln_file3.txt’? y
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:37 sln_file3.txt -> file3.txt
[root@node2 Desktop]#
4.1.4.链接存在备份链接
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:37 sln_file3.txt -> file3.txt
[root@node2 Desktop]# ln --backup=t -s file3.txt sln_file3.txt ## 链接文件已经存在,使用--backup会备份链接文件,备份链接文件后缀为'~',t 意思是使用数值编号
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:39 sln_file3.txt -> file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:37 sln_file3.txt.~1~ -> file3.txt
[root@node2 Desktop]# ln --backup=t -s file3.txt sln_file3.txt
[root@node2 Desktop]# ll
total 4
-rw-r--r--. 1 root root 32 Feb 22 20:28 file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:39 sln_file3.txt -> file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:37 sln_file3.txt.~1~ -> file3.txt
lrwxrwxrwx. 1 root root 9 Feb 22 20:39 sln_file3.txt.~2~ -> file3.txt
[root@node2 Desktop]#
4.2.2nd form(ln [OPTION]... TARGET)
[root@node2 Desktop]# ll
total 0
drwxr-xr-x. 2 root root 23 Feb 22 20:41 dir1
[root@node2 Desktop]# ll dir1/*
-rw-r--r--. 1 root root 32 Feb 22 20:41 dir1/file4.txt
[root@node2 Desktop]# ln -s dir1/file4.txt ## 当前目录不存在file4.txt,则创建软链接的名称默认与源文件名称相同
[root@node2 Desktop]# ll
total 0
drwxr-xr-x. 2 root root 23 Feb 22 20:41 dir1
lrwxrwxrwx. 1 root root 14 Feb 22 20:42 file4.txt -> dir1/file4.txt
[root@node2 Desktop]#