当前课程知识点:Linux系统管理 > 管好文件 > 文件链接 > Video
各位同学
大家好
在本讲中
我们将要学习如何在Linux中
为文件创建硬链接和符号链接
并探讨两者之间的相同和不同之处
我们首先来了解一下符号链接文件
符号链接文件很容易理解
因为它与Windows里面的“快捷方式”
这个东西很像 Windows桌面上
放的那些带箭头图标
都是快捷方式文件
这些文件一般都很小
仅仅提供了指向另外实际文件的一个通道
Linux里面的符号链接也一样
创建符号链接命令很简单
使用 ln 命令 也即“link”的缩写
并加上一个“-s”选项
表示创建的是符号(Symbolic)链接
ln 后可以跟两个参数
前一个参数是源文件
也即链接要指向的文件
后一个参数是要创建的链接文件名
接下来我们就来尝试创建一个符号链接
我们准备为/tmp目录下的hello.sh文件
创建一个名为hello_slink符号链接
好 链接创建完成
虽然我们可以通过符号链接文件
来读 写和执行源文件
但这完全不代表符号链接文件
和源文件是同一个文件
我们分别来列出
源文件hello.sh和符号链接文件hello_slink
我们观察到源文件
和其符号链接文件
完全是两个不同的文件
不仅名字不一样
文件的各个属性都不同
同时 我们还注意到
符号链接文件的名字非常特殊
名字中不仅有符号链接文件名
还有目标文件名
如果符号链接文件
所指向的源文件被删除了
那么这个符号链接文件就失效
读取或者执行这个符号链接文件
会显示“没有那个文件或目录”的提示
其名字也会变为醒目的红色
这种情况
我们就称这个符号链接“断裂”了
符号链接应用比较灵活
可以为任意文件创建符号链接
接下来我们再来了解下硬链接
虽然两者名字里都有“链接”
硬链接文件和符号链接文件
还是相当不一样的
说两者“不一样”
不仅因为两者表现出来的
特征有所不同
更重要的是两者的原理也大相径庭
要理解硬链接
我们得先了解若干基本概念
首先我们得搞明白
Linux的文件到底是如何存储的
在Linux中
当划分磁盘分区并格式化的时候
整个分区会被划分为两个部分
即inode区和data block区
Linux中的每个文件
都分成两部分存放
一部分是文件的唯一标识
inode-number以及属性信息
放inode区的一个inode中
inode-number和inode是一一对应的
另一部分是文件的实际数据
放置在data block区中
在Linux中我们需要通过
文件的inode来找到存放文件数据的data block
在一个硬盘分区中
不可能有两个文件的共用一个inode
自然也不可能有
两个文件的inode-number是一样的
如果我们将一个硬盘分区中的
所有文件比作一本书的话
inode区就是其目录
data block区就是其内容
我们必须的通过目录
才能够找到具体的内容
我们可以通过在 ls -l命令后
加上一个“-i“ 选项
列出文件的 inode-number来进行观察
第一个字段就是文件的 inode-number
至此我们初步弄明白了
Linux的文件到底是如何存储的
接下来我们还得弄明白另一个问题
Linux中的目录到底是怎样的文件
简单来说
Linux中的目录是一张表
每个表项都代表了一个文件
目录中有多少文件
这张表中就有多少表项
每个表项中都包括了两样数据
一是文件名
再就是该文件inode-number
因此 Linux中存取文件的过程就是
通过文件名找到对应inode-number
然后找到文件的inode
最后找到文件的数据
弄懂了这两个概念后
我们就可以解释硬链接这个东西了
硬链接其实很简单
就是在目录这张表中
让一个inode-number对应了多个文件名
文件inode和数据还是一份 没变
只不过文件多个一个名字
这个名字就被称为硬链接
创建硬链接同样使用ln命令
参数也一样
前一个参数是源文件
也即链接要指向的文件
后一个参数是要创建的链接文件名
只不过不需要加上 –s选项了
接下来我们就来为/tmp目录下的
sample.txt文件创建一个硬链接
sample_hl01 可以观察到在创建前后
文件属性的第二个字段发生了改变
由1变成了2
表示文件的硬链接数目增加了1
然后我们再为sample.txt创建一个
硬链接sample_hl02
此时文件的硬链接数目变成了3
但我们清楚
无论是sample.txt还是sample_hl01
还是sample_hl02
本质上是同一个文件
只不过这个文件有多个名字罢了
这一点我们可以通过列出
相关文件的 inode-number来进行观察验证
好
我们可以看到
这三个文件的inode-number是一样的
充分说明了这三个文件名本质上
就是同一文件
我们可以通过任意一个
硬链接文件来读 写 执行源文件
接下来 很自然
我们肯定会想
如果将源文件删除掉
创建的硬链接会不会
像符号链接一样“断裂”呢
我们来验证一下
首先将源文件sample.txt删除
我们发现此时两个硬链接文件
除了文件属性中的硬链接数目变成了2
仍然能够照常打开
文件属性和文件内容并无异常
我们再删除sample_hl02文件
余下的sample_hl01文件
除了文件属性中的硬链接数目
变成了1 其他一切仍然正常
这很容易理解
我们为sample.txt文件
创建了两个硬链接
sample_hl01和sample_hl02
那么就相当于这个文件
在文件系统中有了三个文件名
这三个文件名都指向同一份文件内容
有点类似于“狡兔三窟”的感觉
删除了一个文件
只是将某个文件名从文件系统中移除了
我们仍然可以通过余下的文件名
来访问这个文件的数据
事实上
只要文件还存在着一个文件名
这个文件就一切正常
仍然可以访问
除非将这三个文件都删除
我们才无法通过文件名找到
文件inode 进而访问文件数据
文件才算真正被删除掉
硬链接由于文件系统的限制
不如符号链接灵活
有两条特别需要提醒大家
一 是我们强烈不推荐为目录创建硬链接
容易造成目录遍历死循环
具体原因较为复杂
有兴趣的同学可以参见这个链接
二 是不能跨硬盘分区创建硬链接
原因很简单
就是在不同的分区中
文件的inode-number不再是唯一的了
具体详细解释可以参见这个链接
ok 关于文件链接我们就讲到这了
谢谢大家观看 下次见
-Linux那些事儿
-选择合适的Linux版本
--微视频
-建立一台虚拟机
--微视频
-安装Linux系统
--微视频
-与Linux进行交互
--微视频
-用好帮助文档man
--Video
-关闭和重启Linux
--微视频
-初识Linux--初识Linux测试
-切换创建和删除目录
--微视频
-列出文件和文件属性
--Video
-拷贝、剪切、删除和创建文件
--Video
-文件链接
--Video
-归档压缩文件
--Video
-查找文件
--Video
-通配符
--Video
-查看文本文件
--Video
-管好文件--用好文件测试01
-管好文件--用好文件测试02
-重定向
--Video
-管道
--Video
-用好重定向和管道--用好重定向和管道测试
-vi 入门
--Video
-vi 初探
--Video
-用好vi--用好vi测试
-用户和用户组
--Video
-查看用户
--Video
-切换用户身份
--Video
-创建、修改和删除用户
--Video
-创建、修改和删除用户组
--Video
-部分让渡根用户权限
--Video
-用户管理配置文件
--Video
-管好用户--管好用户测试
-查看硬盘
--Video
-分区和格式化硬盘
--Video
-手动挂载和卸载分区
--Video
-开机自动挂载分区
--Video
-管好硬盘--管好硬盘测试
-查看和操纵网络接口
--Video
-配置TCP/IP网络参数
--Video
-管好网络--管好网络测试
-用RPM管理软件
--Video
-用yum管理软件
--Video
-为yum配置软件源
--Video
-管好软件包测试--作业
-查看进程
--Video
-操纵进程
--Video
-查看和操纵系统服务
--Video
-管好进程和服务--管好进程和服务测试
-用SSH协议远程联机
--Video
-为SSH服务器配置密钥认证登录
--Video
-管好远程联机服务器--管好远程联机服务器测试