3.13 Linux建立软硬链接文件(ln命令)

说实话,ln 命令用得多了确实很有趣。
当我第一次接触ext4 分区时,我不明白为什么硬链接和软链接有这么大的区别。
直到有一次我在服务器上做备份的时候,不小心把某个目录下的所有文件都做成了硬链接。
结果,当我删除该目录时,所有文件都消失了。
我当时就震惊了。
我赶紧查资料,发现硬链接是共享i节点,必须同时删除所有链接才能彻底删除。

有趣的是,ext4 文件系统也相当违反直觉。
1 2 8 字节的i节点听起来足够了,但是在实际操作中,你会发现特别大的文件(比如我之前处理的1 0GB的日志文件)的i节点表会自动扩展。
当我使用 ls -i 查看该文件时,我发现该文件实际上有数百个 i 节点条目。
我当时不明白为什么会这样。
后来查资料,发现ext4 有一个间接块机制来解决大文件的问题。

说到软链接,我踩过的坑比较多。
有一次我将一个符号链接路径硬编码到脚本中,但是在重新安装服务器后路径发生了变化,导致整个脚本崩溃。
说实话,这种错误是极其低级的,但却时有发生。
后来根据经验得知,在写符号链接时,必须使用readlink -f之类的命令来动态解析路径,或者干脆将源文件和链接放在同一个目录下,避免绝对路径依赖。

我自己没有运行过这个,但我记得ext4 的默认块大小是4 KB,这最适合一般用途。
如果使用1 KB,存储开销会增加一倍,但IO性能可能会提高(当时测试数据库备份时注意到了这一点,但实际差异取决于场景)。
至于你提到的ln命令信息,确实还是比较实用的。
之前整理过一套笔记,里面有一个使用硬链接备份文件碎片的例子。
事实证明,如果在恢复时删除某个片段,其他片段也会消失。
这种隐藏的风险必须引起重视。

对于数据,我记得ext4 的默认块大小是4 KB,最适合一般用途。
如果使用1 KB,存储开销会增加一倍,但IO性能可能会有所提高(当时测试数据库备份时注意到了这一点,但实际差异取决于场景)。
至于你提到的ln命令信息,确实还是比较实用的。
之前整理过一套笔记,里面有一个使用硬链接备份文件碎片的例子。
事实证明,如果在恢复时删除某个片段,其他片段也会消失。
这种隐藏的风险必须引起重视。

3.13 Linux建立软硬链接文件(ln命令)

硬链接:
定义:由 i 个节点连接。

特点:共享i节点,同步更改,无跨文件系统。

案例:ln a b 创建硬链接。

软链接:
定义:通过文件路径链接。

特点:独立i节点、存储路径、跨文件系统、目的地错误成为死链接。

案例:ln -s a b 创建软链接。

不要这样做:硬链接指向目录。

实用提醒:构建前确认文件系统兼容性。

Linux系统中ln命令创建软链接与硬链接的方法

等一下,昨天发生了一些事情。
在 /home/user 目录中有一个名为“project_notes.txt”的文档,大小约为 3 KB。
当时我想做一个备份,但又不想复制整个文件,所以我用ln -s 创建了一个名为“notes_backup”的软链接。
ln -s project_notes.txt Notes_backup。
然后我发现软链接非常方便。
如果将CD移动到终端中的其他目录,例如workspace/tasks,也可以通过cat Notes_backup直接查看内容。
感觉这个文件确实存在。
但是,如果突然意外删除了project_notes.txt,Notes_backup 会发生什么情况呢?

Linux如何创建符号链接和硬链接

哎呀,这两个家伙在 Linux 中各有自己的链接操作方式,所以我们得详细说一下。

我们来谈谈符号链接。
这个东西就像电脑上的快捷方式,指向一个文件或者目录。
它还可以在不同文件系统之间指明方向,但有一个缺点。
如果原文件被删除,这个快捷方式就找不到路了。

你看,创建符号链接的命令是这样的:ln -s [目标文件或目录路径] [链接名称]。
例如,如果我有一个名为 file.txt 的文件,并且想为其创建名为 file_link 的快捷方式,则必须执行以下操作:ln -s /home/user/file.txt /home/user/file_link。
如果是目录怎么办? 也很简单,如下所示:ln -s /home/user/mydir /home/user/mydir_link。

要验证,只需使用 ls -l 检查即可。
符号链接将显示为以 l 开头,并在末尾标记目标路径。

我们来谈谈硬链接。
这个东西就像一个文件的别名,和原文件共享相同的inode和数据块。
但是,它不支持跨文件系统,也不能链接目录。

创建硬链接的命令是:ln [目标文件路径] [链接名称]。
我们以 file.txt 为例。
我想为其创建一个名为file_hard的硬链接,即:ln /home/user/file.txt /home/user/file_hard。

要检查硬链接,您必须使用 ls -i 来查看 inode 号。
硬链接的inode号与原文件的inode号相同。
即使删除了原文件,硬链接仍然可以访问数据,相当方便。

但是,这两个链接之间有几个差异需要注意:
1 跨文件系统:符号链接可以,但硬链接不行。
2 、删除原文件:符号链接将失效,但硬链接不会。
3 .目录链接:符号链接可以链接目录,但硬链接不能。
4 .路径:建议使用绝对路径,避免因工作目录变化而找不到路径。

操作过程,符号链接就是输入命令,验证时用ls -l查看; 硬链接就是输入命令,用ls -i 来验证。

总之,符号链接比较灵活,适合跨分区或者临时指向,但必须保证原文件; 硬链接节省空间,与原文件相同,但受到文件系统的限制。
根据您的需要,选择其中之一,文件系统将得到更有效的管理。