ln命令学习

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

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

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

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

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

推荐阅读:

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

图片 1

待确认问题:

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

相关文章