如何绕过同一文件系统上目录的硬链接创建权限

如何绕过同一文件系统上目录的硬链接创建权限

我很清楚象征性的和艰难的链接。我也意识到创建目录的硬链接

尽管如此,我坚持创建硬链接到目录及其所有子目录(在同一个分区上)。

但是,下面的方法不起作用:

root@fab-ux:/home/fab-user/Public
# ln --directory ../Documents/CV/ CV
ln: failed to create hard link ‘CV’ => ‘../Documents/CV/’: Operation not permitted

是否存在内核/文件系统(在 EXT4 上运行)参数可以让我完成这个愚蠢的事情?

是的,我可以挂载绑定,可以通过 cron 作业硬链接单个文件,...但关键是我想要的既方便又物理上只有一个目录所有文件,以及仅将公共目录中某些硬链接目录上传到云的便利,而云软件检测到符号链接并且不支持它们最重要的是:我正在运行 Ubuntu!不是 OSX 也不是 Windows:我希望系统能做什么想!

答案1

只要您停留在当前内核(它是内核的一个功能,而不是文件系统之一),几乎没有办法绕过这个限制。

硬链接的局限性

为了防止文件系统出现循环,并保持..(父目录)解释的一致性,许多现代操作系统不允许硬链接到目录。UNIX System V 允许这样做,但只有超级用户才有权进行此类链接。

开放群组基础规范第 7 期(摘抄)

...链接到目录在大多数历史实现中,此功能仅限于超级用户使用,因为此功能可能会在文件层次结构中产生循环,或以其他方式损坏文件系统。POSIX.1-2008继续这一理念禁止 link() 和 unlink() 执行此操作。如果实现者设计了这样的扩展,其他功能也可以实现......


因为不再有像link()不检查 oldpath 是否为常规文件的系统调用,所以唯一的出路可能是创建类似的函数链接()按你想要的方式去做。

答案2

您无法在 Linux 中创建目录的硬链接。我听说 OSX 允许 Time Machine 使用此功能,但 Linux 不允许。您可以做的最接近的事情是cp -l,它将创建一个新的目录树来镜像原始目录,但硬链接所有常规文件。

相关内容