Linux硬链接和软链接

标签:

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里添加计数

[[email protected] testdir]# ls
21.sh  dir1  www
[[email protected] testdir]# ln aaa bbb
ln: accessing `aaa: No such file or directory
[[email protected] testdir]#

2)不能对目录创建硬链接

[[email protected] /]# ls -ld testdir/
drwxr-xr-x. 3 root root 4096 Oct 19 19:47 testdir/
[[email protected] /]# ln testdir aaa
ln: `testdir: hard link not allowed for directory

3)不支持跨文件系统建立硬链接

[[email protected] ~]# 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
[[email protected] ~]# touch /home/source
[[email protected] ~]# ln /home/source /boot/aaa
ln:

4) 创建硬链接会在硬链接父目录添加映射条目: hard link 映射源文件 inode

5) 删除一个硬链接文件,会在父目录清除该条映射, inode 计数减一,所以不影响其他有相同 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)可以指向一个目录

[[email protected] testdir]# ls
21.sh  dir1  www
[[email protected] testdir]# ls -ld dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
[[email protected] testdir]# ln -s dir1  aaa
[[email protected] 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)可以跨文件系统(分区)

[[email protected] ~]# 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
[[email protected] ~]# cd /home/
[[email protected] home]# ls
han  lost+found  source
[[email protected] home]# ln -s han  /boot/abc
[[email protected] home]# ll /boot/abc 
lrwxrwxrwx. 1 root root 3 Oct 19 20:44 /boot/abc -> han
[[email protected] home]#

3)是一个指向源文件名称的指针,是一个独立的文件

4)指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件 inode 的引用计数。

  • 版权声明: 本文源自互联网, 于4个月前,由整理发表,共 3157字。
  • 原文链接:点此查看原文