本文翻译http://linuxgazette.net/105/pitcher.html
虽然网上已有大量的简绍但还不是很详细,有些细节没有提到,所有我翻译一下整理出来和大家分享,也方便自己记忆。翻译不准确之处希望大家指出来共同进步。
Unix系统的文件包含两部分:数据部分(data part)和文件名部分(filename part)
数据部分被关联到称做'inode'(节点索引)的这个事物上。inode是一个数据地址,权限等的集合。
.---------------> ! 数据! ! 数据 ! 等
/ +------data part------+
! 权限, 等! 数据的地址!
+------------inode---------------+
文件名部分包含文件的名称和inode.
.--------------> ! 权限, 等 ! 数据的地址 !
/ +---------inode-------------+
! 文件名称! inode # !
+---------filename part--------+
多个文件名可以有有相同的Inode,这些文件称作被硬链接(Hard Link)在一块了。
! 文件名称! inode # !
+---------fielname part--------+
\
>--------------> ! 权限, 等 ! 数据的地址 !
/ +---------inode-------------+
! 其它的文件名称! inode # !
+---------filename part--------+
那么咋们来看一个综合点儿的图:
!文件名称! inode # !
+---------filename part--------+ .---------------> ! 数据! ! 数据 ! 等
\ / +------dart part------+
>--------------> ! 权限, 等 ! 数据的地址 !
/ +---------inode-------------+
! 其它的文件名称! inode # !
+---------filename part---------+
从另一方面来说,有一种特殊的文件类型,数据部分包含其它而文件的路径。因为它是特殊的文件,系统作为路径去识别这个数据,再直接打开,读,写,而不是在特殊的文件中访问数据,它们在以这个特殊的文件中的数据命名的文件访问数据。这个特殊的文件称作软链接("soft link")或者符号链接("symbolic link","symlink").
! 文件名称! inode # !
+-------filename part-------+
\
.-------> ! 权限, 等 ! 数据的地址 !
+---------inode-------------+
/
/
/
.----------------------------------------------'
(
'--> !"/path/to/some/other/file"!
+---------data part-------------+
/ }
.~ ~ ~ ~ ~ ~ ~ }-- (redirected at open() time)
( }
'~~> ! 文件名称! inode # !
+------filename part-------+
\
'------------> ! 权限, 等 ! 数据的地址 !
+---------inode-------------+
/
/
.----------------------------------------------------'
(
'-> ! 数据! ! 数据 ! 等
+------dart part------+
现在,这个文件的文件名部分连同其它文件的文件部分被存放在一个特殊的文件中,这个特殊的文件就是一个目录,但也是文件,它是一个其它文件部分的数组。
当建立一个目录的时候,它首先被两个特殊的文件的文件部分填充,'.','..'。
'.'文件的文件部分由已经创建入口的目录文件的'inode#'填充。'.'文件是一个当前目录的硬链接。
'..'文件的文件部分由一个包含当前目录文件的文件部分的'inode#'填充。'..'文件是一个当前目录的上一级目录的硬链接。
ln命令知道如何去创建一个硬链接和软链接。mkdir命令知道如何去创建文件夹。
让我们证明一下:
1,现用mkdir test命令创建一个test目录,他的inode是2387402
2,进入test目录查看,发现'.'的inode和test目录的inode是相同的,都是2387402
3,创建一个文件basic.file
4,为这个文件做一个硬链接
hardlink.file和basic.file共享相同的inode(2387403),相同的数据。
5,修改basic.file的权限
hardlink.file的权限也改了。
6,为basic.fiel做一个软链接
我们虽然看到softlink.file 的数据和 basic.file , hardlink.file 数据相同,但是inode是不同的2387404<->2387403,而且权限也不相同,还多了一个权限位'l'(softlink)。
7,删除basic.file
通过硬链接任能访问原文件的数据,但是软链接已经无法访问了。
由于是本人的第一篇博客,经过了多次修改,访问的时候还是不好看,这里向访问的朋友致歉!