背景
Linux中的软链,是非常强大的工具,如果只是一知半解,在解决问题时一定会让你栽跟头或者浪费大量的时间。非常有必要提前掌握Linux软链的几个实用的知识点。
分析
软链是什么?
在Linux中,软链接(symbolic link)是一种特殊类型的文件,它包含另一个文件或目录的路径。软链接充当了指向目标文件或目录的符号,而不是实际的数据。创建软链接可以让用户在不移动或复制实际文件的情况下引用其他文件或目录,从而提供了一种灵活的方式来管理文件系统。
简单理解,软链类似于Windows的快捷方式。但是Linux中的软链比Windows的快捷方式好用多了。
软链有哪些常见用途
-
管理文件版本:软链接可用于管理文件的不同版本。通过创建指向不同版本的软链接,用户可以轻松地切换或管理文件的不同变体。
-
创建快捷方式:软链接可以用作创建文件或目录的快捷方式。用户可以在不同位置创建软链接,以便更方便地访问需要频繁使用的文件或目录。
-
跨目录引用:软链接可以用于跨越不同目录结构引用文件或目录。这对于在多个位置使用相同文件或目录而不复制实际数据非常有用。
-
系统管理:在系统管理中,软链接可以用于将特定配置文件放置在一个位置,并将其链接到系统的不同部分,从而实现集中管理和共享配置文件。
-
软件安装与升级:在软件安装或升级过程中,软链接常常用于链接到新版本的软件,以便在旧版本和新版本之间进行无缝切换。
-
运维管理:当一个目录或文件占用大量磁盘的时候,我们会将一个目录或文件移到一个大磁盘里。为了不修改原有程序使用原来的绝对路径,我们只需要把目录或文件移走后,在原先位置创建一个指向新路径的软链即可。
了解了软链的概念和使用场景后,我们对软链就有了一个整体的认识。
下面要具体分享一下关于软链的一些非常实用的知识点。
1.创建软链
ln -s {目标文件或目录} 软链文件名
-s 此参数用于创建软链。如果不加此参数,那创建的是硬链。
硬链文件等同于文件本身,操作硬链文件就是操作原文件,删除硬链文件等同于删除了原文件, 所以要小心操作。而软链则是一个新的符号文件,指向了原文件,删除软链文件不会删除原文件,修改软链文件等同于修改了原文件。
所以软链和硬链的差别,需要注意。
如上图所示,demo为原文件,dhardlink为硬链文件,指向demo,而dlink文件为软链文件,也指向demo。
硬链文件和源文件除了名字不一样外,其他完全一样。而软链则不一样。最左边的一列中,软链开头的是l,而 原文件是-(目录则是d)。
软链文件在文件的权限、引用数1、文件大小4以及文件名展示方式都不一样,很好辨别。
再使用inode文件节点值来看:
ls -li
最左边展示的是文件的inode值。这个值是文件的身份证号,是唯一的标识。
可以看到,demo和dhardlink是一样的inode值,而dlink是不一样的。这也能说明软链是一个新文件。
如果你想使用cat等命令查看软链文件的内容,是什么也看不到的。
2.覆盖软链
如果软链已经存在,直接创建文件会报错。
我们已经了解到,软链就是一个独立的文件。如果文件已经存在,直接创建肯定是会提示已存在的。
而软链作为一个特殊的文件,只是起到一个指引的作用。所以如果软链已经存在,我们并不想麻烦的判断,直接覆盖即可。覆盖使用f参数即可。
ln -sf {目标文件} {软链文件}
3.必要时使用硬链
硬链是文件系统中的实际物理链接,它们指向相同的inode,因此无论哪一个被修改,另一个也会随之改变。当你需要创建一个链接,使得文件在文件系统中的不同位置都可以通过不同的路径访问时,可以使用硬链。硬链不能跨越不同的文件系统,因为inode只在同一文件系统内部唯一。
而软链恰恰相反,使用软链时一般是为了保持不调整路径,维护之前的路径场景下使用。比如原始文件或目录被移动后,为了不修改其他代码而继续正常运行,可以使用软链来解决。软链是一个特殊的文件,其中包含着指向另一个文件的路径。软链可以跨越不同的文件系统,因为它们只是简单地存储了目标文件的路径。
4.判断是软链还是文件
有时候要基于文件是软链还是常规的文件还是目录,需要进行区分,以进行不同的处理。
人工判断,使用ls -l命令,观察最左边的标志即可,-为常规文件,l为软链,d为目录。硬链文件就是原文件。
而如果要用shell脚本判断,就需要进行测试了。
在条件判断时,-f判断常规文件,-L或-h判断软链文件,-d判断目录文件。
下面是示例:
if [ -f “file_path” ]; then
echo "This is a regular file."
fi
if [ -h “file_path” ]; then
echo "This is a symbolic link."
fi
if [ -d “directory_path” ]; then
echo "This is a directory."
fi
5.确定软链指向的目标文件
要判断软链指向的实际目录,我们在前面说了,用cat等命令直接读取文件内容是空的。我们要使用readlink命令。readlink命令会输出软链接指向的实际目录或文件。
readlink {软链文件}
如果软链文件本身不存在,readlink命令会返回空。如果存在,则返回目标文件的路径,不管目标文件本身是否存在。
如果软链目录文件不存在,使用ll或ls -l查看时会有特殊的提示,比如闪烁。当目标文件建立后就不再闪烁了。
总结
软链的使用,看似简单,实则有很多需要了解的地方。如果掌握了,在今后的使用上会如鱼得水。否则在遇到一些问题时就不知道如何简单优雅的解决问题了,甚至都不知道怎么解决。
在喧嚣的世界里,能沉下心看完,非常难能可贵,谢谢您的品读。
喜欢就点赞关注吧,可以第一时间收到最新分享哦,让我们一起成长为大咖吧。
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享