路径中的符号链接指向另一个驱动器块“ls”

路径中的符号链接指向另一个驱动器块“ls”

我最近从我的目录中取出了一些特定的目录/home,并将它们放在安装在另一个路径( )上的外部硬盘驱动器上/mnt

在我的主目录中,我创建了一些旧目录的符号链接,以便无缝访问它们(例如,我将我的目录移至~/media/music/mnt/media/music

现在,如果我cd进入包含这些符号链接之一的目录(例如,我为/mnt/media/musicinto创建了一个符号链接~/media/),然后发出ls命令,外部硬盘驱动器开始旋转,并且 的输出ls被阻止,直到出现一些数据(不要知道什么)是从磁盘读取的(我想,因为旋转)。

我想知道它发生的原因。似乎没有必要从外部硬盘驱动器加载任何内容只是为了显示符号链接(cding 到符号链接然后ls是另一回事,尽管这不是我在这里指的)。那么为什么会出现这种情况呢?

提前致谢

答案1

--group-directories-first要求ls解析符号链接是否指向目录或文件。

为此,它需要访问目标文件系统,即您的外部硬盘驱动器。

所以,这就是为什么ls你使用它需要很长时间。

@Kusalananda 提出了一个非常有效的问题:着色是否不需要相同的访问权限:不需要;着色(就我的ls8.32 而言,使用我当前非常默认的 dircolors)不会检查目标的类型。我检查这一点的方法是运行

cd /tmp
mkdir dir
cd dir
touch testthing
ln -s /doesnotexist deadlink
strace -o /tmp/withlink ls --color
rm deadlink
strace -o /tmp/withoutlink ls --color

进而diff /tmp/withlink /tmp/withoutlink。除了随机内存地址之外,一切都相同getdents64,它返回一个已经包含“这是符号链接吗?”的目录列表。信息。永远不会检查目标(或其类型)是否存在。

相关内容