日期:2014-05-16 浏览次数:20702 次
1. symbolic link是什么?
linux symbolic link类似于windows系统中的快捷方式。
symbolic link仅仅包含了指向目标文件的相对路径或绝对路径。
早期的symbolic link直接分配磁盘空间来存储这个相对路径或绝对路径,
这种做法效率低,而且会造成磁盘空间的浪费。
现在的symbolic link的做法是将这个信息直接存放在文件的inode上,
所以它不需要磁盘存储空间去存储信息,但symbolic link会占用一个inode。
2. 如何创建symbolic link?
ln -fs ./source_file ./link_file用来创建一个新的symbolic link文件link_file,这个link_file实际指向source_file。
其中可选参数-s指定用来创建一个symbolic link;-f用来强制创建,如果已经有一个同样的symbolic link
文件存在了,将其remove掉再重新创建一个。
这里有个问题,因为我们知道对symbolic link文件的访问跟对源文件的访问是一样的,所有使用-f可选参数
来强制创建symbolic link看起来是没有意义的。
所以个人的建议是使用如下的命令来创建symbolic link就可以了。
ln -s ./source_file ./link_file
下面是在当前path下创建的一个symbolic link文件./ooooX,它指向./oooo这个源头文件。
sh# ls -lh ./oooo*
-rw-r--r-- 1 root root 0 Jan 1 01:24 ./oooo
lrwxrwxrwx 1 root root 6 Jan 1 01:25 ./ooooX -> ./oooo
3. symbolic link的小应用?
假设有A,B两个程序,他们需要靠共享./IPC.txt来实现进程间通信
(这里仅做示例用,实际process之间通信的IPC机制有很多)。
再假设某次A程序做了升级,他们认为使用./IPC_led_status.txt这样的名称能够更加体现这个文件的真正意义。
但如果没有通知B程序修改,则会导致B程序功能失效以及A/B之间的通信失败;
如果通知了B程序,但B程序不愿意做相应的修改,那怎么办?
在这个问题上,个人的理解是:B程序可以配合A程序修改;B程序也有权利拒绝修改除非有无法拒绝的理由。
如果B程序拒绝,那此时代价较小的一种折中做法是:
ln -s ./IPC_led_status.txt ./IPC.txt
即创建一个指向IPC_led_status.txt的名字为IPC.txt的symbolic link文件。
此例中A程序犯的错误在于他没有考虑到软件设计中的一条重要规则,即软件的兼容性,
不要因为你的改动而造成到别人的程序运行错误。
4. hard link以及其与symbolic link的区别?
ln ./test ./test00
如果没有特别指定,那ln会默认创建./test文件的hard link ./test00。
从如下的ls结果可以看到,
如果是hard link,那这两个文件具有同一个inode,而文件的内容在文件系统中则会存在两份,
所有即使删掉其中一个,也不会造成文件信息的丢失;
如果是symbolic link,那这两个文件是具有两个独立的inode,不过symbolic link文件会直接指向源文件,
所以如果你rm了源文件的话,那symbolic link文件就是失去其存在的价值了。
sh# ls -lhi ./test*
14975 -rw-r--r-- 2 root root 0 Jan 1 00:19 ./test
14975 -rw-r--r-- 2 root root 0 Jan 1 00:19 ./test00
15645 lrwxrwxrwx 1 root root 7 Jan 1 00:20 ./test11 -> ./test
以上,仅是个人结合学习和工作的理解。
事实上symbolic link的功能和应用应该远不止如此,大家按需学习哈。