目录
引言
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。方便文件的共享使用,在Linux操作系统中引入了连接,链接被分为两种:软链接(Soft Link,符号链接)和硬链接(Hard Link)。在windows操作系统中文件的快捷方式类似于软链接,可执行文件类似于有链接。
创建软连接,硬链接
ln 命令用于给文件创建链接,
ln [选项] 源文件 链接名
NAME
ln - make links between filesSYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME
ln [OPTION]... TARGET
ln [OPTION]... TARGET... DIRECTORY
ln [OPTION]... -t DIRECTORY TARGET...
......ln-s:建立软链接文件。如果不加 "-s" 选项,则建立硬链接文件;
实验目录结构
[root@lilu text1]# tree
.
├── a
├── aa
└── b
└── x
└── z
创建语句
给a文件创建链接
[root@lilu text1]# ln a a.hard
[root@lilu text1]# ln -s a.soft
[root@lilu text1]# tree
.
├── a
├── aa
├── a.hard
├── a.soft -> a.soft
└── b
└── x
└── z
3 directories, 4 files
查看目录,可以看出来目录中多了a.hard以及a.soft
[root@lilu text1]# ll
总用量 0
-rw-r--r--. 2 root root 0 1月 1 14:24 a
-rw-r--r--. 1 root root 0 1月 1 14:24 aa
-rw-r--r--. 2 root root 0 1月 1 14:24 a.hard
lrwxrwxrwx. 1 root root 6 1月 1 14:30 a.soft -> a.soft
drwxr-xr-x. 3 root root 15 1月 1 14:24 b
在Linux中,文件的inode号才是文件的唯一标识而非文件名,文件内容要通过inode号来寻找。文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。
查看a文件状态
[root@lilu text1]# stat a
文件:a
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:18422611 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2023-01-01 14:24:22.586212778 +0800
最近更改:2023-01-01 14:24:22.586212778 +0800
最近改动:2023-01-01 14:29:47.656965735 +0800
创建时间:2023-01-01 14:15:45.079371078 +0800
[root@lilu text1]# stat a.hard
文件:a.hard
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:18422611 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2023-01-01 14:24:22.586212778 +0800
最近更改:2023-01-01 14:24:22.586212778 +0800
最近改动:2023-01-01 14:29:47.656965735 +0800
创建时间:2023-01-01 14:15:45.079371078 +0800
[root@lilu text1]# stat a.soft
文件:a.soft -> a.soft
大小:6 块:0 IO 块:4096 符号链接
设备:fd00h/64768d Inode:18423955 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2023-01-01 14:30:06.990823238 +0800
最近更改:2023-01-01 14:30:02.532856096 +0800
最近改动:2023-01-01 14:30:02.532856096 +0800
创建时间:2023-01-01 14:30:02.532856096 +0800
所以这里a.hard和a的Inode号是一样的,而与a,soft是不一样的, 硬链接和原文件对应一个inode,就是对应一个文件。软链接可以理解成快捷方式,和原文件的inode号不一样,它和Windows下的快捷方式的作用是一样的
二者区别
硬链接的特点如下:
- 不论是修改源文件,还是修改硬链接文件 ,另一个文件中的数据都会发生改变。
- 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。
- 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
- 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
- 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。
我们就可以总结出软链接的特点(软链接的特点和 Windows 中的快捷方式完全一致)。
- 不论是修改源文件),还是修改硬链接文件,另一个文件中的数据都会发生改变。
- 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
- 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
- 软链接可以链接目录。
- 软链接可以跨分区。