在OS X中创建到目录的硬链接的Unix命令是什么?

时间:2020-03-05 18:58:13  来源:igfitidea点击:

如何在OS X中创建指向目录的硬链接(而不是符号链接或者Mac OS别名)?我已经知道命令"目标目标中",但是仅当目标是文件时才有效。我知道Mac OS与其他Unix环境不同,确实允许硬链接到文件夹(例如,用于Time Machine),但是我自己不知道该怎么做。

解决方案

回答

简短的答案是你做不到。 :)(除了可能以root身份使用之外,更确切地说我们不应该这样做。)

Unix仅允许从其所有子目录和"。"内部到目录" .."的一定数量的链接。从自身内部。其他任何东西都可能是非常混乱的目录树的秘诀。这显然是肯·汤普森(Ken Thompson)的设计决定。

(话虽如此,显然苹果公司的Time Machine确实做到了这一点:))

回答

是的,它受内核和文件系统的支持,但是由于它不是供一般使用的,因此它不会暴露给外壳程序。

我们可能可以算出Time Machine使用的API,然后将它们包装在命令行工具中,但是最好采用提示并使其清晰明了。

回答

然后,我们不能直接在BASH中执行此操作。但是...我在这里找到了一篇文章,该文章间接讨论了如何执行此操作:http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html通过编译一个简单的小C程序:

#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   if (argc != 3) return 1;

   int ret = link(argv[1], argv[2]);

   if (ret != 0) perror("link");

   return ret;
}

...并使用以下命令在Terminal.app中构建:

$ gcc -o hlink hlink.c -Wall

回答

我的情况是,我发现从Windows虚拟机无法跟踪符号链接。 (我想在Internet Explorer中测试一些HTML页面)。而且我的目录结构具有CSS和images文件夹的符号链接。

我解决该问题的方法是采用不同于其他答案的方法。我用rsync来创建文件夹的副本。 Rsync可以解析符号链接并代替复制链接的文件。

这解决了我的问题,而无需使用目录的硬链接。如果我们只处理少量文件,这实际上是一个简单的解决方案。

rsync -av --copy-dirlinks --delete ../htmlguide ~/src/

回答

废话。在10.5上,它在ln的手册页中告诉我们:

-d, -F, --directory
          allow the superuser to attempt to hard link  directories  (note:
          will  probably  fail  due  to  system restrictions, even for the
          superuser)

所以是的:

sudo  ln  -d  existing_dir  new_hard_link

输入密码,我们还没有完成。我们没有记录下来,对吗?我们必须记录硬链接目录;即使是单用户计算机。

删除是另一回事:如果按照通常的删除目录的方式进行删除,则将删除其中的内容。因此,我们必须"取消链接"目录:

unlink  new_hard_link

那里。希望我们不要破坏文件系统!

回答

从链接到的文章中,如果尝试在与原始目录相同的目录中创建硬链接,则会收到该错误。我们必须在其他地方创建它。