UNIX和Linux用户发现链接有许多用途,特别是符号链接。使用符号链接的一种方式是管理各种IT设备的配置备份。
为了简化备份过程,有一个目录叫Configuration 。使用这个目录的符号链接来指向特定的设备目录。
:~/Configuration/ $ ls -F1
Router@
Accesspoint@
NAS@
注意:ls 命令的-F 选项在每个文件名上附加特殊字符以表示其类型。如上所示,@ 符号表示这些是链接
创建一个链接
符号链接Router指向我的Netgear RL5000的config 目录。创建它的命令是ln -s:
$ ln -s /home/alan/Documents/network/device/NetgearRL5000/config Router
然后,看一下并确认一下,用ls -l:
:~/Configuration/ $ ls -l
Router -> /home/alan/Documents/network/device/NetgearRL5000/config
NAS -> /home/alan/Documents/network/device/NFSBox/config
...
这样做的好处是,在对该设备进行维护时,我只需浏览到~/Configuration/Router 。
如果我决定用一个新的型号替换这个路由器,使用符号链接的第二个好处就很明显了。我可能会把旧的路由器改成一个接入点的任务。因此,它的目录并没有被删除。相反,我有一个新的目录,对应于新的路由器,也许是华硕DF-3760。我创建这个目录并确认它的存在。
$ mkdir -p ~/Documents/network/device/ASUSDF-3760/config
:~/Documents/network/device/ $ ls
NetgearRL5000
ASUSDF-3760
NFSBox
...
另一个例子是,如果你的办公室里有几个接入点。你可以使用符号链接在逻辑上代表每一个,用一个通用的名字,如ap1,ap2, 等等,或者你可以使用描述性的词语,如ap_floor2,ap_floor3, 等等。这样,当物理设备随时间变化时,你不必持续更新任何可能管理它们的进程,因为它们是在处理链接而不是实际的设备目录。
更新一个链接
由于我的主路由器已经改变,我想让路由器的符号链接指向它的目录。我可以使用rm 和ln 命令来删除和创建一个新的符号链接,但是有一种方法可以只用ln 命令和几个选项就可以一步完成。
:~/Configuration/ $ ln -vfns ~/Documents/network/device/ASUSDF-3760/config/ Router
'Router' -> '/home/alan/Documents/network/device/ASUSDF-3760/config/'
:~/Configuration/ $ ls -l
Router -> /home/alan/Documents/network/device/ASUSDF-3760/config
NAS -> /home/alan/Documents/network/device/NFSBox/config
根据man page,这些选项如下。
-v, --verbose
打印每个链接文件的名称
-f, --强制
删除目标文件(有必要,因为已经存在一个链接)。
-n, --no-dereference
如果LINK_NAME是一个目录的符号链接,就把它当作一个正常的文件。
-s, --符号
制作符号链接而不是硬链接
总结
链接是UNIX和Linux文件系统中最强大的功能之一。其他操作系统也曾试图模仿这种能力,但由于他们的文件系统缺乏基本的链接设计,这些系统从来没有工作得那么好,也没有那么可用。
上面的演示只是利用链接在生活生产环境中无缝浏览不断变化的目录结构的众多可能性中的一种。 链接提供了一个组织中所需要的灵活性,而这个组织从来没有长期静止过。