linux symbolic link之学习小结

linux symbolic link之学习总结1. symbolic link是什么?linux symbolic link类于windows系统中的快捷方式。

linux symbolic link之学习总结

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的功能和应用应该远不止如此,大家按需学习哈。

1楼boyxulin1986昨天 11:44
自己必须顶自己