Linux命令之ln

ln [选项] … [-T] 目标 链接名    (第一种格式)

ln [选项] … 目标                       (第二种格式)

ln [选项] … 目标 … 目录         (第三种格式)

ln [选项] … -t 目录 目标 …      (第四种格式)

  在第一种格式中,创建指定名称且指向指定目标的链接。

  在第二种格式中,在当前目录创建指向目标位置的同名链接。

  在第三第四种格式中,在指定目录中创建指定目标的同名链接。

  默认创建硬链接。创建软链接(符号链接)时必须使用使用-s或--symbolic选项。

  注意:同一位置不能出现相同的文件名。创建链接时需要注意软硬链接的特性。

  硬链接与软链接详见:硬链接与软链接

 

(1).选项

--backup[=CONTROL] 为每个已存在的目的地文件(链接同地址同名文件)创建备份文件
-b 类似--backup,但不接受任何参数
-d,-F,--directory 创建指向目录的硬链接(只适用于超级用户)
-f,--force 强行删除任何已存在的目标文件
-i,--interactive 删除文件前进行确认
-L,--logical 将硬链接创建为符号链接引用
-n,--no-dereference 如果目的地是一个链接至某目录的符号链接,会将该符号链接当作普通文件处理,先将该已存在的链接备份或删除
-s,--symbolic 创建符号链接而非硬链接
-S,--suffix=后缀 自行指定备份文件的后缀
-t,--target-directory=目录 在指定目录中创建链接
-T,--no-target-directory 将链接名称当作普通文件
-v,--erbose 链接前先列出每个文件的名称

(2).实例

  首先展示四种格式创建链接,以便更好的理解四种格式间的差异

