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
删除软链接对象后,会有显著提示
复制备份文件后软链接恢复
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
不能写相对路径,需要写完整路径
总结:
硬链接和符号链接的相同点:
都可以修改原文件:硬链接是在inode
层面上去修改inode
记录的数据区块,修改其中一个硬连接文件则所有文件都会被同步修改;符号链接作为“快捷方式”修改的是它所存放的链接并通过链接打开的原文件
硬链接和符号链接的不同点 :
建立链接之后再删除原文件则符号链接失效,但是硬链接不会失效:符号链接失效的原理与“快捷方式”相同,硬链接不失效是因为已经建立了inode
到数据区块的链接;
读取权限不同:硬链接的权限和原文件的权限相同,符号链接的权限是777(rwxrwxrwx
);
文件类型不同:硬链接是普通文件(-),符号链接是链接文件(l)
占用空间不同:硬链接不需要额外存储数据和inode
结构,但需要额外存储目录项。分配目录项时可能造成多种目录结构甚至全局结构的变化,也是需要额外更多的空间。软链接有为其目录项分配的空间,有其inode
结构占用的空间,还有其扩展属性和额外的存储数据的空间。