bash :: 在 ls 上直观区分硬链接

bash :: 在 ls 上直观区分硬链接

我在用狂欢Ubuntu 中的 shell 精确。

我偏爱符号链接狂欢即使硬链接会更有意义,因为它们更容易被识别为ls相比之下,对于硬链接我必须直观地比较索引节点数字。与输出相比,这更麻烦ls软链接显示目标为“-->”,并且可以应用不同的配色方案。有没有办法ls从视觉上区分硬链接和“普通文件”?例如,也许可以通过对引用计数大于 1 的文件进行不同的着色?

我理解这个问题的表述不正确,因为从概念上讲,硬链接只是 inode 的另一个名称,因此与“普通文件”没有区别,并且没有像符号链接那样的目标概念,但你明白我的用例。

答案1

ls -l输出显示权限和所有者之间的文件系统条目的硬链接数:

$ mkdir foo
$ ls -ld foo
drwxr-xr-x  2 danielbeck  staff  68 15 Aug 18:49 foo

2默认情况下,它用于空目录,foo/.foo。每个子目录都会为其添加一个..。除非您使用的是 OS X 并且精神状态值得怀疑,否则这是您将获得的唯一目录硬链接。

当然,文件只显示“真正的”硬链接,因此任何内容都1表明某处存在硬链接:

$ touch bar
$ ln bar baz
$ ls -l bar baz
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 bar
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 baz

我的(BSD/OS X)ls没有与硬链接相关的选项,但你可以编写自己的 shell 函数,如下所示,只打印硬链接数,否则ls -F1(如果ls -l太麻烦):

function lss {
    OLDIFS="$IFS"
    IFS=$'\n'
    for line in $( ls -d1 $@ )
        do stat -f '%N%T (%l)' "$line"
    done
    IFS="$OLDIFS"
}

两个硬链接和一个不相关的文件的输出qux

$ lss bar baz qux
bar (2)
baz (2)
qux (1)

相关内容