如何创建指向目录的只读链接?

Elm*_*mor 20 symbolic-link read-only

我的一个脚本动态创建了一个符号链接,如下所示:

ln -s /home/hosting/projects/images /home/hosting/projects/demo/images
Run Code Online (Sandbox Code Playgroud)

我怎样才能使通过链接的访问是只读的?

ger*_*ijk 19

您可以创建只读的 bind-mount

mount --bind /path/to/source/ /path/to/dest/
mount -o bind,remount,ro /path/to/dest
Run Code Online (Sandbox Code Playgroud)

是的,这必须在 Linux 内核 2.6.25 之后的内核中分两步完成(请参阅上面的链接了解原因)。

或者,作为一个/etc/fstab行示例ref

/path/to/source/ /path/to/dest/ none bind,ro
Run Code Online (Sandbox Code Playgroud)

在任何一种方法中,绑定安装都位于虚拟文件系统层 (VFS) 中,因此它并不特定于任何文件系统,您也不会真正“安装”任何东西。所以,基本上,这是为您创建一种符号链接,但这并没有显示出来。

并回复下面关于数据丢失的评论......不,这些说明不会删除任何文件。如果目标路径上存在文件,则此安装将覆盖此文件。只需卸载即可在下方文件系统的路径中列出您的文件。甚至更好;通常,避免安装在非空目标路径的顶部。


小智 5

使用一个命令挂载只读绑定:

mount --bind -r /path/to/source/ /path/to/dest/
Run Code Online (Sandbox Code Playgroud)

卸载

umount /path/to/dest/
Run Code Online (Sandbox Code Playgroud)