命令
ln
描述
make links between files
创建链接文件
用法
1 2 3
| ln [OPTION]... [-T] SOURCE LINK_NAME ln [OPTION]... SOURCE... DIRECTORY ln [OPTION]... -t DIRECTORY SOURCE...
|
选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Options: --backup[=CONTROL] 如果目标已存在则先创建一个备份文件,并指定备份文件名 -b 如果目标已存在则先创建一个备份文件 -f 如果目标已存在则覆盖,强制创建链接文件 -i 如果目标已存在则提示 -P 创建硬链接,默认选项 -r 创建相对路径的软链接,必须配合-s选项使用 -s 创建软链接 -S 指定备份文件名的后缀 -t 指定创建链接的目标目录,用于同时创建多个链接 -v 显示链接详情
CONTROL: off 不创建备份文件 t 自动创建数字格式的备份文件,每次创建备份时数字自动累加,格式如~1~,~2~ nil 如果已存在数字格式的备份文件则继续创建数字格式的文件,否则使用文件名加~ simple 备份文件使用文件名加~
|
注意
如果是跨目录创建链接,建议源和目的均使用绝对路径
强烈反对使用嵌套链接,如果链接目录下有其他链接目录,一旦目录结构改变,可能会引起循环嵌套,或者链接失效
删除软链接目录的时候最后一定不要加/,不要使用tab自动补全目录名,否则将会删除源目录下的所有内容,导致数据丢失
硬链接:
1.硬链接不会增加inode值,即与源文件inode值相同,属于同一个文件,只是链接次数依次+1
2.只能对已存在的文件进行创建
3.不能跨驱动器设备或分区创建硬链接
4.硬链接只支持文件,不支持目录
5.删除一个硬链接文件并不影响其他有相同inode值的文件,删除一个链接次数为1的文件则会彻底删除该文件
软连接:
1.软链接相当于创建一个新文件,有自己的文件属性及权限等,链接次数不会增加
2.可对不存在的文件或目录创建软链接
3.软链接可以跨分区建立
4.软链接支持文件或目录
5.软链接相当于快捷方式,推荐使用绝对路径,相对路径的话是相对于软链接的相对路径
6.删除软链接并不影响源文件,如果源文件被删除,则对应的软连接变为死链接,显示为红色,创建或恢复同名源文件,则软连接恢复
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| $ ll -i 33595980 -rw-r--r-- 1 root root 18 Feb 9 11:06 a 50877596 drwxr-xr-x 2 root root 6 Feb 9 11:06 dir1/
$ ln a a1
$ ll -i a* 33595980 -rw-r--r-- 2 root root 18 Feb 9 11:06 a 33595980 -rw-r--r-- 2 root root 18 Feb 9 11:06 a1
$ ln -s a b
$ ln -s dir1 dir2
$ ln -si a b ln: replace 'b'? y
$ ln -sv a b ln: failed to create symbolic link 'b': File exists
$ ln -sfv a b 'b' -> 'a'
$ ln -sb a b
$ ln -s -S.lbak a b $ ll b* lrwxrwxrwx 1 root root 1 Feb 9 12:50 b -> a lrwxrwxrwx 1 root root 1 Feb 9 12:50 b~ -> a lrwxrwxrwx 1 root root 1 Feb 9 12:50 b.lbak -> a
$ ln -s a dir1/a1
$ ln -rs a dir1/a2
$ ll dir1 lrwxrwxrwx 1 root root 1 Feb 9 11:56 a1 -> a lrwxrwxrwx 1 root root 4 Feb 9 11:56 a2 -> ../a
$ ln -s /root/a /tmp/aa $ ll /tmp/aa lrwxrwxrwx 1 root root 7 Feb 9 13:30 /tmp/aa -> /root/a
$ mkdir dir2 $ touch a c
$ ln -srv a c dir2 'dir2/a' -> '../a' 'dir2/c' -> '../c' $ rm -rf dir2/*
$ ln -srv -t dir2 a c 'dir2/a' -> '../a' 'dir2/c' -> '../c' $ ll dir2 lrwxrwxrwx 1 root root 4 Feb 9 13:20 a -> ../a lrwxrwxrwx 1 root root 4 Feb 9 13:20 c -> ../c
$ ln -sv --backup=nil a b 'b' -> 'a' $ ln -sv --backup=nil a b 'b~' ~ 'b' -> 'a'
$ ln -sv --backup=t a b 'b.~1~' ~ 'b' -> 'a'
$ ln -sv --backup=t a b 'b.~2~' ~ 'b' -> 'a'
$ ln -sv --backup=nil a b 'b.~3~' ~ 'b' -> 'a'
$ touch dir1/a $ mkdir dir1/d1 $ ls dir1/ a d1/
$ ln -s dir1 dir2 $ ls dir2 a d1/
$ rm dir2 rm: remove symbolic link 'dir2'? n
$ rm dir2/ rm: cannot remove ‘dir2/’: Is a directory
$ rm -rf dir2/ $ ls dir1 dir2 dir1: dir2:
$ tree dir* dir1 ├── d1 │ └── aa └── d2 -> ../dir2/d2 dir2 ├── d1 -> ../dir1/d1 └── d2
$ mv dir2 dir3 $ tree dir* dir1 ├── d1 │ └── aa └── d2 -> ../dir2/d2 dir3 ├── d1 -> ../dir1/d1 └── d2
$ ll dir1 drwxr-xr-x 2 root root 16 Feb 9 14:19 d1/ lrwxrwxrwx 1 root root 10 Feb 9 14:19 d2 -> ../dir2/d2 $ ll dir3 lrwxrwxrwx 1 root root 10 Feb 9 14:19 d1 -> ../dir1/d1/ drwxr-xr-x 2 root root 6 Feb 9 14:18 d2/
|