Linux 硬链接和软链接

一、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 参数可以创建软链接。

相关推荐

  1. Linux

    2023-12-19 16:38:02       44 阅读
  2. Linux

    2023-12-19 16:38:02       35 阅读
  3. Linux

    2023-12-19 16:38:02       9 阅读
  4. Linux下的

    2023-12-19 16:38:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 16:38:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 16:38:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 16:38:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 16:38:02       18 阅读

热门阅读

  1. 【Spring】Spring AOP

    2023-12-19 16:38:02       30 阅读
  2. 计时器plus

    2023-12-19 16:38:02       43 阅读
  3. el-table表格中数据过长如何使用省略号

    2023-12-19 16:38:02       46 阅读
  4. CDN的特点及意义?

    2023-12-19 16:38:02       42 阅读
  5. kafka设置消费者组

    2023-12-19 16:38:02       44 阅读
  6. Ajax知识点大全

    2023-12-19 16:38:02       35 阅读
  7. [leetcode,动态规划] 完全平方数

    2023-12-19 16:38:02       32 阅读
  8. git运用之.gitignore 配置文件的常用写法及案例

    2023-12-19 16:38:02       37 阅读