Linux软链接和硬链接的区别之ln命令详解

教程大全  / 只看大图  / 倒序浏览   ©

#楼主# 2019-7-21

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1. 先来理解一下Linux数据是如何保存和查询的
对操作系统来说,数据分为两种:1. 客户数据 (user data) 2.元数据 (metadata)。客户数据就是保存和记录文件的内容。比如一个1M的ppt文件,500K的txt文件。这都属于客户数据。这个文件总有属性吧,比如大小、修改时间、访问时间、创建时间、存储的位置(文件所在的inode)、文件创建者等等信息。这些属性信息或理解为汇总信息,我们称它为元数据。一句话,客户数据是文件的真实内容,而元数据则是汇总信息。
在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻觅正确的文件数据块。
2. 查看文件对应的inode号
[root@zcwyou ~]# ls -i latest.tar.gz

134474678 latest.tar.gz
L9gB7p99Fd1U1j1u.jpg

linux查看文件对应的inode号
可以看出latest.tar.gz这个文件, inode 号是134474678,Linux查找读写该文件时,以为个inode号码为标识,而不是文件名。文件名相似于网站域名,仅仅是方便人类记忆。
也就是说, inode134474678有一个硬链接,它就是latest.tar.gz。
3. 根据inode号查找对应的文件
那么,问题来了,系统上有没有第二个文件,它的inode号码也是13447467。
使用find查找一下:
[root@zcwyou ~]# find / -inum 134474678

查找结果如下:
/root/latest.tar.gz
/root/latest2.tar.gz
tnByb0JbwrrnzrNh.jpg

linux根据inode号查找对应的文件
硬盘上真的有第二个文件它的inode号码也是134474678,像这种情况,我们认为inode134474678有两个硬链接。当然,这是本文作者提前准备好的。
为处理文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统处理了文件的共享使用,还带来了隐藏文件路径、添加权限安全及节省存储等好处。
4. 确认硬链接的数量
查看一下文件latest.tar.gz
[root@zcwyou ~]# ll latest.tar.gz

输出结果如下:
-rwxr-xr-x. 2 root root 8743850 Oct 11 15:00 latest.tar.gz
请留意输出的结果中的数字2,表示该文件存在2个硬链接。
正常情况下,一个inode只有一个链接,如下例
[root@zcwyou ~]# ll abc.txt

输出结果:
-rw-r--r--. 1 root root 9 Nov 21 11:39 abc.txt
请留意输出的结果中的数字1,表示该文件只存在1个硬链接,默认情况下,文件都是只有一个硬链接的。
5. 查看软链接
再来看一个文件
[root@zcwyou ~]# ll /dev/stdout

lrwxrwxrwx. 1 root root 15 Sep 26 15:57 /dev/stdout -> /proc/self/fd/1
E0mgWz9P506ztgGw.jpg

linux查看软链接
我们发现,/dev/stdout实际上指向另一个文件/proc/self/fd/1,这就是软链接。相似于Windows系统上的快捷方式。
6. 软链接与硬链接的区别
6.1 软链接特点

  • 软链接,实际上是一个独立的文件,有自己的inode。相似于Windows操作系统中的快捷方式
  • 软链接可以跨文件系统 ,硬链接不可以
  • 软链接可以对一个不存在的文件名进行链接
  • 软链接可以对目录进行链接
  • 软链接有自己的文件属性及权限等;
  • 创建软链接时,链接计数 i_nlink 不会添加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
6.2 硬链接特点

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
ln链接符原理如下:
Linux ln链接符原理图
7. 创建文件的链接
Linux ln命令是一个非常重要而且常用命令,它用于为文件或目录创建链接。
7.1 创建软链接
创建一个文件,用于演示软链接。
[root@zcwyou ~]# touch soft.txt

创建软链接示例:
[root@zcwyou ~]# ln -sf soft.txt soft123.txt

检查结果:
[root@zcwyou ~]# ll soft123.txt

输出文件属性
lrwxrwxrwx. 1 root root 8 Nov 26 17:48 soft123.txt -> soft.txt
AEle1352Nin5iqK2.jpg

linux创建软链接
可以看出这个文件指向当前目录soft.txt,配置成功。7.2 创建硬链接
创建一个文件,用于演示硬链接。
[root@zcwyou ~]# touch hard.txt

创建硬链接,没有使用选项
[root@zcwyou ~]# ln hard.txt hard123.txt

检查结果:
[root@zcwyou ~]# ll hard123.txt

输出文件属性:
-rw-r--r--. 2 root root 0 Nov 26 17:47 hard123.txt
ux94VVS5LJ9j1zCc.jpg

linux创建硬链接
留意以上输出数字2,表明该文件有2个副本。
8. 总结
ln命令可以创建文件的副本,也可以创建软链接。
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

猛乌头

新手猿

  • 主题

    1

  • 帖子

    1

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