硬链接和软连接

1、硬链接

硬连接指通过索引节点号来进行连接。

inode是可以对应多个文件名的在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。

原因:因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

常用语法

ln [options] <源文件> <目标文件>

常用参数

-s:创建符号链接而不是硬链接。
-f:强制执行,如果目标文件存在,则覆盖它。
-v:显示详细信息,显示创建链接的过程。

 

例:硬链接passwd,查看stat,Inode相同

[root@fishman-160 ~]# ln passwd passwd1   #ln会创建新的项目名,该文件名具有与原始文件相同的Inode指针,因此多个硬链接文件名指向同一个文件的内容
[root@fishman-160 ~]# stat passwd passwd1  #
  File: passwd
  Size: 2580        Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67188823    Links: 2   
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-13 15:36:08.878272537 +0800
Modify: 2023-07-11 14:02:15.269594390 +0800
Change: 2023-08-01 16:10:12.196548458 +0800
 Birth: 2023-07-11 14:02:15.269594390 +0800
  File: passwd1
  Size: 2580        Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67188823    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-13 15:36:08.878272537 +0800
Modify: 2023-07-11 14:02:15.269594390 +0800
Change: 2023-08-01 16:10:12.196548458 +0800
 Birth: 2023-07-11 14:02:15.269594390 +0800

硬链接不能对目录

[root@fishman-160 ~]# ln /etc/ /test
ln: /etc/: hard link not allowed for directory

硬链接不能跨文件系统

[root@fishman-160 ~]# ln passwd1 /raid0/2.txt
ln: failed to create hard link '/raid0/2.txt' => 'passwd1': Invalid cross-device link

2、软链接(符号链接)

ln -s <源文件或目录> <符号链接文件名>

常用的选项:

-s:创建符号链接而不是硬链接。
-f:强制执行,如果目标文件存在,则覆盖它。
-v:显示详细信息,显示创建链接的过程。

例:创建/etc/passwd的符号链接

[root@fishman-160 ~]# ln -s /etc/passwd passwd3
[root@fishman-160 ~]# ls -l passwd3
lrwxrwxrwx 1 root root 11 Aug  1 16:28 passwd3 -> /etc/passwd

删除软链接对象后,会有显著提示

1690878575558

复制备份文件后软链接恢复

root@fishman-160 ~]# cp /etc/passwd- /etc/passwd
[root@fishman-160 ~]# ls -l passwd3
lrwxrwxrwx 1 root root 11 Aug  1 16:28 passwd3 -> /etc/passwd
[root@fishman-160 ~]# ls -i passwd3 /etc/passwd #观察软链接文件的Inode 和源文件Inode,不相同
36711421 /etc/passwd  67188110 passwd3

不能写相对路径,需要写完整路径

1690878953955

总结:

硬链接和符号链接的相同点:

都可以修改原文件:硬链接是在inode层面上去修改inode记录的数据区块,修改其中一个硬连接文件则所有文件都会被同步修改;符号链接作为“快捷方式”修改的是它所存放的链接并通过链接打开的原文件

硬链接和符号链接的不同点 :

建立链接之后再删除原文件则符号链接失效,但是硬链接不会失效:符号链接失效的原理与“快捷方式”相同,硬链接不失效是因为已经建立了inode到数据区块的链接;

读取权限不同:硬链接的权限和原文件的权限相同,符号链接的权限是777(rwxrwxrwx);

文件类型不同:硬链接是普通文件(-),符号链接是链接文件(l)

占用空间不同:硬链接不需要额外存储数据和inode结构,但需要额外存储目录项。分配目录项时可能造成多种目录结构甚至全局结构的变化,也是需要额外更多的空间。软链接有为其目录项分配的空间,有其inode结构占用的空间,还有其扩展属性和额外的存储数据的空间。

1700548090145

posted @   墨香清梦  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示