## 链接的概念
[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`来达到简便的目的。
### 硬链接的使用案例
硬件存储的快照功能或者为备份数据创建多个硬链接,防止误删除数据。
- Linux的安装
- Linux的软件安装管理
- Linux零碎的命令
- 了解ssh
- 系统调优及安全设置
- Linux系统中的硬链接和软连接
- Linux文件和目录的属性及权限
- 命令总结
- 文件目录管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件检测内核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作场景应用总结
- 自动删除n天前日志
- 删除一个目录下的所有文件但保留一个文件
- Linux软件安装
- php安装(apache版本)
- vsftpd安装
- git安装
- python安装
- LNMP安装
- LAMP安装I
- LAMP安装II
- svn安装
- svn在Linux下的命令操作
- svn钩子简介
- svn代码上传流程
- Crond介绍
- sersync应用指南
- 其他
- 小结一
- 系统调优重新整理tmp
- linux禁止root用户直接登录sshd并修改默认端口