我已经看到很多解释为什么基于 Unix 的操作系统中空目录的链接数是 2 而不是 1。他们都说这是因为 '.' 目录,每个目录都指向它自己。我明白为什么会有一些“。”的概念。对于指定相对路径很有用,但是在文件系统级别实现它有什么好处?为什么不让 shell 或采用路径的系统调用知道如何解释它呢?
'..' 是一个真正的链接对我来说更有意义——文件系统需要存储一个指向父目录的指针才能导航到它。但我不明白为什么“。” 成为一个真正的链接是必要的。它似乎也导致了实现中的一个丑陋的特殊情况——你会认为你只能释放链接数小于 1 的 inode 使用的空间,但如果它们是目录,你实际上需要检查一个链接数小于 2。为什么不一致?
如果我运行:
$ ls *
foo bar buzz
$ history | tail -1
ls *
Run Code Online (Sandbox Code Playgroud)
您可以看到,在我的 shell 历史记录中,它记住的是我运行的ls *
而不是ls foo bar buzz
. 理想情况下,我想将两者记录在不同的历史记录中。当我想知道“文件 foo 到底发生了什么事情?”时,如果能够rm *
通过搜索历史记录并找到 'foo'来返回并找出我在错误的目录中所做的事情,那就太好了。
我对 zsh 和 bash 的解决方案感兴趣。
我想获取我机器上与 X 服务器通信的所有应用程序(跨所有用户)的列表。最可靠的方法是什么?找到运行的套接字 X 和 lsof 以连接到它?我正在运行 Linux 和 Solaris 机器,所以我对这两个操作系统的答案都很感兴趣。