ln 指令 link file

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

ln 指令 link file

Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。一个比较实际的场景就是/lib/目录下的动态链接文件,别的地方经常通过软链接使用这些动态链接文件。不过要注意:不管是软链接和硬链接,都是源文件的链接,对链接的操作都是对源文件的操作。

在 Unix 世界里有两个’link’(链接)概念,一般称之为硬链接和软链接(也叫符号链接)。

  • 一个硬链接仅仅是一个文件名。一个文件可以有好几个文件名,只有将最后一个文件名从磁盘上删除,才能把这个文件删掉(不再有文件名指向这个磁盘空间)。文件名的个数是由ls -l来确定的。所有的文件名都处于同一个状态,也就没有什么"源名字"之说(也就是说所有的文件的地位都是一样的)。通常文件系统里的一个文件的所有名字包含着一样的数据信息,不过这样也不是必需的。

  • 一个软链接(或符号链接)是完全不同的:它是一个包含了路径信息的小小的指针文件。因此,软链接可以指向不同文件系统里的文件(比如由NFS装载的不同机器文件系统上的文件),甚至可以指向一个不一定确实存在的文件。在软链接文件被访问(系统调用open(2)stat(2))的时候,操作系统用该文件所包含的路径替换该文件的访问介入点,从而实现对所指文件的访问。(用命令rm(1)unlink(2)可以删除链接,注意不是删除该文件所指向的文件。系统指定调用lstat(2)readlink(2)来读取链接文件与其所指文件的状态。到底是对软链接文件操作,还是对被指向文件操作,由于不同操作系统件存在不同的系统调用,而存在着差异。)

简单归纳:

软链接:

  1. 软链接,以路径的形式存在。类似于 Windows 操作系统中的快捷方式

  2. 软链接可以跨文件系统,硬链接不可以

  3. 软链接可以对一个不存在的文件名进行链接

  4. 软链接可以对目录进行链接

硬链接:

  1. 不允许给目录创建硬链接

  2. 硬链接只有在同一个文件系统中才能创建


1
2
ln [options] source [dest]
ln [options] source...directory
  • -s:软链接 (符号链接)

创建硬链接:

ln ccc.txt ccc-ln.txt:可以看到两个文件类型都是普通文件

创建软链接:

ln -s bbb.txt bbb-s-ln.txt:可以看到链接的文件类型是 l,也就是链接文件,跟find-type参数吻合,跟ll的输出结果的第一列也吻合

注意,在 ls -l 的查询结果中:

  • 软链接文件后会有箭头 -> 指向其源文件,且颜色为浅蓝色,表示为链接文件

  • 硬链接为灰色,为普通文件

一般 ls -l 结果中 find-type 参数中的链接文件类型,指的都只是软链接,而不是硬链接,硬链接就是普通文件


注意:不能创建目录的硬链接

可以创建目录的软链接

软链接其实就是文件,删除直接用rm即可,注意,不管链接指向文件还是目录,链接都是文件,rm直接删除即可,不需要带-r


如果仅仅只给出一个文件名,报错;

如果最后一个参数是一个已存在的目录名,ln 将在那个目录里给每一个源文件(源文件可以有多个)用以与源文件相同的文件名产生链接,

如果只给出两个文件名,ln将产生源文件的链接;

如果最后一个参数不是一个目录名或多于两个文件名,则报错。


硬链接和软链接的不同的更深层次的理解:

0%