[xf@xuexi ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面
[xf@xuexi ~]$ touch 1
[xf@xuexi ~]$ mkdir newDir Dir1 Dir2
//第一种格式,创建指定名称的目标链接
[xf@xuexi ~]$ ln 1 link1
[xf@xuexi ~]$ ls -l link1 
-rw-rw-r--. 2 xf xf 0 3月  11 10:51 link1
//目标和链接都可以使用绝对或相对路径
[xf@xuexi ~]$ ln /home/xf/1 ./newDir/link2
[xf@xuexi ~]$ ls -l newDir/link2
-rw-rw-r--. 3 xf xf 0 3月  11 10:51 newDir/link2
[xf@xuexi ~]$ cd newDir/
[xf@xuexi newDir]$ ls -l link2 
-rw-rw-r--. 3 xf xf 0 3月  11 10:51 link2
//第二种格式,在当前目录下创建目标的同名链接
[xf@xuexi newDir]$ ln /home/xf/1
[xf@xuexi newDir]$ ls -l
总用量 0
-rw-rw-r--. 4 xf xf 0 3月  11 10:51 1
-rw-rw-r--. 4 xf xf 0 3月  11 10:51 link2
//第三种格式与第四中格式,在指定目录下创建同名链接
[xf@xuexi newDir]$ ln ../1 ../Dir1/
[xf@xuexi newDir]$ ln -t ../Dir2/ ../1
[xf@xuexi newDir]$ cd ../Dir1
[xf@xuexi Dir1]$ ls -l
总用量 0
-rw-rw-r--. 6 xf xf 0 3月  11 10:51 1
[xf@xuexi Dir1]$ cd ../Dir2
[xf@xuexi Dir2]$ ls -l
总用量 0
-rw-rw-r--. 6 xf xf 0 3月  11 10:51 1
//像控制台不太好看到是否是硬链接,那么可以查看所有文件的inode号
[xf@xuexi Dir2]$ stat /home/xf/1 | grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6
[xf@xuexi Dir2]$ stat /home/xf/link1 |grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6
[xf@xuexi Dir2]$ stat /home/xf/newDir/link2 |grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6
[xf@xuexi Dir2]$ stat /home/xf/newDir/1 |grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6
[xf@xuexi Dir2]$ stat /home/xf/Dir1/1 |grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6
[xf@xuexi Dir2]$ stat /home/xf/Dir2/1 |grep Inode
设备:803h/2051d	Inode:52016343    硬链接:6

  为文件创建硬链接和软链接

[xf@xuexi ~]$ touch File  //创建测试文件
[xf@xuexi ~]$ ln File link1  //创建硬链接
[xf@xuexi ~]$ ln -s File link2  //创建软链接
[xf@xuexi ~]$ ls -l link*
-rw-rw-r--. 2 xf xf 0 Mar 11 11:33 link1
lrwxrwxrwx. 1 xf xf 4 Mar 11 11:33 link2 -> File

  根据硬链接与软链接的特性,比较差异

//第一个特性,硬链接与源文件具有相同inode号和data block,修改文件属性或文件数据会应影响所有硬链接(包括源文件);
//软链接虽然有自己的inode号和data block,但修改的其实还是源文件
[xf@xuexi ~]$ stat File |grep Inode  //也可使用ls -i File查看
Device: 803h/2051d	Inode: 52016343    Links: 2
[xf@xuexi ~]$ stat link1 |grep Inode
Device: 803h/2051d	Inode: 52016343    Links: 2
[xf@xuexi ~]$ stat link2 |grep Inode
Device: 803h/2051d	Inode: 52016746    Links: 1
[xf@xuexi ~]$ echo aaaa >> link1  //硬链接修改文件数据
[xf@xuexi ~]$ cat File 
aaaa
[xf@xuexi ~]$ echo aaaa >> link2  //软链接修改文件数据 
[xf@xuexi ~]$ cat File 
aaaa
aaaa
[xf@xuexi ~]$ ll File link2
-rw-rw-r--. 2 xf xf 0 3月 11 14:27 File
lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
[xf@xuexi ~]$ chmod +x link2  //软链接修改文件属性
[xf@xuexi ~]$ ll File link2
-rwxrwxr-x. 2 xf xf 0 3月 11 14:27 File
lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
[xf@xuexi ~]$ stat File 
文件:"File"
大小:0 块:0 IO 块:4096 普通空文件
设备:803h/2051d	Inode:52016343 硬链接:2
权限:(0775/-rwxrwxr-x) Uid:( 1000/ xf) Gid:( 1000/ xf)
环境:unconfined_u:object_r:user_home_t:s0
最近访问:2019-03-11 14:27:29.750638827 +0800
最近更改:2019-03-11 14:27:29.750638827 +0800
最近改动:2019-03-11 14:38:22.936661898 +0800
创建时间:-
[xf@xuexi ~]$ stat link2
文件:"link2" -> "File"
大小:4 块:0 IO 块:4096 符号链接
设备:803h/2051d	Inode:52016746 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 1000/ xf) Gid:( 1000/ xf)
环境:unconfined_u:object_r:user_home_t:s0
最近访问:2019-03-11 14:28:37.354054265 +0800
最近更改:2019-03-11 14:28:37.353054303 +0800
最近改动:2019-03-11 14:28:37.353054303 +0800
创建时间:-
//第二个特性,硬链接不能对不存在的文件进行创建,但软链接可以(包括目录文件)
[xf@xuexi ~]$ ls
File  link1  link2  公共  模板  视频  图片  文档  下载  音乐  桌面
[xf@xuexi ~]$ ln File1 link3
ln: failed to access "File1": 没有那个文件或目录
[xf@xuexi ~]$ ln -s File1 link4
[xf@xuexi ~]$ ls -l link4
lrwxrwxrwx. 1 xf xf 5 3月  11 11:50 link4 -> File1  //这是一个死链接
//第三个特性,硬链接不可以跨文件系统(即分区)创建,软链接可以
[xf@xuexi ~]$ su -
密码:
上一次登录:一 3月 11 13:16:55 CST 2019pts/0 上
[root@xuexi ~]# file -s /dev/sdb1  //查看分区文件系统类型
/dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[root@xuexi ~]# mount /dev/sdb1 /sdb1  //挂载分区
[root@xuexi ~]# ln /home/xf/File /sdb1/link5  //硬链接无法跨文件系统创建
ln: 无法创建硬链接"/sdb1/link5" => "/home/xf/File": 无效的跨设备连接
[root@xuexi ~]# ln -s /home/xf/File /sdb1/link6  //软链接可以,但源文件必须是绝对路径,否则为死链接
[root@xuexi ~]# ls -l /sdb1/link6 
lrwxrwxrwx. 1 root root 13 3月  11 13:19 /sdb1/link6 -> /home/xf/File
//第四个特性,硬链接不能对目录创建链接,但软链接可以
[root@xuexi ~]# exit
登出
[xf@xuexi ~]$ ls
File  link1  link2  link4  公共  模板  视频  图片  文档  下载  音乐  桌面
[xf@xuexi ~]$ mkdir newDir
[xf@xuexi ~]$ ln newDir link7
ln: "newDir": 不允许将硬链接指向目录
[xf@xuexi ~]$ ln -s newDir link8
[xf@xuexi ~]$ ll link8
lrwxrwxrwx. 1 xf xf 6 3月  11 13:26 link8 -> newDir
[xf@xuexi ~]$ cd link8  //link8可以执行cd命令
[xf@xuexi link8]$
//第五个特性,删除源文件,硬链接没有影响;软链接变成死链接,但在相同位置重新创建同名文件,软链接变成指向新文件的链接
[xf@xuexi link8]$ cd ..
[xf@xuexi ~]$ cat File 
aaaa
aaaa
[xf@xuexi ~]$ rm File  //删除源文件
[xf@xuexi ~]$ cat link1  //硬链接没有影响
aaaa
aaaa
[xf@xuexi ~]$ cat link2  //软链接变为死链接
cat: link2: 没有那个文件或目录
[xf@xuexi ~]$ touch File  //相同位置创建同名文件
[xf@xuexi ~]$ echo bbbb >> File
[xf@xuexi ~]$ cat link1  //硬链接没有影响
aaaa
aaaa
[xf@xuexi ~]$ cat link2  //软链接指向新建立的同名文件
bbbb

  如果文件名已存在,可以使用-f选项强制删除已存在的文件

