最近二刷了eva终,发现首刷时忽略了的不少细节和影射,这部动漫中蕴含的哲学果然还是要反复品味。
头图来源:《新世纪福音战士:终》海报
最近接手了一个项目,有这样一个需求:项目中有个设定网络配置脚本,需要在系统启动时自动执行这个脚本(linux有个目录,在系统启动时会自动执行这个目录中的脚本)。然而这个脚本是通过一个程序编辑的,这样一来每次程序编辑了脚本还要再把脚本mv到对应目录,有没有更好的解决办法呢?
没错,那就是linux中文件的链接功能。
链接
链接可以分为软链接和硬链接两种,下面对于这两种文件链接方式进行简要介绍
硬链接
硬链接是通过索引节点来进行链接。在Linux文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配了一个编号(inode index)。在Linux中,允许多个文件名指向同一索引节点,这种情况就是通常所说的硬链接。硬链接的作用是允许一个文件拥有多个有效路径名。这样用户就可以建立硬链接到重要文件,以防止“误删”。其原因如上所述,因为对应该目录的索引节点有一个以上的链接,只删除一个并不影响索引节点本身和其他的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。简要来概括就是文件的真正删除条件是与之相关的所有硬链接文件均被删除。
软链接
软链接也被成为符号链接(Symbolic link),类似于Windows系统中的快捷方式。它事实上是一个特殊的文件,这个文件保存着源文件的位置信息,可以看做是源文件的一个引用。
硬链接和软链接的区别
- 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除,只有在删除了源文件和所有对应的硬链接文件文件实体才会被删除。硬链接是文件的另一个入口。而软链接中删除了源文件后虽然软链接依然存在,但是无法访问源文件的内容。
- 硬链接和源文件的inode节点号相同,两者互为硬链接;软链接和源文件的inode节点号不同,因此软链接和源文件其实是不同的两个文件,文件类型也不同,软链接文件存放的是源文件的路径。
- 使用限制上,无法对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软链接,可以跨文件系统创建软链接,可以对不存在的文件创建软链接。
软链接的使用方式
创建软链接
ln -s [source] [dist]
删除软链接
和删除普通文件一样,使用rm来删除软链接文件即可
修改软链接
ln –snf [new source] [dist]
参数说明
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
--help : 显示辅助说明
--version : 显示版本
创建链接的路径问题
在创建软链接时,我是进入到目的路径敲了一下命令(目标目录:etcrc5.d,脚本文件:ifnet.sh)
ln -s \path\to\ifnet.sh ifnet.sh
结果发现软链接出来的文件根本无法使用,使用ls -ll
命令输出文件信息如下图
使用cat
命令尝试输出文件内容报错:Too many levels of symbolic links
解决办法
链接源文件和目标文件都使用绝对路径,或者源文件的路径为相对于目标文件的相对路径。
参考文章: