如何在不破坏的情况下取消链接到自身的符号链接文件

如何在不破坏的情况下取消链接到自身的符号链接文件

我不确定这是如何发生的,但我有许多文件已成为自身的符号链接。似乎没有任何方法可以恢复文件,但希望有。这是 ls -l 所说的

    lrwxrwxrwx  1 bob users   50 Sep  9 21:45 background.png -> /path/to/background.png

我尝试取消其中一个文件的链接,但不幸的是该文件消失了。我也尝试过readlink。 Readlink 说文件的路径是 /path/to/background.png

就像我说的,我真的不知道这是怎么发生的。我从前任管理员那里继承了所有这些文件。有什么办法吗?

答案1

如果一个文件符号链接到自身,则不存在任何数据,任何访问它的尝试都将导致循环,并最终导致错误

例如

$ ls -l myfile 
lrwxrwxrwx 1 sweh sweh 19 Sep  9 22:38 myfile -> /path/to/here/myfile

$ cat myfile 
cat: myfile: Too many levels of symbolic links

由于没有数据,删除这些符号链接不会丢失任何数据,因为没有要保存的数据。

Too many levels of symbolic links如果您在尝试该文件时没有收到错误cat,则您的文件是不是到其自身的链接。

答案2

ln将要绝不用指向其自身的链接覆盖文件。您可以通过以下方式获取与其自身链接的文件:

$ ln -s `pwd`/myfile myfile
$ ls -l myfile
lrwxrwxrwx 1 grochmal users 25 Sep 10 03:41 myfile -> /home/grochmal/tmp/myfile

但如果您尝试使用包含数据的文件:

$ rm -f myfile
$ echo yay > myfile
$ ln -sf `pwd`/myfile myfile
ln: '/home/grochmal/tmp/myfile' and 'myfile' are the same file

ln另一方面,将使用另一个文件的链接覆盖一个文件。

然而,您可以相当确定指向其自身的链接是一个从未有过数据的文件(或者在创建软链接之前已被显式删除)。

(在 Linux 上并使用lnfrom coreutils,即)

相关内容