[xf@xuexi ~]$ touch File link1
[xf@xuexi ~]$ ln File link1
ln: 无法创建硬链接"link1": 文件已存在
[xf@xuexi ~]$ ln -f File link1 

  要是不知道文件是否有用,可以使用-b或--backup选项备份已存在的文件。还可使用-S选项指定后缀名。

[xf@xuexi ~]$ touch File link1
[xf@xuexi ~]$ echo aaaa >> link1
[xf@xuexi ~]$ ln -bf File link1  //对已存在的同名文件备份
[xf@xuexi ~]$ ls  //备份文件默认~结尾
File  link1  link1~  公共  模板  视频  图片  文档  下载  音乐  桌面
[xf@xuexi ~]$ cat link1~
aaaa
[xf@xuexi ~]$ touch link2
[xf@xuexi ~]$ echo bbbb >> link2
[xf@xuexi ~]$ ln -bf -S .txt File link2  //指定备份文件的后缀名
[xf@xuexi ~]$ ls
File link1~ link2.txt 模板 图片 下载 桌面
link1 link2 公共 视频 文档 音乐
[xf@xuexi ~]$ cat link2.txt
bbbb

  另外说明一下backup的有效值:none和off这两个值是不进行备份;numbered和t这两个值是备份文件加上数值,例如文件link3,备份后是link3.~1~;existing和nil这两个值是如有数字备份文件则使用数字,否则使用普通方式备份,例如使用有效值t已经备份过一次的link3,此时存在硬链接link3与备份文件link3.~1~,那么再使用有效值nil时会生成一个新的link3,原有的硬链接link3被备份为link3.~2~;simple和never永远使用普通方式备份(结尾~)。

 

  

你可能感兴趣的