许多软件都包含配置文件,例如 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
调用的子目录,以便它们不再起作用(因为它们使用相对路径),然后将它们放回到目录中。您可以通过创建函数来简化此过程...off
conf.d
mv
conf.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.conf
到mv
a.conf
到off
并停用它,然后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 ; }