实际上,删除命令都是移除的都是文件的链接。移除连接时,Unix通过移除目录条目,消除文件名和i节点号之间的链接。如果已经没有链接,Unix会删除该文件。(删除链接和删除文件不是一个概念,如果文件还有不止一个链接,那么Unix不会删除文件,直到移除最后一个链接。但是,在大多数情况下,文件只有一个链接,因此,大多数情况下,rm和rmdir都充当删除命令。)
4.5 硬链接和软链接
上面介绍的链接称为硬链接,只能对一个文件创建硬链接,没法对目录创建硬链接。与硬链接对应的还有一种链接,称为软链接,也叫符号链接(symbolic link)。软链接有点类似于windows的快捷方式。实现层面上来说,它是一个特殊的文本文件,其中包含着目标文件的位置信息。要注意的是创建软链接的时候最好采用绝对路径,这样,保证链接文件移动到其它目录之后,仍然可用,下面演示了硬链接和软链接的区别和使用:
//新建一个空目录 [lfqy@localhost ~]$ mkdir temp //在该目录中创建一个文本文件 [lfqy@localhost ~]$ cd temp/ [lfqy@localhost temp]$ echo "This is test.txt file! ^_^" > test.txt //为该文件创建两个硬链接 [lfqy@localhost temp]$ ln test.txt test.hlink [lfqy@localhost temp]$ ln test.txt test.hlink1 //通过两个硬链接都可以访问该文件 [lfqy@localhost temp]$ cat test.hlink This is test.txt file! ^_^ [lfqy@localhost temp]$ cat test.hlink0 cat: test.hlink0: No such file or directory [lfqy@localhost temp]$ cat test.hlink1 This is test.txt file! ^_^ //为该文件创建一个软链接 [lfqy@localhost temp]$ ln -s test.txt test.slink //通过软链接也可以访问该文件 [lfqy@localhost temp]$ cat test.slink This is test.txt file! ^_^ //创建一个子目录test,并在其中创建一个文本文件 [lfqy@localhost temp]$ mkdir test [lfqy@localhost temp]$ cd test [lfqy@localhost test]$ echo "This is a h.txt in test directory! >_<" > h.txt [lfqy@localhost test]$ cd .. //不可以为目录创建硬链接 [lfqy@localhost temp]$ ln test test.hlinkdir ln: `test': hard link not allowed for directory //但是,可以为目录创建软链接,并通过该软链接来访问该目录 [lfqy@localhost temp]$ ln -s test test.slinkdir [lfqy@localhost temp]$ cat test.slinkdir/h.txt This is a h.txt in test directory! >_< //可以看到软链接会显示一个指向目标文件的箭头 [lfqy@localhost temp]$ ls -al total 24 drwxrwxr-x. 3 lfqy lfqy 4096 May 4 01:26 . drwx------. 32 lfqy lfqy 4096 May 4 01:21 .. drwxrwxr-x. 2 lfqy lfqy 4096 May 4 01:25 test -rw-rw-r--. 3 lfqy lfqy 27 May 4 01:22 test.hlink -rw-rw-r--. 3 lfqy lfqy 27 May 4 01:22 test.hlink1 lrwxrwxrwx. 1 lfqy lfqy 8 May 4 01:23 test.slink -> test.txt lrwxrwxrwx. 1 lfqy lfqy 4 May 4 01:26 test.slinkdir -> test -rw-rw-r--. 3 lfqy lfqy 27 May 4 01:22 test.txt
要注意的是,当一个物理文件的最后一个硬链接被删除的时候,该文件才会被删除。删除软链接就和删除windows的一个快捷方式一样,对物理文件没影响。
4.6 链接的应用
有一台服务器上跑mongodb,但是,mongodb的更新比较活跃,为了使用mongodb的新的特性经常要升级mongodb,甚至有些时候,要回退到老版本的mongo。链接在这里的用法是:将各个版本的mongodb(官网上的mongodb下载下来解压,肯定得到一个包含bin等子目录的目录,其中有mongodb的二进制文件)放在一个目录下比如temp。这样temp下便有了各个版本的mongodb目录,比如mongodb2.0、monogodb2.2、mongodb2.4等,然后创建一个软链接mongodb,这样名为mongodb的软链接指向哪个目录系统用的就是那个目录。所有的启动命令之类的可以用软链接来访问,比如mongodb/bin/mongod。如果有新的mongo版本发布,将其下下来放到该目录更改原来软链接文件的指向就行了,其它的都不用改。
如果将mongodb的启动,用supervisor托管,那么就更方便了。^_^
参考书目:《Unix&Linux大学教程》(美)Harley Hahn著