什么时候符号链接被视为它链接到的东西以及符号链接?
符号链接可以链接到不同类型的文件。例如,让mylk
成为链接到目录的符号链接。以下两个将做不同的事情:
mv mylk ~
mv mylk/ ~
符号被视为它链接的内容还是其本身是否取决于命令期望的内容,或者取决于它的指定方式(无论使用该链接的命令是什么)?谢谢。
答案1
作用于文件内容的程序始终作用于目标,而不是作用于符号链接,因为符号链接没有自己的内容。
作用于文件元数据(时间戳、所有者、权限等)的程序通常作用于目标,但某些程序可以选择作用于符号链接(例如,chown -h
、touch -h
、 ...)。
作用于目录项的程序通常作用于符号链接。重命名和删除等操作作用于目录条目,无论它是什么。有单独的系统调用来访问文件的元数据(包括文件类型),具体取决于程序是否希望遵循符号链接(stat
) 或不 (lstat
)。一些可以作用于任何类型的目录条目的程序有选项告诉它们在找到链接时作用于目标而不是链接。例如,许多递归遍历目录的实用程序(find
、chown -R
、cp -R
、 ...)默认情况下作用于符号链接,但如果传递选项,则遵循所有符号链接-L
,并遵循命令行上的符号链接,但不遵循在执行过程中找到的目录的符号链接。如果传递选项则递归遍历-H
。
如果文件名尾部有斜杠,则这会强制文件名被解释为目录。如果该名称是符号链接,则将遵循该名称。因此,mv mylk ~
移动无论mylk
是什么(符号链接或其他),如果它是一个目录,则移动,或者如果目标是目录的符号链接,则移动,如果mv mylk/ ~
既不是目录也不是目录的符号链接,则抱怨。这种一般行为mylk
mylk
mylk