Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(user data) 与 元数据(metadata)
用户数据里记录了文件的真正内容.
元数据里记录的是文件的附加属性,如 文件大小,创建时间,所有者等,其中 上面提到的 index node 就保存在元数据中.在linux 中文件名并不是文件的唯一标识,index onde 才是唯一标示,系统查找文件也是通过 index node 来查找内容数据块.
如何查看文件的 index node:
/Users/zhangzhi >ls -i
31615656 AndroidStudioProjects 30836545 go
1152719 Applications 49115578 images
31827389 CNode 13208576 ktsgs.zip
595399 Desktop 44722768 pandoc_demo
595275 Documents 49218456 pgadmin.log
595277 Downloads 15078624 pomelo
7094352 LevelTest 1009499 project
7098493 LevelTest.zip 1011801 qdb
595388 Library 5901898 qdb.zip
595439 Movies 23150187 test
595441 Music 1010768 tmp
595443 Pictures 17956310 trunk
595445 Public 17970255 trunk.zip
32072972 app 41999857 webwork
1009500 code 13208610 游戏配置
22509232 databak
我们看到的前面的数字序列就是 index node
如何理解呢,你可以想象成 windows 操作系统里的快捷键.对同一个文件的访问提供了多个入口.
指令:
ln [option] link_file source_file
(link_file是待建立链接文件的文件,source_file是新创建的链接文件)
-f 建立时,将同档案名删除.
-i 删除前进行询问.
示例:
软链接
ln -s myfile mylink
软链接创建后,用户数据中存储的并不是文件本身的记录,而是一个指向 原文件路径的一个指针.但是它有自己的 index node 序列.
所以 ,软链接其实就是一个新的文件,但是这个文件很特殊,因为他的用户数据中放的不是文件内容,而是一个指向其他文件的指针.
软链接有下面几个特点:
1.多个软链接有多个不同的 index node
2.不仅可以对文件创建,还可以对目录创建软链接
3.软链接可以交叉文件系统
4.删除软链接 并不会影响原文件,但是原文件被删除,这个软链接就成了一个死链接.
硬链接
ln myfile mylink
硬链接创建后,用户数据中存储的是文件本身记录,其他他的用户数据和元数据都和 myfile 一样,唯一不同的是文件名.
所以硬链接就是同一个文件有了多个文件名, 但是多个文件名都指向了 同一个 index node
这样看来,硬链接就是有多个别名的同一个文件.
硬链接有下面几个特别:
1.他们有相同的 index node
2.有相同的数据记录
3.只能在已经存在文件上创建 硬链接
4.删除其中任何一个,其他硬链接不受影响.
5.只能对文件做硬链接