🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 链接的概念 [TOC] 在linux系统中,链接可以分为两种: 一种被称为硬链接(Hard Link); 另一种被称为软连接或者符号连接(Symbolic Link)。在默认不带参数情况下,执行ln命令创建的链接是硬链接。 ### 硬链接   硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)或Inode。   在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种连接就称为硬链接。硬链接的左右之一是允许一个文件拥有多个有效的路径名,这样用户就可以就爱能力硬链接到重要的文件,以防止“误删”源数据,那么为什么给文件建立了硬链接就会防止数据误删除呢?   因为文件系统的原理是只要文件的索引节点(Inode Index)还有一个以上的链接(仅仅删除了该文件指向)只删除其中一个链接并不影响索引节点本身和其他的链接(即数据文件实体并未删除),只有当最后一个连接被删除后,此时如果有新数据要存储到硬盘时,被删除文件的数据块及目录的链接才会被释放,空间被新数据占用覆盖。此时,数据就再也无法找回了   也就是说,在linux中,删除文件的条件是与之相关的所有硬链接文件均被删除。    ### 软连接 软连接又是也被称为符号连接(Symbolic Link)软连接文件就类似与Windows系统中的快捷方式,它实际上是一个特殊的文件,在软连接中,软连接文件实际上就是一个文本文件,这个文件中包含有软链接指向另一个文件的文职信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。 ## 实例 ### 新增软、硬链接 ~~~ [root@office6_5 /test/luo] # touch luofile #创建luofile文件 [root@office6_5 /test/luo] # ln luofile luofile_hard_link # 创建硬链接 [root@office6_5 /test/luo] # ln -s luofile luofile_soft_link # 创建软连接 [root@office6_5 /test/luo] # ls -li # 查看列表inode信息 总用量 0 24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile 24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile_hard_link ### 硬链接的inode信息和源文件一致 24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile ~~~ * * * * * ~~~ [root@office6_5 /test/luo] # mkdir luodir [root@office6_5 /test/luo] # ln luodir luodir_hard_link ln: "luodir": 不允许将硬链接指向目录 [root@office6_5 /test/luo] # ln -s luodir luodir_soft_link [root@office6_5 /test/luo] # ls -lih 总用量 4.0K 24389 drwxr-xr-x 2 root root 4.0K 10月 19 23:21 luodir 24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile 24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile_hard_link 24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile 24390 lrwxrwxrwx 1 root root 6 10月 19 23:22 luodir_soft_link -> luodir ~~~ >[danger] `ln` 命令不能对目录创建硬链接,但可以对目录创建软连接,对于目录的软连接也是生产场景常用的功能。 ### 删除软、硬链接 ~~~ [root@office6_5 /test/luo] # echo "this is a file" >> luofile # 给源文件中写入内容 [root@office6_5 /test/luo] # cat luofile # 查看源文件内容 this is a file [root@office6_5 /test/luo] # cat luofile_hard_link # 查看硬链接内容 this is a file [root@office6_5 /test/luo] # cat luofile_soft_link # 查看软链接内容 this is a file [root@office6_5 /test/luo] # rm -f luofile # 删除源文件 [root@office6_5 /test/luo] # ls -lrti 总用量 8 24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile # 软连接由于删除了源文件已经不存在报错了 24389 drwxr-xr-x 2 root root 4096 10月 19 23:21 luodir 24390 lrwxrwxrwx 1 root root 6 10月 19 23:22 luodir_soft_link -> luodir 24387 -rw-r--r-- 1 root root 15 10月 19 23:30 luofile_hard_link [root@office6_5 /test/luo] # cat luofile_hard_link # 硬链接还存在 this is a file [root@office6_5 /test/luo] # cat luofile_soft_link # 软连接已经不存在 cat: luofile_soft_link: 没有那个文件或目录 ~~~ #### 软、硬链接总结 通过上面的测试可以看出:  1 当源文件的软连接和硬链接同时存在时,删除软连接对源文件和硬链接无影响;  2 当源文件的软连接和硬链接同时存在时,删除硬连接对源文件和硬链接无影响;  3 当源文件的软连接和硬链接同时存在时删除原始文件`luofile`后,硬链接`luofile_hard_link`不受影响,但软连接文件`luofile_soft_link`失效(红底,白色文字闪烁状)。 #### 关于目录的链接 1. 对于目录。不可以创建硬链接,但可以创建软连接 2. 对于目录的软链接是生产场景运维中常用的技巧。 ### 软连接的使用案例   在编译apache软件时,编译路径呆着版本号`/usr/local/apache2.2.26`(为了区分版本号,因此路径比较长),而在访问目录时有希望简便,此时就可以通过建立一个简单的软链接路径文件 `ln -s /usr/local/apache2.2.26 /usr/local/apache`来达到简便的目的。 ### 硬链接的使用案例 硬件存储的快照功能或者为备份数据创建多个硬链接,防止误删除数据。