Linux-ln 命令

1.ln 命令:

  • 创建符号链接: ls -s fileName softLinkName
    • 示例: ln -s test.txt test.ln
    • 查看链接: ls -l test.ln
      可以看到 test.ln 是指向 test.txt 这个文件的
      view softlink
  • 创建硬链接: ls test.txt test
    • 示例: ln test.txt test1.ln
    • 查看链接: ls -l test1.ln

view hardlink
2. 符号链接和硬链接区别:

符号链接类似于 Windows 系统的快捷方式, 符号链接要占用一个 inode 号, 符号链接可以连接到普通文件和文件夹; 硬链接不占用 inode 号, 硬链接只能链接到普通文件.

soft and hard link

Linux 读取文件首先是通过文件名找到对应的 inode 号, 然后根据 inode 号找到实际存放数据的 block 的位置, 然后读取数据.

Linux 的文件是属于某个文件夹的, 当然文件夹也是一个文件. Linux 系统创建文件夹是会分配一个 inode 和至少一个 block, 文件夹的 block 存放的数据就包括了在该文件夹下面的文件名称.

当创建一个硬链接时, 只是在该链接的所属的文件夹的 block 中增加了一个新的记录, 也就是这个硬链接的名称, 这个硬链接必然有一个指向的 inode 号, 这个 inode 号就是创建该链接时文件的 inode 号. 当删除创建链接的文件时, 通过该链接仍然能够访问文件. 硬链接相当于给同一个文件取了两个或多个名称, 通过任意一个名称都能访问到该文件的内容.

当创建一个符号链接时, 是创建了一个新的文件, Linux 系统也会给它分配一个 inode 和 block. 但是该文件和普通文件的区别在于: 普通文件的 block 中存放的是该文件的数据, 但是该文件的 block 存放的是一个文件名, 这个文件名就是它所链接到的文件. Linux 访问该链接时找到该链接所链接的实际文件, 然后再通过实际文件的名称去访问实际文件的数据. 当实际文件被删除之后, 通过链接也就访问不到文件数据了.

从编程语言的角度去理解的话, 硬链接就是指针, 而符号链接就是指针的指针. 原始的文件内容就是数组 a 指向的内容. 现在 b 也指向 a 指向的内容, b 就可称之为硬链接; 而 c 指向的是 b 而不是 b 的内容, 因此 c 可以称之为 符号链接.

int a[4] = {0};
int *b = a;
int **c = &a;
  1. 参考:
    [1] : The difference between hard and soft links
    [2] : What is the difference between a symbolic link and a hard link?
    [3] : 鸟哥的Linux私房菜
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章