感谢支持
我们一直在努力

Linux ln命令学习

ln命令用来给档案创建链接。

1. 使用ln命令给档案创建symbolic link。
linux系统下的symbolic link类似于windows系统的快捷方式一样。
使用ls命令查看,可以看到新创建的symbolic link有独立的inode,也就是symbolic link会占用一个inode,但是其实际内容仍然是指向
源文件所指向的block区域。
# touch /tmp/file
# ls -lhi /tmp/file
  3441 -rw-r–r–    1 root    root            0 Jan  1 00:09 /tmp/file
#
# ln -fs /tmp/file /tmp/symbolic_link
# ls -lhi /tmp/symbolic_link
  3647 lrwxrwxrwx    1 root    root            9 Jan  1 00:10 /tmp/symbolic_link -> /tmp/file
#

2. 删除symbolic link文件,实际上就是删除这个inode,而不会影响到源文件所指向的block区域;
而如果删除了源文件,那这个symbolic link文件就基本上没用了。
# echo “link test” > /tmp/file
# cat /tmp/file
link test
#
# rm /tmp/symbolic_link
# cat /tmp/file
link test
#
# ln -fs /tmp/file /tmp/symbolic_link
#
# rm /tmp/file
# cat /tmp/symbolic_link
cat: can’t open ‘/tmp/symbolic_link’: No such file or directory
#
# ls -lhi /tmp/symbolic_link
  7357 lrwxrwxrwx    1 root    root            9 Jan  1 00:22 /tmp/symbolic_link -> /tmp/file
#

3. 使用ln命令创建hard link。
可以看到,创建hard link是使用同一个inode,而copy了一份源文件的block区域出来。
如果修改档案的内容,源文件和hard link文件对应的block区域内容都会被修改,从而保持一致性。
# touch /tmp/file
# echo “hard link test” > /tmp/file
# cat /tmp/file
hard link test
# ln /tmp/file /tmp/hard_link
# ls -lhi /tmp/file
  7996 -rw-r–r–    2 root    root          15 Jan  1 00:25 /tmp/file
# ls -lhi /tmp/hard_link
  7996 -rw-r–r–    2 root    root          15 Jan  1 00:25 /tmp/hard_link
# cat /tmp/hard_link
hard link test
#
# echo “hard link test 2” > /tmp/file
# cat /tmp/file
hard link test 2
# cat /tmp/hard_link
hard link test 2
#
# echo “hard link test 3” > /tmp/hard_link
# cat /tmp/file
hard link test 3
# cat /tmp/hard_link
hard link test 3
#

4. 删除hard link或者删除源文件,实际上只是删除其中其中一份block区域。
可以看到,虽然源文件被删除(实际上只是删除了源文件对应的block区),但是
inode仍然还在,所以仍然可以透过hard link档案来访问源文件的内容。
到了这里,就可以理解为什么inode信息中不包含文件名了;
因为如果文件名信息包含在inode中,并且创建了hard link,此时为何还需要两块不同的block区域
来储存文件信息呢?进而hard link还有什么意义呢?
# rm /tmp/file
# cat /tmp/file
cat: can’t open ‘/tmp/file’: No such file or directory
#
# cat /tmp/hard_link
hard link test 3
#
# ls -hli /tmp/hard_link
  7996 -rw-r–r–    1 root    root          17 Jan  1 00:29 /tmp/hard_link
#

5. 为目录创建symbolic link?
因为新建的symbolic link目录与源目录是同一个inode,所以对这两个目录的访问具有完全相同的表现。
# mkdir /tmp/directory
# ln -fs /tmp/directory/ /tmp/dir_sym_link
#
# ls -hdi /tmp/directory/
  14018 /tmp/directory/
# ls -hdi /tmp/dir_sym_link/
  14018 /tmp/dir_sym_link/
#
# touch /tmp/directory/file
# ls -hil /tmp/directory/file
  14781 -rw-r–r–    1 root    root            0 Jan  1 00:47 /tmp/directory/file
# ls -hil /tmp/dir_sym_link/file
  14781 -rw-r–r–    1 root    root            0 Jan  1 00:47 /tmp/dir_sym_link/file
#
# echo “directory symbolic test” > /tmp/dir_sym_link/file
# cat /tmp/dir_sym_link/file
directory symbolic test
# cat /tmp/directory/file
directory symbolic test
#

6. 为目录创建hard link?
从结果看,为目录创建hard link失败了。
# ln /tmp/directory/ /tmp/dir_hard_link
ln: /tmp/dir_hard_link: Operation not permitted

待确认问题:
1. 文件名信息既然不是存储在inode中,那是存储在哪的呢?
2. 为目录创建symbolic link,竟然和源目录文件是同一个inode,目录有什么特殊性?

推荐阅读:

Linux下学习ln命令笔记 http://www.linuxidc.com/Linux/2012-08/67847.htm

Linux上ln命令详解 http://www.linuxidc.com/Linux/2013-01/77624.htm

Linux上ln命令详细使用说明 http://www.linuxidc.com/Linux/2012-09/70203.htm

Linux ln命令参数及用法详解—Linux连接文件或目录命令 http://www.linuxidc.com/Linux/2012-06/61850.htm

Linux ln命令的注意事項 http://www.linuxidc.com/Linux/2011-10/44549.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux ln命令学习
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