上周有个客人问我,小张啊,你能不能给我讲讲什么是硬链接和软链接啊?我当时就有点懵,但想了想,还是给他解释了一下。
首先得说说,这两种链接都是用来创建文件或目录的链接的。不过,它们的工作方式和应用场景可不一样。
软链接,也叫做符号链接,它有点像是一个指向原文件的指针。换句话说,软链接本身不存储文件的内容,只是告诉系统原文件在哪里。如果你创建了一个软链接,然后把它移动到另一个位置,链接本身并不会断开,因为它是基于原文件位置的。举个例子,2023年我在上海某商场,看到有人用电脑创建软链接,当时我就试了试,把一个文档的软链接移动到了另一个文件夹,结果链接还是有效的。
硬链接呢,就像是原文件的一个副本。它直接存储了原文件的数据块信息,而不是文件的位置。如果你创建了硬链接,然后把原文件删除,硬链接还是会存在,因为它本身就是文件的一部分。不过,如果你删除了硬链接指向的数据,那么这个硬链接也就失效了。我自己踩过的坑是,有一次不小心删除了一个文件,结果好几个硬链接都跟着失效了,那感觉可不好受。
总结一下,软链接速度快,但容易出错,而且不能链接不存在的文件;硬链接则更稳定,但创建起来稍微麻烦一点。反正你看着办吧,根据你的需要选择合适的链接方式。我还在想这个问题,以后可能会再深入研究一下。
上次有个客人问我,创建硬链接和软链接有什么区别,我给他解释了一下。这事儿我记得挺清楚,因为我自己也踩过这个坑。
2023年我在上海某商场,那天客户问我:“为什么我用命令行创建链接的时候,感觉硬链接和软链接没区别?”我当时有点懵,因为我知道它们是有区别的,但具体怎么解释,我还真得好好想想。
首先,得先说说硬链接(Hard Link)。这玩意儿就像是同一个文件的两个名字,实际上它们指向的是同一个文件。简单来说,你把一个文件重命名为另一个名字,这其实就是一个硬链接。我记得我在北京的一个项目中,为了方便管理文件,我就创建了硬链接。硬链接的数量是没有限制的,你可以给一个文件创建无数个硬链接。
然后是软链接(Symbolic Link),也就是我们常说的符号链接。它就像是一个指向另一个文件的指针,有点像微信里的一个链接。我自己踩过的坑是,如果你删除了软链接指向的文件,软链接仍然存在,但变成了一个“断路器”,也就是一个无效的链接。我在深圳的一个公司里,因为一个不小心删除了源文件,结果软链接就变成了这样的断路器。
所以,硬链接和软链接的主要区别在于:
- 硬链接直接指向文件,而软链接是一个指向硬链接的指针。
- 硬链接可以跨越文件系统,软链接不能。
- 如果源文件被删除,硬链接依然有效,软链接则无效。
反正你看着办,根据你的需求选择合适的链接方式。我还在想这个问题,以后可能还要再深入研究一下。
硬链接:无需权限,创建速度快,但数量有限,最多为2^32-1个,适用于同一文件系统内的文件。 软链接:需要权限,创建速度慢,但数量无限制,指向目标文件的路径,适用于不同文件系统间的文件。
这就是坑:不要在非同一文件系统间创建软链接。
别信:硬链接不会影响原始文件,软链接会。
别这么干:不要在已存在的文件上创建硬链接。
嘿,记得有一次我在公司服务器上遇到个麻烦,文件不小心被误删了,当时可把我急坏了。后来才发现,我之前在资料夹里创建了好几个硬链接和软链接,这才救了回来。
当时是在2012年,我还在上海的一家互联网公司做运维。那天,有个同事突然跑过来,说他的一个重要文档不见了。我一看,果然,那文件夹里的文件图标是灰色的,提示文件已损坏或丢失。
我心想,糟了,这要是没备份,那损失可就大了。但紧接着,我打开了那个文件夹的属性,发现里面居然还有几个和丢失文件同名的文件。我试着双击,竟然都能打开,内容也完全一样。
我这才想起,之前为了方便共享和备份,我在服务器上创建了几个硬链接和软链接。硬链接就像是一个文件的好朋友,它指向同一个文件的内容,但不会占用额外空间;而软链接,也就是我们常说的快捷方式,它只是一个指向另一个文件的指针。
我打开命令行,输入ls -l,果然看到了那些硬链接的详细信息。比如,一个名为“报告.docx”的硬链接,它指向的实际文件路径是/home/user/documents/report.docx。
后来,我把丢失的文件删除,然后重新创建了一个相同的文件。再运行ln -s /path/to/new/file /path/to/old/link,就为那个快捷方式创建了软链接。至于硬链接,直接用ln /path/to/old/file /path/to/new/link就能创建。
现在,我再也不怕文件丢失了。等等,还有个事,我突然想到,你们知道软链接和硬链接的最大区别是什么吗?