Linux 系统中的硬链接和软链接

2018-07-18  本文已影响0人  Manchangdx

现代操作系统为解决信息能独立于进程之外被长期存储的问题引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 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
除了文件名不同,aharda 的所有信息都一样,包括前面的 inode 号和文件大小
其实,ahard 就是一个指针,它和 a 指向相同的文件节点
硬链接可以任意移动,把 aahard 文件移动到其它目录,是没有问题的
注意:不能对目录创建硬链接,不可以在不同文件系统的文件间建立硬链接

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

可以看到,bbsoft 是不同的两个文件,文件节点号不同,大小也不同
访问软链接文件 bsoft 时,系统会识别链接指向的文件 b 并读取

3、软硬链接的一些不同:

硬链接文件就是一个指针文件,软链接文件是新建文件
硬链接只能出现在文件系统内,可以在文件系统内随意移动
软链接可以跨文件系统创建,不能动,动了就找不到了

上一篇下一篇

猜你喜欢

热点阅读