一、Inode号
1.基本概念:
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
2.查看inode号
2.1 stat filename
[root@localhost etc]# stat passwd
文件:"passwd"
大小:998 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:17748174 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-09-08 14:12:00.447000011 +0800
最近更改:2023-09-07 12:21:24.798366963 +0800
最近改动:2023-09-07 12:21:24.798366963 +0800
创建时间:-
2.2 ll -i filename
[root@localhost etc]# ll -i passwd
17748174 -rw-r--r--. 1 root root 998 9月 7 12:21 passwd
二、硬链接
1.基本概念
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
2.创建硬链接
ln 源文件 链接文件
[root@localhost opt]# ln /home/file /opt/happy.txt
[root@localhost opt]# ll -d happy.txt
-rw-r--r-- 2 root root 29 9月 8 19:54 happy.txt
3.硬链接的特点
特点一:源文件的inode号于链接文件相同
[root@localhost opt]# ll -i happy.txt
33614093 -rw-r--r-- 2 root root 29 9月 8 19:54 happy.txt
[root@localhost opt]# ll -i /home/file
33614093 -rw-r--r-- 2 root root 29 9月 8 19:54 /home/file
特点二:编辑任一文件其他文件也会同步信息
[root@localhost opt]# echo 'happyhappy' >>happy.txt
[root@localhost opt]# cat happy.txt
我是小张
要每天开心
happyhappy
[root@localhost opt]# cat /home/file
我是小张
要每天开心
happyhappy
特点三、删除源文件不影响链接文件;删除链接文件不影响源文件
[root@localhost opt]# rm -f /home/file
[root@localhost opt]# cat happy.txt
我是小张
要每天开心
happyhappy
[root@localhost opt]# ll -i happy.txt
33614093 -rw-r--r-- 1 root root 40 9月 8 20:03 happy.txt
特点四:目录不能创建硬链接
[root@localhost opt]# mkdir dir
[root@localhost opt]# ln dir dir1
ln: "dir": 不允许将硬链接指向目录
特点五、硬链接不能跨越文件系统
[root@localhost opt]# ln happy.txt /run/a.txt
ln: 无法创建硬链接"/run/a.txt" => "happy.txt": 无效的跨设备连接
三、软链接
3.1基本概念
文件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"链接数"不会因此发生变化。
3.2 创建软连接
ln -s 源文件 链接文件
[root@localhost opt]# ln -s happy.txt /home/file.txt
3.3 软链接特点
特点一:源文件的inode号与链接文件的inode号不同
[root@localhost opt]# ll -i happy.txt
33614093 -rw-r--r-- 1 root root 40 9月 8 20:03 happy.txt
[root@localhost opt]# ll -i /home/file.txt
33614091 lrwxrwxrwx 1 root root 9 9月 8 20:19 /home/file.txt -> happy.txt
特点二:目录可以创建软链接
[root@localhost opt]# ln -s dir dir1
[root@localhost opt]# ll -d dir1
lrwxrwxrwx 1 root root 3 9月 8 20:25 dir1 -> dir
特点三:软链接可以跨越文件系统
[root@localhost opt]# ln -s happy.txt /run/file.txt
特点四 删除源文件后,软链接失效
[root@localhost opt]# cat /home/file.txt
[root@localhost opt]# ll -d /run/file.txt
lrwxrwxrwx 1 root root 9 9月 8 20:38 /run/file.txt -> happy.txt
[root@localhost opt]# cat /run/file.txt
cat: /run/file.txt: 没有那个文件或目录
四、软链接和硬链接的区别
- 软链接可以跨文件系统,硬链接不可以;
- 软链接可以对目录进行连接,硬链接不可以;
- 删除源文件之后,软链接失效,硬链接无影响;
- 软连接有不同的inode号,硬链接相同的inode号;
- 两种链接都可以通过命令 ln 来创建;
- ln 默认创建的是硬链接;
- 使用 -s 参数可以创建软链接。