三、硬连接的主要用途。
硬连接的主要特性就在于即使文件名字不同,但是他们仍然是同一个文件名。这个特性让硬连接能够在很多场合发挥其独到的作用。下面笔者就根据自身的工作经验,谈谈硬连接在那些方面能够帮助系统工程师解决实际问题。
1、用来防止文件被意外删除。如上面两个存在硬连接的文件,其中doc1保存在home/user目录下;而文件doc2则保存在/user/sales文件夹下。其实这两个文件名指向硬盘中某个扇区的某一部分内容。如果不存在硬连解的情况下,用户把这个文件删除的话,其实文件的内容还是存在硬盘中的。只是文件存储在硬盘中的哪个扇区等信息被删除了。只有当用户对硬盘进行低级格式化或者后来的文件覆盖了被删除文件所用的扇区,这个文件的内容才会从硬盘中被删除。此时如果用户意外的删除了目录/home/user下的doc1文件,其实用户没有真正从硬盘的扇区中删除这个文件。故通过目录/user/sales下的doc2文件仍然可以找到硬盘扇区中的文件,并打开它。所以说硬连接在一定程度上能够为用户提供一种防止文件被意外删除的安全机制。不过这个安全机制也有其不安全的地方。如用户真的想删除这个文件,可是在其他目录中可能还存在着这个文件的连接,那么就会泄露用户的信息。故在这种情况下,用户只能够删除所有的文件连接或者对硬盘进行低级格式化来实现彻底删除文件的目的。
2、对文件进行重定向。如现在笔者在一个Unix系统的服务器上部署了一个应用程序。这个应用程序在启动的时候需要一些参数,如需要设置环境变量等等。笔者为了后续管理的方便,就把这些参数都保存在一个文件中(如文件名字为doc1,目录为/home/user中)。现在因为某些原因,笔者把这个文件移动到了/user/sales目录下,并把文件名字改为了doc2。此时当这个应用程序启动的时候就会出现错误提示,如找不到环境变量等等。因为系统从启动的时候,会从原先那个目录中读取doc1这个文件,而现在这个文件在原先的位置不存在了,故应用系统就无法正常启动。此时为了让应用系统能够正常启动,该怎么处理呢?难道又要把文件复制回去吗?其实不用这么麻烦。只需要在原先的目录中,设置一个doc2文件的硬连接,并把文件名字取为doc1即可。
3、在程序开发时,可以作为不同业务逻辑地共有参数文件。如在这个文件中存储着一些参数。如现在有一个应用程序中有两个功能都需要用到这个参数文件,而需要根据不同的情况来采用不同的功能。此时这个文件的绰号可以作为这个逻辑判断的工具。如当采用doc1文件时调用什么功能;而当采用doc2文件时采用什么功能。虽然此时他们采用的是同一个文件,却可以实现不同的功能。这个在文件打印的时候特别有用。如可以预先给文件doc1、文件doc2各自根据需求的不同设置两个不同的打印格式,如分别为销售部门打印与采购部门打印。他们虽然内容相同,但是打印格式不同。如销售部门需要彩色打印,而采购部门则需要黑白打印。此时每个部门只需要打开自己部门的文件即可,在打印的时候不需要进行任何格式的调整。所以说,当一个文件有多个连接文件式,就可以让应用程序根据被调用的文件名字不同,而按不同的逻辑功能运行程序。这在设计Unix系统的脚本程序时非常的有用。
4、可以在Unix系统原有命令文件的基础上,加强一些功能。如系统工程师有时候可能认为系统who命令的功能太过于复杂了,其一般只需要显示用户名字以及其通过什么方式登陆系统即可。此时虽然也可以通过后面带参数的方式来实现。不过有些系统工程师可能比较懒,他想更改who命令的实现方式,让其能够一劳永逸的实现这个方式。此时就可以为原先的who命令文件设置一个硬连接,并设置不同的名字。然后根据第三点提到的功能,可以通过程序调用不同的文件名而实现不同的业务逻辑。即可以通过硬连接来实现扩展系统原有命令的目的。