创新路
我们一直在努力

关于符号链接损坏的问题处理

符号链接损坏时:

当一个符号链接所指向的文件从系统中删除或重新命名时,符号链接将不再起作用。符号链接只不过是存储在某个特定目录中的引用而已,它不会随着指向它的文件发生变化而更新或删除。它一直指向被引用的文件,即使这个文件早已消失。如果你尝试使用指向一个不存在的文件的符号链接,那么将出现如下错误:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ tail whassuptail: cannot open 'whassup' for reading: No such file or directory<br/></span>

如果你尝试访问指向自身的符号链接(是的,奇怪的事情发生了),你将看到类似以下的内容:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ cat loopy <br/><br/> cat: loopy: Too many levels of symbolic links <br/><br/> $ ls -l loopy <br/><br/> lrwxrwxrwx 1 shs shs 5 May 28 18:07 loopy -> loopy<br/></span>

而且,如果(上面的)长列表的第一个字母没有引起你的注意,这表示该文件是符号链接。rwxrwxrwx 权限是标准权限,并不反映符号链接指向的文件的权限。

查找损坏的符号链接:

find 命令有一个选项,能让你找到指向不再存在的文件的符号链接。此命令列出当前目录中的符号链接:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ find . -type l<br/></span>

l (小写字母 L)告诉 find 命令查找符号链接。

另一方面,下面的命令在当前目录中查找指向不存在的文件的符号链接:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ find . -xtype l<br/></span>

为了避免在该命令尝试查找你无权检查的文件或目录时发生错误,你可以将所有错误输出到 /dev/null,如下所示:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ find . -xtype l 2>/dev/null<br/></span>

你也可以使用此命令找到损坏的符号链接。它比前面的更长,但做的是同样的事情:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ find . -type l ! -exec test -e {} \; -print 2>/dev/null<br/></span>

如何处理损坏的符号链接:

除非你知道符号链接引用的文件会被替换,否则最好的方法是直接删除损坏的链接。实际上,如果需要,你可以使用一条命令查找并删除损坏的符号链接,如:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ find . -xtype l 2>/dev/null -exec rm {} \;<br/></span>

该命令的 rm {} 部分会变成“删除文件”的命令

如果你想将符号链接与不同的文件相关联,你必须先删除该符号链接,然后重新创建它,使其指向新文件。这是一个例子:

<span style="font-family: 微软雅黑, "Microsoft YaHei";">$ rm ref1 <br/><br/> $ ln -s /apps/data/newfile ref1<br/></span>

未经允许不得转载:天府数据港官方信息博客 » 关于符号链接损坏的问题处理

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机