Linux-硬链接和软链接

本文探讨了硬链接和软链接在Linux系统中的工作原理,包括它们的定义、特性、创建方法和应用案例。硬链接像一个人的不同名字,共享同一物理文件;而软链接则是象征性的,指向另一文件路径。重点讲述了硬链接的限制和软链接的灵活性,以及它们在删除操作中的不同表现。


软链接(Symbolic Link) 硬链接(Hard Link) 是文件系统中用于引用文件的两种不同方式。

硬链接

硬链接定义

硬链接:本质上是给一个文件取一个新的名称,实质上原文件和硬链接还是同一个文件。就相当于一个人有好几个名字,有学名、有乳名、还有绰号。虽然有不同的称呼,但实质上都指的是同一个人。就算去掉了一个名字,你还是你,并不会受去掉名字的影响。

硬链接特性:
  1.创建硬链接会在对应的目录中增加额外的记录项以引用文件。
  2.原文件和硬链接文件对应于同一文件系统上的一个物理文件。
  3.创建硬链接时原文件的连接数递增。
  4.删除文件时:rm命令递减计数的链接数,文件要是存在,至少有一个链接数,当链接数为零时,该文件被删除。
  5.不能跨域驱动器或分区。
  6.不支持对目录创建硬链接。
#硬链接的创建格式:
ln filename [linkname]

在这里插入图片描述
以上截图是将/data目录下的f1.txt文件,创建硬链接到相同(/data)目录下dir1文件夹的f1.txt文件。创建硬链接之后,会在原文件的属性中显示文件的链接数增加了。

如果删除了原文件,硬链接文件并不会受影响。

思考:硬链接可以跨分区吗,能将“/data”目录下的文件创建硬链接到“/opt”目录下吗?
在这里插入图片描述
不允许跨分区创建硬链接,就像每个人不允许有多个国籍一样!硬链接的本质是给同一个文件创建不同的名字,而在linux系统上,跨分区的文件就是不同的文件了。如果允许跨分区创建硬链接就违反了硬链接的实质。同时也不允许给文件夹创建硬链接。

硬链接案例应用

如果需要删除mysql数据库中一张大容量表,如果还没有迅速的将用户隔离访问这张大表,如果硬删(直接使用 drop database tablename)则此时会瞬间产生大量的磁盘IO,瞬间的磁盘IO可能会将mysql系统压崩。
此时应该将要删除的表,硬链接到另一个文件中,因为硬链接的实质是同一个文件,所以此时删除源文件,并不会有瞬间的IO。即使有用户在访问也会访问硬链接的文件。这样就可以等到一个空闲的时间去删除这个硬链接源文件了,这样就可以平滑的删除一个较大的mysql表库了。

软链接

软链接定义

#创建软链接的格式
ln -s filename [linkname]

软(soft)链接或者符号(symbolic)链接,类似于windows里的桌面快捷方式,软链接文件和原文件本质上不是同一个文件。

软链接的特点:
  1.一个软链接的内容是它引用文件的名称;
  2.可以对目录创建软链接;
  3.可以对跨分区的文件实现软链接;
  4.指向的是另一个文件的路径,其大小为指向路径字符串的长度;
  5.创建软链接不增加或减少目标文件inode的引用计数;
  6.软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录。

在这里插入图片描述
在这里插入图片描述
以上截图可以看出软链接和原始文件根据不是同一个文件,他们的节点编号、文件属性、文件大小等都不样。

由此可见,软链接和原始文件是有主次之分的,而硬链接没有。硬链接和硬链接的原始文件访问的都是同一个文件,即使删除了原始文件,硬链接文件也不会受影响,其他硬链接文件仍然可以访问。
而软链接就不行,删除软链接的原始文件,软链接的文件就报错了。就像windows里的快捷方式一样,当删除快捷方式的原始文件后,再点击桌面的快捷方式就会提示“找不到对应的文件”。
在这里插入图片描述
创建软链接
在这里插入图片描述
相对路径创建软链接,注意参数软链接特点的第6条规范
在这里插入图片描述
在这里插入图片描述

软链接的案例应用

生产环境中在/usr/local/在会安装很多的应用软件,比如mysql的会安装在有版本号的文件夹下。但实际运维时并不希望带有版本号,而且软件版本会不断的升级。于是就可以创建一个没有版本号的mysql文件夹的软链接。于是生产环境用的路径就会用/usr/local/mysql,它指向了具体的版本如下图指向了mysql5.7.10.
在这里插入图片描述
攻城狮们一直是时代的弄潮儿,过一段时间mysql官方升级到了6.0.10版本了。这时运维就得升级原来的5.7.10了。但因为我们之前创建的软链接指向的版本号文件夹,所以此时我只要删除原来的软链接,将软链接指向新的版本就行了。
在这里插入图片描述
这就是一种平滑升级软件的思想,程序只知道访问mysql,殊不知我们底层已经偷偷更换了mysql的版本。这种思想的优越性还体现在,如果新版有Bug,我们还可以再将软连接的指向再改回指向旧版本(这中操作称之为“回滚(rollback)”)。

修改软链接

当软连接的源文件不存在或者已删除时,软链就会报错如下图,红色背景的路径会一直闪动(就是报错的意思)
在这里插入图片描述
那就修改软件的源文件路径

#修改软链接的命令
ln -snf /usr/local/python/installPath/bin/python3.8 /usr/bin/python

修改后python的软件指向已经不报错了为绿色了。
在这里插入图片描述
软链修改参考

硬链接与软链接的区别

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值