LinMao's Blog
学习科研记录与分享!

ln命令

最近发现一个命令ln非常好用,可以用它来更改命令行中软件的默认版本,比如更改cuda和python的默认版本;还可以在用lighttp共享文件目录的时候直接创建软链接而不用复制文件。

命令格式

ln [参数] [ 源文件或目录] [目标文件或目录(也就是要生成的文件或目录)]

命令功能

给文件建立链接,也就是建立文件的别名,可以通过链接访问源文件,链接文件只是一个文件入口,并不占用很大的磁盘空间。链接分为两种: 硬链接(hard link)与软链接(又称符号链接,即 soft link 或 symbolic link)。

命令参数

必要参数:

-s:软链接(符号链接)

-b: 删除,覆盖以前建立的链接

-d:允许超级用户制作目录的硬链接

-f:强制执行

-i:交互模式,文件存在则提示用户是否覆盖

-n:把符号链接视为一般目录

-v:显示详细的处理过程

选择参数:

-S“-S<字尾备份字符串> ”或 “–suffix=<字尾备份字符串>”

-V “-V<备份方式>”或“–version-control=<备份方式>”

--help 显示帮助信息

--version 显示版本信息

选择参数基本用不着,基本不需要了解怎么用。

一些注意

  1. 链接如果是用相对路径创建的链接,那么移动链接以后,链接会编程死链;所以,如果想要移动链接,用绝对路径创建链接。
  2. 不管是软链接还是硬链接,都是修改那一个地方,对应的链接的文件都同样改动;也就是不管是软链接还是硬链接,文件都保持同步变化。
  3. 软链接只是在相应位置生成一个符号链接,不占用磁盘空间;硬链接在相应位置生成一个与源文件大小相同的文件。

软链接和硬链接的区别

找了好多网上好多文章,说的都不是很清楚,所以总结一下软链接和硬链接的区别。

软链接:

  1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  2. 软链接可以 跨文件系统 ,硬链接不可以
  3. 软链接可以对一个不存在的文件名进行链接
  4. 软链接可以对目录进行链接

硬链接:

  1. 硬链接,以文件副本的形式存在。但不占用实际空间。
  2. 不允许给目录创建硬链接
  3. 硬链接只有在同一个文件系统中才能创建

网上找到的一般都是说的上面这些区别,另外还着重提到了不管是软链接还是硬链接都不怎么占用磁盘空间,软链接比较好理解,但是硬链接不是在相应位置生成一个与源文件大小相同的文件吗,为什么也会不怎么占用磁盘空间。

解答这个问题,首先要了解一下Linux下的文件系统。

数据文件被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方;而元数据则是描述数据的数据,比如文件的附加属性,如文件大小、创建时间、所有者等信息。

上图展示了通过文件名获得磁盘上文件内容的过程。在Linux中,元数据中的inode号(索引节点号,是元数据的一部分但是不包括文件名)才是文件的唯一标识而非文件名。文件名是给人来看的,方便人们记忆和使用,对于系统和程序只认inode号(索引节点号)。Liunx下可以通过stat filename来查看文件的inode号。

搞清楚上面这个问题,上面所有的软链接和硬链接的问题都迎刃而解。

软硬链接的作用原理如上图所示,软链接就是一个普通文件,只是数据块内容有点特殊,数据块的内容是指向另外一个文件名;而硬链接都只是指向相同的inode号,而在磁盘中真正存储数据课占用磁盘空间的是data block,外在显示的filename只是给人看的,并不占什么磁盘空间,所以说硬链接也不占用磁盘空间。

另外,inode号随着文件的存在而存在,并且在文件系统中inode号是唯一的,当Linux挂载多个文件系统时,多个文件系统可能会出现inode号重复的情况,这就是为什么硬链接不能跨文件系统,而软链接可以。

到这里就基本弄清楚了软链接和硬链接的原理,但是我在想既然有软链接为什么还要硬链接,在电脑上看到很多地方都有软链接,比如cuda和python版本指定的时候都是指定软链接的,硬链接很少用到。

其实硬链接的用处还是很多的,首先能够很好地防止误删,删除一个硬链接只是删除了一个从文件名到inode号的映射,通过其他的硬链接依旧能访问。另外,删掉源文件名,依旧可以通过硬链接访问data block中的内容,而删掉源文件名软链接就变成死链了;还有,对于任何一个文件我执行stat命令都会显示有一个硬链接,这样说来所有的文件名本质就是一个硬链接,所以平时删除文件其实只是删除了所有filename到inode的映射而已。另外,硬链接还可以隐藏文件路径,比如创建一个路径下的文件硬链接,然后将硬链接放到其他地方,这样编辑的时候可以直接打开硬链接编辑,内容会在原路径下的文件中更新而又不会暴露原文件路径。

至此,终于搞清楚了ln名的用法和软硬链接的原理。

 

Reference:

理解 Linux 的硬链接与软链接

 

赞(0) 打赏
转载请注明出处:LinMao's Blog(林茂的博客) » ln命令

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

LinMao's Blog(林茂的博客)

了解更多联系我们

觉得文章有用就打赏一下作者吧~

支付宝扫一扫打赏

微信扫一扫打赏