Skip to content
On this page

ln指令


标签:linux/cmd  

软链接

创建软链接文件:

bash
ln -s TARGET LINK_NAME

-s, --symbolic
    make symbolic links instead of hard links
  • TARGET :目标文件
  • LINK_NAME:链接文件

关于目标文件链接:

bash
ln -s ./a.out ./day01/k

这条指令创建的链接文件 k 实际上指向的是 ./day01/a.out 而非当前目录中的 ./a.out 。(实际上创建软链接时 TARGET 即便不存在,也可以成功创建软链接,所以其实可以把它当作一个字符串。)

bash
lrwxrwxrwx 1 cyan cyan    32 May 25 10:05 g -> /home/cyan/c/a.out
lrwxrwxrwx 1 cyan cyan     7 May 25 09:56 k -> ./a.out
lrwxrwxrwx 1 cyan cyan     8 May 25 10:09 p -> ../a.out

所以 TARGET 尽量使用绝对路径。

硬链接

bash
ln TARGET LINK_NAME

当硬链接 TARGET 不存在时,就会报错。

创建硬链接后,文件的计数会加1,使用 ls -i 查看 inode 号,如果是同一个 inode 号,则表示为同一文件。

原文件的删除,不会影响到硬链接文件,但计数会减 1。

bash
$ ln a.out b.out # 创建硬链接
$ ll # 链接计数为2
-rwxr-xr-x 2 cyan cyan 16K May 23 17:13 a.out
-rwxr-xr-x 2 cyan cyan 16K May 23 17:13 b.out
$ ls -i # 具有相同 inode 号
27122 a.out  27122 b.out
$ rm a.out # 删除源文件
$ ll # 计数为 1
-rwxr-xr-x 1 cyan cyan 16K May 23 17:13 b.out
  • 硬链接不要求 TARGET 为绝对路径,创建时也会检查文件存在
  • 硬链接文件和源文件等价,删除不会影响
  • 有相同 inode 号
  • 文件类型是 -
  • 只有链接文件计数为 0 时才真正删除

Last updated: