现代操作系统为解决信息能独立于进程之外被长期存储的问题引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在
UNIX
系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等I/O
操作设计了一组通用API
,使他们被处理时均可统一使用字节流方式。换言之,UNIX
系统中除进程之外的一切皆是文件,而Linux
保持了这一特性。为了便于文件的管理,Linux
还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使Linux
的文件系统形成一个层级结构的目录树。
Linux
系统中一切皆文件(目录也是文件),每个磁盘里面就是一个完整的文件系统。文件系统可以分为两部分:数据区(data block)
和节点区(inode block)
。数据区就是存放文件数据的区域,节点区是存放目录结构、文件位置等信息的区域。当我们访问文件,首先读取文件的节点inode
。节点里面存储了文件的很多重要信息:文件的唯一标识Inumber
(也叫inode
号或节点号)、创建时间、文件大小、所属用户、读写权限、文件数据在数据区的位置等。
多个文件可以对应同一个节点inode
,但每个文件都有唯一的标识Inumber
,也就是说Inumber
才是文件的唯一标识,而文件名则不是。
读取文件的流程:目录节点 → 目录数据 → 文件节点 → 文件数据
1、用 ln
命令创建硬链接:
shiyanlou:Code/ $ echo 'hello world' > a
shiyanlou:Code/ $ echo 'hello shiyanlou' > b
shiyanlou:Code/ $ ls -il
总用量 8
165197 -rw-rw-r-- 1 shiyanlou shiyanlou 12 7月 18 12:19 a
165203 -rw-rw-r-- 1 shiyanlou shiyanlou 16 7月 18 12:19 b
shiyanlou:Code/ $ ln a ahard
shiyanlou:Code/ $ ls -il
总用量 12
165197 -rw-rw-r-- 2 shiyanlou shiyanlou 12 7月 18 12:19 a
165197 -rw-rw-r-- 2 shiyanlou shiyanlou 12 7月 18 12:19 ahard
165203 -rw-rw-r-- 1 shiyanlou shiyanlou 16 7月 18 12:19 b
ahard
就是 a
的硬链接,创建硬链接后,文件的链接数都从 1 变成了 2
除了文件名不同,ahard
和 a
的所有信息都一样,包括前面的 inode
号和文件大小
其实,ahard
就是一个指针,它和 a
指向相同的文件节点
硬链接可以任意移动,把 a
或 ahard
文件移动到其它目录,是没有问题的
注意:不能对目录创建硬链接,不可以在不同文件系统的文件间建立硬链接
2、用 ln -s
命令创建软链接:
shiyanlou:Code/ $ ln -s b bsoft
shiyanlou:Code/ $ ls -il
总用量 12
165197 -rw-rw-r-- 2 shiyanlou shiyanlou 12 7月 18 12:19 a
165197 -rw-rw-r-- 2 shiyanlou shiyanlou 12 7月 18 12:19 ahard
165203 -rw-rw-r-- 1 shiyanlou shiyanlou 16 7月 18 12:19 b
165205 lrwxrwxrwx 1 shiyanlou shiyanlou 1 7月 18 13:34 bsoft -> b
可以看到,b
和 bsoft
是不同的两个文件,文件节点号不同,大小也不同
访问软链接文件 bsoft
时,系统会识别链接指向的文件 b
并读取
3、软硬链接的一些不同:
硬链接文件就是一个指针文件,软链接文件是新建文件
硬链接只能出现在文件系统内,可以在文件系统内随意移动
软链接可以跨文件系统创建,不能动,动了就找不到了
- 原文件 → 原文件节点 → 原文件数据区
- 硬链接文件 → 原文件节点 → 原文件数据区
-
软链接 → 自己的节点 → 自己的文件数据区 → 文件
硬连接 & 软链接
网友评论