加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

ln使用-linux下软链接和硬链接(符号链接)区别

发布时间:2022-11-10 12:32:42 所属栏目:Linux 来源:
导读:  一、概念

  链接:一种对文件的引用,分为硬链接和软链接(符号链接)。

  索引节点(inode):在Linux系统中,内核为每一个新创建的文件分配一个inode(索引结点),每个文件都有一个惟一的inode号,
  一、概念
 
  链接:一种对文件的引用,分为硬链接和软链接(符号链接)。
 
  索引节点(inode):在Linux系统中,内核为每一个新创建的文件分配一个inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。
 
  硬链接和软链接区别:
 
  1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。
 
  2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问权限不能设置,只能是777,真正的权限取决于源文件。
 
  3. 如果移动源文件,则软链接找不到,而硬链接则没有这个问题,因为软链接存的是文件的位置。
 
  4. 硬链接是一种引用关系,一个源文件建立1个硬链接,引用计数加1,删除一个文件(硬链接文件或者源文件),引用计数减1,当引用计数为0时,真正删除文件。删除源文件软链接只是找不到了目标文件。
 
  5. 不能创建目录的硬链接,不能在不同的文件系统的文件间建立硬链接,软链接则没有这些限制。
 
  二、实践
 
  1.创建一个源目录,为源目录创建一个子文件和子目录。
 
  $ mkdir linktest
  $ cd linktest
  $ mkdir sd
  $ echo “a” > sd/a.txt
  $ mkdir sd/subsd
  2. 创建2个源文件。
 
  $ echo “test1” > sf1.txt
  $ echo “test2” > sf2.txt
  $ ls -il
  total 8
  523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
  523369 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf1.txt
  523370 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf2.txt
  3. 为目录创建一个硬链接和软链接。
 
  $ ln sd hardsd
  ln: ‘sd’: hard link not allowed for directory
  目录不能创建硬链接。
 
  $ln -s sd softsd
  为目录创建软链接,目录softsd之前不存在。
 
  $ ls -il
  total 8
  523364 drwxrwxr-x.  3 user user 4096 Jun 20 12:30 sd
  523369 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf1.txt
  523370 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf1.txt
  523371 lrwxrwxrwx.  1 user user   2 Jun 20 12:30 softsd-> sd
  第一列为inode,软链接的inode和源目录的inode不相同。
 
  第二列为访问属性,l代表是软链接,后面的访问权限并非真正的权限linux软链接,权限和源文件一样。
 
  $ ls -il sd
  total 8
  523367 -rw-rw-r--.  1 user user   2 Jun 20 12:30 a.txt
  523368 drwxrwxr-x. 2 user user 4096 Jun 20 12:30 subsd
  linux软链接_linux做软路由使用什么软件_软链接
 
 
  $ cd softsd
  $ ls -il
  total 8
  523367 -rw-rw-r--.  1 user user   2 Jun 20 12:30 a.txt
  523368 drwxrwxr-x. 2 user user 4096 Jun 20 12:30 subsd
  $ cd ../
  软链接的子目录和源文件一模一样。
 
  4. 为不同的文件创建一个硬链接和软链接。
 
  $ ln sf1.txt hardsf.txt
  $ ln -s sf2.txt sotfsf.txt
  $ ls -li
  total 12
  523369 -rw-rw-r--.  2 user user   6 Jun 20 12:30 hardsf.txt
  523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
  523369 -rw-rw-r--.  2 user user   6 Jun 20 12:30 sf1.txt
  523370 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf2.txt
  523371 lrwxrwxrwx. 1 user user   2 Jun 20 12:30 softsd-> sd
  523372 lrwxrwxrwx. 1 user user   7 Jun 20 12:30 softsf.txt-> sf2.txt
  硬链接的inode、访问属性都和源文件一模一样,硬链接会增加引用计数,引用计数都变成了2。
 
  软链接的inode和源文件不一样,访问属性也不一样,且引用计数保持不变。
 
  5. 访问权限。
 
  $ chmod 000 softsf.txt
  $ chmod 000 hardsf.txt
  $ ls -li
  total 12
  $ ln sf1.txt hardsf.txt
  $ ln -s sf2.txt sotfsf.txt
  $ ls -li
  total 12
  523369  ----------.  2 user user   6 Jun 20 12:30 hardsf.txt
  523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
  523369  ----------.  2 user user   6 Jun 20 12:30 sf1.txt
  523370  ----------.  1 user user   6 Jun 20 12:30 sf2.txt
  523371 lrwxrwxrwx. 1 user user   2 Jun 20 12:30 softsd-> sd
  523372 lrwxrwxrwx. 1 user user   7 Jun 20 12:30 softsf.txt-> sf2.txt
  硬链接的访问权限直接影响自己和源文件的访问权限。
 
  软链接自身的访问权限不会改变,但是会改变源文件的访问权限。
 
  $ cat sotfsf.txt
  cat: sotfsf.txt: Permission denied
  软链接的访问权限取决于源文件
 
  $ chmod 664 sf1.txt
  $ chmod 664 sf2.txt
  linux做软路由使用什么软件_软链接_linux软链接
 
  6. 修改文件内容。
 
  $ echo “test1-m” > hardsf.txt
  $ echo “test2-m” > softsf.txt
  $ cat hardsf.txt
  test1-m
  $ cat sf1.txt
  test1-m
  $ cat softsf.txt
  test2-m
  $ cat sf2.txt
  test2-m
  源文件和引用文件都变化了。
 
  7. 移动源文件位置。
 
  $ mkdir temp
  $ mv sf1.txt temp/
  $ mv sf2.txt temp/
  $ cat hardsf.txt
  test1-m
  $ cat softsf.txt
  cat: sotfsf.txt: No such file or directory
  $ mv temp/sf1.txt .
  $ mv temp/sf2.txt .
  $ rm -r temp
  8. 删除源文件
 
  $ rm sf1.txt
  $ ls -li
  523369 -rw-rw-r--.  1 user user   6 Jun 20 12:30 hardsf.txt
  523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
  523370 -rw-rw-r--.  1 user user   6 Jun 20 12:30 sf2.txt
  523371 lrwxrwxrwx. 1 user user   2 Jun 20 12:30 softsd-> sd
  523372 lrwxrwxrwx. 1 user user   7 Jun 20 12:30 softsf.txt-> sf2.txt
  $ cat hardsf.txt
  test1-m
  删除一个文件,需要引用计数为0,则能真正删除。删除sf1.txt之后,硬链接文件的引用计数为1,再次删除才能真正删掉。
 
  $ rm sf2.txt
  $ ls -li
  523369 -rw-rw-r--.  1 user user   6 Jun 20 12:30 hardsf.txt
  523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
  523371 lrwxrwxrwx. 1 user user   2 Jun 20 12:30 softsd-> sd
  523372 lrwxrwxrwx. 1 user user   7 Jun 20 12:30 softsf.txt-> sf2.txt
  $ cat softsf.txt
  cat: sotfsf.txt: No such file or directory
  删除软链接指向的文件,由于sf2.txt的引用计数为1,可以直接删除,软链接的文件还在,只是找不到目标。
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!