命令格式:
ln -s 源文件 目标文件 #创建软连接
ln s 源文件 目标文件 #创建硬链接
查看实验环境
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
创建一个hosts文件,查看文件详情
[root@localhost ~]# cp /etc/hosts .
[root@localhost ~]# ll hosts
-rw-r--r--. 1 root root 158 8月 26 12:45 hosts
[root@localhost ~]# stat hosts
文件:hosts
大小:158 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16827012 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-08-26 12:45:34.186486440 +0800
最近更改:2023-08-26 12:45:34.186486440 +0800
最近改动:2023-08-26 12:45:34.186486440 +0800
创建时间:-
创建硬链接/tmp/hosts1
1 查看源文件和硬链接详情,发现源文件和硬链接的inode号,大小都一样,并且源文件硬链接数目增加了1。
2 硬链接文件是文本文件。
ln hosts /tmp/hosts1
用相对路径创建软链接/tmp/hosts2
ln -s hosts /tmp/hosts2
查看发现软连接报错,创建失败
删除后再次用绝对路径创建软连接/tmp/hosts2
ln -s /root/hosts /tmp/hosts2
查看软连接创建成功
注:创建软连接是使用绝对路径
查看源文件和软链接文件详情
1 软连接指向了源文件
2 软连接和源文件的大小、inode不一样
查看源文件、硬链接、软连接文件内容,文件内容是一样的
[root@localhost ~]# cat /tmp/hosts2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# cat /tmp/hosts1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
删除源文件后查看硬链接,软链接文件内容,以及文件状态
1 因链接文件可以查看,软连接文件内容不存在
2 硬链接文件的硬链接数目改变为1
3 软连接再次提示失败
[root@localhost ~]# rm hosts
rm:是否删除普通文件 'hosts'?y
[root@localhost ~]# cat /tmp/hosts1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# cat /tmp/hosts2
cat: /tmp/hosts2: 没有那个文件或目录
再次创建文件hosts,发现/tmp/hosts2恢复正常并且可以查看内容,
1 新的源文件的inode号已改变
源文件中内容改变时,硬链接和软链接文件内容都改变
[root@localhost ~]# stat hosts
文件:hosts
大小:158 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16827015 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-08-26 14:11:33.337466760 +0800
最近更改:2023-08-26 14:10:34.612466984 +0800
最近改动:2023-08-26 14:16:42.321465581 +0800
创建时间:-
[root@localhost ~]# stat /tmp/hosts1
文件:/tmp/hosts1
大小:158 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16827015 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-08-26 14:11:33.337466760 +0800
最近更改:2023-08-26 14:10:34.612466984 +0800
最近改动:2023-08-26 14:16:42.321465581 +0800
创建时间:-
[root@localhost ~]# stat /tmp/hosts2
文件:/tmp/hosts2 -> /root/hosts
大小:11 块:0 IO 块:4096 符号链接
设备:fd00h/64768d Inode:25717935 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2023-08-26 14:17:00.976465510 +0800
最近更改:2023-08-26 14:16:34.937465609 +0800
最近改动:2023-08-26 14:16:34.937465609 +0800
创建时间:-
[root@localhost ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# cat /tmp/hosts1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# cat /tmp/hosts2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# echo "ceshi" > hosts
[root@localhost ~]# cat hosts
ceshi
[root@localhost ~]# cat /tmp/hosts1
ceshi
[root@localhost ~]# cat /tmp/hosts2
ceshi
[root@localhost ~]# ll /tmp/hosts1
-rw-r--r--. 2 root root 6 8月 26 14:17 /tmp/hosts1
[root@localhost ~]# ll /tmp/hosts2
lrwxrwxrwx. 1 root root 11 8月 26 14:16 /tmp/hosts2 -> /root/hosts
总结:
1 硬链接存储了存储在硬盘中文件本身(data数据)的元数据,所以和源文件的元数据一样,具有相同的大小,inode等,硬链接指向存储在硬盘中文件本身。
2 软链接是指向源文件的一个链接,软链接存储了源文件的元数据,并不是存储在硬盘本身文件(data数据)的元数据。
3 源文件内容发生改变时,链接文件内容也会改变。
4 源文件删除后,硬链接可以查看文件内容,软链接文件无法查看。