[ln]软链接和硬链接

参考:

Linux ln命令

Linux硬链接,软连接和复制的区别

命令ln能够为文件创建链接(类似于windows中的快捷方式),分为两种形式:

  1. 软链接
  2. 硬链接

软链接

定义

# -s, --symbolic              make symbolic links instead of hard links
$ ln -s 目标 链接名

软链接又称为符号链接,其特性在于:

1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接

示例

链接文件

# 创建文件a.txt
$ touch a.txt
# 为其创建链接文件b.txt
$ ln -s a.txt b.txt

注意:链接文件不需要提前创建

得到的b.txt就是a.txt的软链接

$ file b.txt 
b.txt: symbolic link to a.txt
$ ls -al b.txt 
lrwxrwxrwx 1 zj zj 5 3月  13 13:58 b.txt -> a.txt

注意 1:修改b.txt或者a.txt都会影响对方

注意 2:删除a.txtb.txt将失效

$ rm a.txt 
$ cat b.txt 
cat: b.txt: 没有那个文件或目录

链接目录

链接目录操作和链接文件一样

$ ln -s 源目录名 结果目录名

注意 1:删除结果目录链接时不要最后加斜杠,像文件一样删除结果链接即可

注意 2:当出现符号连接的层数过多的错误时,使用绝对路径即可解决

硬链接

定义

$ ln 目标 链接名

硬链接中的链接文件是原文件的一个别名,两者是同一文件。其特性如下:

1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建

示例

# 查询两者的inode号
$ ls -ai a.txt 
19663043 a.txt
$ ls -ai b.txt 
19663043 b.txt

可通过命令stat查询其是否属于硬链接(硬链接>=1

$ stat a.txt 
  文件:a.txt
  大小:0          块:0          IO 块:4096   普通空文件
设备:10302h/66306d    Inode:19663043    硬链接:2
...
...
$ stat b.txt 
  文件:b.txt
  大小:0          块:0          IO 块:4096   普通空文件
设备:10302h/66306d    Inode:19663043    硬链接:2
...
...

Note: 删除原文件后,链接文件依然有效

软链接 vs 硬链接

  1. 软链接中的链接文件是独立文件,其指向原文件;而硬链接中的链接文件是原文件的一个别名,两者是同一文件
  2. 软链接可以为目录建链接;硬链接只能用于文件
  3. 硬链接不能跨文件系统操作