Mit*_*ril 2 command-line bash symbolic-link
有很多软件都包含配置文件,例如 nginx、supervisor。
例如,我有以下配置:
[include]
files = /mnt/etc/supervisor/conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
真正的配置位于/mnt/etc/supervisor/avail/*.conf
I use 中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
Run Code Online (Sandbox Code Playgroud)
这样会很方便。
Zan*_*nna 11
据我所知,您不能从字面上关闭符号链接,或者至少不能以简单的方式关闭。符号链接的符号链接是存储在其 inode 中的元数据,我不知道写入 inode 以更改文件类型的直接方法。
而不是删除并重新创建每次它可能是更容易mv的符号链接到一个名为的子目录off中的conf.d目录,以打破他们,这样他们就不再工作(因为它们使用相对路径),然后mv它们放回conf.d目录。您可以通过使函数变得更容易...
对于要在其上使用这些功能的每个配置目录,您需要先off在该目录中创建一个目录,例如:
mkdir /mnt/etc/supervisor/conf.d/off
Run Code Online (Sandbox Code Playgroud)
接下来,创建微小的 bash 函数来移动符号链接,这只能在目录中工作(conf.d这里)
将这些行添加到您~/.bashrc然后键入的末尾source ~/.bashrc
linkoff() { mv "$1" off ; }
linkon() { mv off/"$1" . ; }
Run Code Online (Sandbox Code Playgroud)
现在您可以键入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 ; }
Run Code Online (Sandbox Code Playgroud)