此篇介绍一下在Linux系统中软链接和硬链接的区别。

一切皆是文件

在Linux系统中,一切皆是文件。比如

  1. 普通文件
  2. 目录文件
  3. 链接文件
  4. 设备文件

文件描述符(File Descriptor)

文件描述符是内核为了高效管理已被打开的文件所创建的索引,其值是一个非负整数(通常是小整数)。
用于指代被打开的文件,所有执行 I/O 操作的系统调用都通过文件描述符。
示例如:

0  stdin  标准输入
1  stdout  标准输出
2  stderr  标准错误

comand ... 2>&1 | tail

中,2表示标准错误,1是标准输出,中间的 & 表示后面跟的数字是文件描述符而不是一个文件。

软链接

ln -s from.txt to.txt

  1. ln命令默认创建的是硬链接,如果加入了“-s”参数,则会生成一个软链接。
  2. 软链接又叫符号链接。
  3. 软连接可以是任意文件或目录,可以链接不同文件系统的文件,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身,这一点类似于 Windows 操作系统下的快捷方式。

硬链接

  1. Linux下的文件是通过索引节点(Inode)来识别文件。
  2. 在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Number)。
  3. 在 Linux 中,多个文件名指向同一索引节点是存在的,所以硬连接指通过索引节点来进行的连接,即每一个硬链接都是一个指向对应区域的文件。
  4. 硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。
  5. 只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个链接被删除后,文件的数据块及目录的连接才会被释放,也就是说,文件才会被真正删除。