软链接(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的软件指向已经不报错了为绿色了。

软链修改参考
硬链接与软链接的区别


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

5084

被折叠的 条评论
为什么被折叠?



