考虑我正在为我的音乐目录创建一个名为 的符号链接music
。
ln -s Music music
现在考虑以下命令序列:
edward@ArchLinux:~$ readlink music
Music
edward@ArchLinux:~$ readlink music/
edward@ArchLinux:~$
只有当我是时我才会得到输出不是/
在符号链接名称的末尾使用。
我想知道/dir
和/dir/
是否不同。有人能解释一下吗?
答案1
readlink
需要符号链接,然后显示符号链接指向的文件/目录。
- 在您的第一次尝试中:它看到符号链接,因此它显示它指向的内容
- 在你的第二次尝试中:它看到了 music/.,即 Music/.这是指向的目录,而不是指向该目录的符号链接,因此它没有要解释的链接。 (换句话说,当您添加最后的“/”时,shell 的文件描述符将改为指向的目录)。
答案2
在 Unix 上,一切都是文件描述符。
在这种情况下,“一切”包括普通文件、目录、分区(例如/dev/sda1
)、设备(例如/dev/sda
)、虚拟设备(例如/dev/null
)和符号链接。
但在这种情况下,“文件描述符”是什么?它是文件系统根目录中的一个条目,指向磁盘或内存(对于虚拟文件)中的数据位置。请注意,例如在 ext? 文件系统上,文件描述符和数据之间还有另一层抽象,称为“inode”。
因此,在您的示例中,music
是一个符号链接,它由文件描述符表示,就像任何其他文件或目录一样。但它有一个特殊的标志集来将其标识为符号链接,其中目录将有另一个标志集将其定义为符号链接。现在系统可以解释符号链接,它实际上只是一个包含目标的绝对或相对路径的字符串。
如果您在其后面显式写入 a,它只会被解释为目录/
,否则它会被视为文件。