是否有可能编辑与文本编辑器的符号链接?

当我们创build一个符号链接时,符号链接占用的字节数就是它指向的path的长度。 例如,

$ ln -s dest link1 $ ln -s longer_dest link2 $ ls -l lrwxrwxrwx 1 username 4 Mar 26 20:21 link1 -> dest lrwxrwxrwx 1 username 11 Mar 26 20:21 link2 -> longer_dest 

其中link1占用4个字节,这是dest的长度; link2占用11个字节,这是longer_dest的长度。 因此,符号链接实际上不过是以纯文本forms存储的目标path。 所以我想知道是否可以在文本编辑器 (最好是Emacs )中编辑符号链接的目的地 。 我GOOGLE了一会儿,找不到任何人谈论这个。 请注意,这个问题纯粹是出于好奇。 我完全知道我可以用ln -f -s覆盖符号链接

原则上这是可能的,但编辑器需要专门支持它,因为读取符号链接的目标需要一个特殊的系统调用: readlink()

您不太可能找到任何实际执行此操作的编辑器,因为它不是非常有用,并且与要求编辑器打开符号链接时大多数用户希望编辑器执行的操作冲突:请打开它指向的文件。

根据维基百科文章符号链接 中符号链接存储部分, 符号链接存储在一个inode中 。 这个inode是一个数据结构,其中包含有关正在讨论的文件的几个信息 – 按照这个线程 , touch命令可以用来改变它的一些值。 因此,由于@Wyzard提到的问题,可能无法使用文本编辑器对其进行修改,但可以通过使用其他一些命令行工具(如touch进行修改。

我希望这有帮助!

正如其他人已经指出的那样,这是不可能的,当然你也可以为它写一个脚本。 当我不得不更改大量的符号链接时,我想到了一个

 #! /bin/bash tmp=$(mktemp) trap "rm $tmp" EXIT while [ ! -z "$1" ]; do filename="$1"; shift if [ ! -h "$filename" ]; then echo "Not a symlink: $filename"; continue fi stat -c "%N" "$filename" >> $tmp done emacs $tmp while read filename linkname; do ln -sf "$linkname" "$filename" done < <(sed "s/'\(.*\)' -> '\(.*\)'/\1 \2/" $tmp) 

它为我工作,但它当然不是完美的,所以使用风险自负…