发表于: 2016-10-20 15:57:33
0 826
标签:
inode
软链接
硬链接
一、ionde及inode编号
在计算机中,信息一般以扇区(sectors)的形式存储在硬盘上,而每个扇区包括512个字节的数据和一些其他信息(即一个扇区包括两个主要部分:存储数据地点的标识符和存储数据的数据段)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(blocks)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sectors组成一个 blocks。
如此以来对于操作系统而言,必须采用一种方式来找到这个存储文件数据的“块”,为此操作系统便引入了一个非常重要的概念”inode”,中文名为“索引结点” 。既然引进inode的目的是为了找到“块”,那么inode中必然包括像文件数据block位置这么重要的信息,当然也不仅仅包括这么一个信息等。
inode包含文件的元信息,具体有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
Linux 在读取数据的时候,是先查询 inode table 以得到数据是放在那个 Block 里面,然后再去该 Block 里面读取真正的数据内容。这个inode编号在一定范围内(在同一个分区内)是唯一的,类似于我们的身份证。所以对于Linux来说,ionde编号是唯一辨识一个文件的表示符号。
二、硬链接
由于inode编号作为Linux内唯一辨识一个文件的表示符号,Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
硬链接的特性:
1)只能对已存在的文件进行创建,创建硬链接会在inode里不添加计数。
2)指向inode相同,与源文件的data block也相同。
3)不能对目录创建硬链接。
4)不能跨文件系统进行硬链接的创建。
5)创建硬链接会在硬链接父目录添加映射条目:hard link映射源文件inode。
6)删除一个硬链接文件,会在父目录清除该条映射,inode计数减一,所以不影响其他有相同 inode 号的文件。
示例:
1)只能对已存在的文件创建硬链接,源文件不存在则无法创建硬链接,创建硬链接会对ionde里不添加计数
[root@localhoast testdir]# ls
21.sh dir1 www
[root@localhoast testdir]# ln aaa bbb
ln: accessing `aaa': No such file or directory
[root@localhoast testdir]#
2)不能对目录创建硬链接
[root@localhoast /]# ls -ld testdir/
drwxr-xr-x. 3 root root 4096 Oct 19 19:47 testdir/
[root@localhoast /]# ln testdir aaa
ln: `testdir': hard link not allowed for directory
3)不支持跨文件系统建立硬链接
[root@localhoast ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
51475068 2002336 46851292 5% /
tmpfs 502068 0 502068 0% /dev/shm
/dev/sda1 487652 34526 427526 8% /boot
/dev/mapper/vg_localhoast-lv_home
69608928 53032 66013268 1% /home
[root@localhoast ~]# touch /home/source
[root@localhoast ~]# ln /home/source /boot/aaa
ln:
4)创建硬链接会在硬链接父目录添加映射条目:hard link映射源文件inode
5)删除一个硬链接文件,会在父目录清除该条映射,连接数计数减一,ionde数目无变化所以不影响其他有相同 inode 号的文件。
三、软链接
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
通俗的来讲,软链接就是相当于window操作系统里面的快捷方式。当源文件被删除之后,快捷方式(软连接)也就没有作用了。
软链接的特性:
1)可以指向一个目录。
2)可以跨文件系统(分区)。
3)是一个指向源文件名称的指针,是一个独立的文件。
4)指向的是另一个文件的路径;其大小为指向的路径字符串的长度;增加或减少目标文件inode 的引用计数。
特性示例:
1)可以指向一个目录
[root@localhoast testdir]# ls
21.sh dir1 www
[root@localhoast testdir]# ls -ld dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
[root@localhoast testdir]# ln -s dir1 aaa
[root@localhoast testdir]# ll
total 8
-rw-r--r--. 1 root root 0 Oct 19 03:09 21.sh
lrwxrwxrwx. 1 root root 4 Oct 19 20:42 aaa -> dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
-rw-r--r--. 1 root root 192 Oct 19 05:43 www
2)可以跨文件系统(分区)
[root@localhoast ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
51475068 2002328 46851300 5% /
tmpfs 502068 0 502068 0% /dev/shm
/dev/sda1 487652 34527 427525 8% /boot
/dev/mapper/vg_localhoast-lv_home
69608928 53032 66013268 1% /home
[root@localhoast ~]# cd /home/
[root@localhoast home]# ls
han lost+found source
[root@localhoast home]# ln -s han /boot/abc
[root@localhoast home]# ll /boot/abc
lrwxrwxrwx. 1 root root 3 Oct 19 20:44 /boot/abc -> han
[root@localhoast home]#
3)是一个指向源文件名称的指针,是一个独立的文件
4)指向的是另一个文件的路径;其大小为指向的路径字符串的长度;
会增加和减少inode的计数
评论