实例说明软链接和硬链接的区别

正如我们在windows经常使用的创建快捷方式,可以方便日常使用、也节约了存储。
其实Linux也是一样,链接技术不仅实现了系统文件的共享,还可以起到隐藏文件路径、增加权限安全、节约存储等好处。分为软链接和硬链接。

这里通过几个小实验说明其差异。

实验1: 创建软链接和硬链接并查看元数据信息

[root@oracle 1]# stat a
  File: `a'
  Size: 7         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1176436     Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-25 15:38:47.633429956 +0800
Modify: 2020-04-25 15:38:46.657425574 +0800
Change: 2020-04-25 15:39:27.512609228 +0800

我们创建硬链接文件 a.hardlink并查看属性,除了文件名不同,元数据信息完全一致。

[root@oracle 1]# ln -P a a.hardlink 
[root@oracle 1]# stat a.hardlink 
  File: `a.hardlink'
  Size: 7         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1176436     Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-25 15:38:47.633429956 +0800
Modify: 2020-04-25 15:38:46.657425574 +0800
Change: 2020-04-25 15:39:27.512609228 +0800

我们创建软链接并查看属性,元数据信息和原文件差异很大,文件大小、block、文件类型、inode和三个时间属性都不相同。

[root@oracle 1]# ln -s a a.ln
[root@oracle 1]# stat a.ln 
  File: `a.ln' -> `a'
  Size: 1         	Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d	Inode: 1176437     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-25 15:38:20.894310062 +0800
Modify: 2020-04-25 15:38:20.298307390 +0800
Change: 2020-04-25 15:38:20.298307390 +0800

实验2: 跨分区创建链接

[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 9754624 3206348 6548276 33% /
/dev/sda5 6801408 32944 6768464 1% /data
/dev/sda1 484004 169328 314676 35% /boot

在/data目录创建a.txt,并创建硬链接和软链接,都能成功。

[root@localhost data]# touch a.txt
[root@localhost data]# ln -P a.txt a.ln
[root@localhost data]# ll
total 0
-rw-r--r--. 2 root root 0 Apr 25 16:01 a.ln
lrwxrwxrwx. 1 root root 5 Apr 25 16:04 a.softlink -> a.txt
-rw-r--r--. 2 root root 0 Apr 25 16:01 a.txt

然后到/data目录执行相同的操作,创建硬链接失败并报错;软链接创建成功(需用相对路径)

[root@localhost boot]# ln -P /data/a.txt a.ln
ln: failed to create hard link ‘a.ln’ => ‘/data/a.txt’: Invalid cross-device link 
[root@localhost ~]# ln -s ../data/a.txt a.softlink
[root@localhost ~]# ls
anaconda-ks.cfg  a.softlink  initial-setup-ks.cfg

实验3: 对目录创建链接,目录不允许创建硬链接

[root@localhost data]# ls
folder
[root@localhost data]# ln -s ./folder folder.softlink
[root@localhost data]# ll
total 0
drwxr-xr-x. 2 root root 6 Apr 25 16:07 folder
lrwxrwxrwx. 1 root root 8 Apr 25 16:08 folder.softlink -> ./folder
[root@localhost data]# ln -P ./folder folder.softlink
ln: ‘./folder’: hard link not allowed for directory

实验4: 对不存在的文件或目录创建链接
在当前目录不存在文件nothere的情况下,可以直接创建软链接 aaa.ln 但显示红色代表死链接;不过事后创建nothere文件后,死链接变成了正常链接,并且可以正常使用。
在这里插入图片描述但换做硬链接就不行,无法对不存在的文件创建硬链接。
在这里插入图片描述根据上述操作,小结:
在这里插入图片描述
特别注意
对于当前目录(.) 和父(. .) 目录,查看inode 可知道 是他们分别是两个硬链接,对应自己的inode和父目录的inode 如果系统允许对目录创建硬链接,则会产生目录环。

[root@oracle 1]# tree
.
└── dir1
    └── dir1-1
[root@oracle 1]# ls -ail
total 12
1175377 drwxr-xr-x   3 root root 4096 Apr 25 15:20 .
 783365 drwxr-xr-x. 20 root root 4096 Apr 25 12:32 ..
1176444 drwxr-xr-x   3 root root 4096 Apr 25 15:20 dir1

当前工作目录自己(.)的inode是1175377

[root@oracle 1]# ls -ail dir1
total 12
1176444 drwxr-xr-x 3 root root 4096 Apr 25 15:20 .
1175377 drwxr-xr-x 3 root root 4096 Apr 25 15:20 ..
1176435 drwxr-xr-x 2 root root 4096 Apr 25 15:20 dir1-1

子目录dir1的父目录(…)的inode是1175377,正是其父目录inode 1175377
dir1自己(.)的inode是1176444

如果再显示dir1目录的子目录dir1-1, 可以看到子目录dir1-1的(…)父目录inode正式 1176444 (即dir1的inode 1176444)

[root@oracle 1]# ls -ail dir1/dir1-1/
total 8
1176435 drwxr-xr-x 2 root root 4096 Apr 25 15:20 .
1176444 drwxr-xr-x 3 root root 4096 Apr 25 15:20 ..
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值