有没有办法打开/关闭符号链接(`ln -s`)?

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目录。您可以通过使函数变得更容易...

创建开/关 bash 函数

对于要在其上使用这些功能的每个配置目录,您需要先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.confmv a.confoff和停用,并linkon a.confa.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)