有什么办法可以打开/关闭符号链接(`ln -s`)吗?

有什么办法可以打开/关闭符号链接(`ln -s`)吗?

许多软件都包含配置文件,例如 nginx、supervisor。

例如,我有以下配置:

[include]
files = /mnt/etc/supervisor/conf.d/*.conf

真正的配置位于/mnt/etc/supervisor/avail/*.conf 我用来ln -s /mnt/etc/supervisor/avail/a.conf /mnt/etc/supervisor/conf.d/a.conf启用配置的位置。

但令人烦恼的是,当关闭或打开一个配置时,我必须删除或重新创建该链接。

有什么方法可以保持/mnt/etc/supervisor/conf.d/a.conf存在并更改链接状态?也许像:

$ cd /mnt/etc/supervisor/conf.d/
$ ls -al
lrwxrwxrwx 1 root root   21 Aug 12 09:02 a.conf -> ../avail/a.conf
$ linkoff a.conf
$ ls -al
lrwxrwxrwx 1 root root   21 Aug 12 09:02 a.conf
$ linkon a.conf
$ ls -al
lrwxrwxrwx 1 root root   21 Aug 12 09:02 a.conf -> ../avail/a.conf

这将非常方便。

答案1

据我所知你不能直接关闭符号链接,至少不能用简单的方法。符号链接的符号链接性是存储在其 inode 中的元数据,我不知道有没有直接的方法可以写入 inode 来更改文件类型。

每次删除并重新创建符号链接可能更容易,因为符号链接指向目录中mv调用的子目录,以便它们不再起作用(因为它们使用相对路径),然后将它们放回到目录中。您可以通过创建函数来简化此过程...offconf.dmvconf.d

创建开/关 bash 函数

对于要使用这些功能的每个配置目录,您需要off首先在该目录内创建一个目录,例如:

mkdir /mnt/etc/supervisor/conf.d/off

接下来,创建微小的 bash 函数来移动符号链接,这些函数仅在目录中起作用(conf.d此处)

将这些行添加到你的末尾~/.bashrc然后输入source ~/.bashrc

linkoff() { mv "$1" off ; }
linkon() { mv off/"$1" . ; }

现在您可以输入linkoff a.confmv a.confoff并停用它,然后linkon a.conf重新打开a.conf它,只要您在conf.d目录中执行此操作即可

如果您只有一个conf.d目录需要使用它,那么您可以linkoff a.conf通过使用完整路径创建函数来让它在任何地方工作:

linkoff() { mv /mnt/etc/supervisor/conf.d/"$1" /mnt/etc/supervisor/conf.d/off ; }
linkon() { mv /mnt/etc/supervisor/conf.d/off/"$1" /mnt/etc/supervisor/conf.d ; }

相关内容