文章

Linux中的软硬链接

硬链接指向文件在硬盘中的位置;而软连接指向文件,文件则指向在硬盘中的位置。\

在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index) ;

硬链接

1
ln [源文件] [目标文件]

硬链接等于cp -p 加 同步更新。同一节点可以指向多个文件名;即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件;删除其中任何一个都不会影响另外一个的访问。

软连接

1
ln -s [源文件] [目标文件]

类似于Windows快捷方式;指向的是两个不同的 inode,继而指向两块不同的数据块;之间是“主从”关系,如果源文件B 被删除了,则软连接A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[centos@wyw]$ touch f1          #创建一个测试文件f1
[centos@wyw]$ echo "I am f1 file" >>f1   #向f1写入内容
[centos@wyw]$ ln f1 f2          #创建f1的一个硬连接文件f2
[centos@wyw]$ ln -s f1 f3       #创建f1的一个符号(软)连接文件f3
[centos@wyw]$ ls -li            # -i参数显示文件的inode节点信息
total 0
9797648(节点) -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1   #源文件链接
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2         #硬链接
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1   #软连接
[centos@wyw]$ cat f1      #查看f1文件内容
I am f1 file
[centos@wyw]$ cat f2      #查看f2文件内容
I am f1 file
[centos@wyw]$ cat f3      #查看f3文件内容
I am f1 file
[centos@wyw]$ rm -f f1    #删除源文件f1
[centos@wyw]$ cat f2
I am f1 file
[centos@wyw]$ cat f3
cat: f3: No such file or directory

注:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号(软)连接 f3 文件无效

本文由作者按照 CC BY 4.0 进行授权