开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
硬链接和软链接的概念经常傻傻分不清,实践出真知,一文搞懂软链接和硬链接。所有的文件,其真实的数据都是保存在磁盘上的,我们肉眼可见的那些文件,其实都是一个个链接文件。
Let us go …
一、索引节点
索引节点是unix
系统中的一种数据结构,其本质是结构体,包含了与文件系统中各个文件相关的一些重要信息,在Unix
创建文件系统的同时会创建大量的inode
,通常,文件系统磁盘空间中大约1%
的空间分配给了inode
表。我们平时所说的索引编号其实是inode
的标识标号,索引编号只是文件相关信息中一项重要的内容。
inode
表包含一份清单,其中列出了对应文件系统的所有 inode
编号。当用户搜索或者访问一个文件时,UNIX
系统通过 inode
表查找正确的 inode
编号。在找到 inode
编号之后,相关的命令才可以访问该 inode
,并对其进行适当的更改。
例如,使用 vi
来编辑一个文件。当您键入 vi
时,在 inode
表中找到 inode
编号之后,才允许您打开该 inode
。在 vi
的编辑会话期间,更改了该 inode
中的某些属性,当您完成操作并键入:wq
时,将关闭并释放该 inode
。通过这种方式,如果两个用户试图对同一个文件进行编辑,inode
已经在第一个编辑会话期间分配给了另一个用户 ID (UID)
,因此第二个编辑任务就必须等待,直到该 inode
释放为止。
(来自百度百科)
如何查看索引编号呢?使用命令ls -li
二、硬链接和软链接
- 硬链接(
Hard Link
)指通过索引节点inode
来进行链接,在linux系统中多个文件名可以指向同一个索引节点,这种链接就称为硬链接。硬链接允许磁盘上的一个文件有多条访问路径,也就是多个文件名,用户可以建立多个硬链接防止误删,只有当所有的硬链接被删除后,磁盘文件数据块及其索引节点才会被清除释放。
- 软链接(
Symbolic Link
)也称为符号链接,类似于windows的快捷方式,它实际上是一个特殊的文件,该文件中包含了另一个文件的位置信息
# 新建a.js文件,数据保存到节点45842921中,并建立a.js到节点的硬链接
touch a.js
# 建立新的硬链接,指向同样的数据节点45842921
ln a.js a_hard.js
# 新建软链接,会新建一个文件(节点45843058),该文件内存有a.js的位置信息,指向a.js
ln -s a.js a_soft.js
# 复制a.js,会将磁盘文件也拷贝一份,这是一份全新的磁盘数据,有新的节点45858534和新的硬链接
cp a.js a_copy.js
查看文件信息如下:
➜ ls -li
total 24
45842921 -rw-r--r-- 2 lijing staff 44 12 17 09:23 a.js
45858534 -rw-r--r-- 1 lijing staff 44 12 17 10:56 a_copy.js
45842921 -rw-r--r-- 2 lijing staff 44 12 17 09:23 a_hard.js
45843058 lrwxr-xr-x 1 lijing staff 4 12 17 09:23 a_soft.js -> a.js
最前面的数字就是索引编号