当前位置: 首页 > 科技观察

Linux下软链接和硬链接的区别

时间:2023-03-16 11:22:55 科技观察

在Linux系统中,一切都是文件,但是为了区分不同类型的东西,我们在上一篇文章中有:普通文件目录文件链接文件设备文件《阿里面试题 | Nginx 所使用的 epoll 模型是什么?》我们讨论了文件描述符的概念:文件描述符(filedescriptor)是内核为了高效管理已经打开的文件而创建的索引。它的值是一个非负整数(通常是一个小整数),用来指代打开的文件,所有执行I/O操作的系统调用都要经过文件描述符。对于一些使用linux的用户,会有类似如下的写法:g++lots_of_errors2>&1|head其中2in2>&1表示“标准错误”,1表示“标准输出”,中间的&表示后面的数字是文件描述符而不是文件(否则所有的“标准错误”都会被重定向到一个文件命名为1)。本文将阐述另一个采访重点:谈谈Linux下有哪些链接?软链接和硬链接?它们之间有什么区别?Linux下的链接作为Linux用户,Linux系统提供了ln命令来链接文件。我们一定见过类似下面的命令:这时候如果ls查看当前目录下的文件,你会发现:那么这个foo.txt是什么?这是一个文件链接,文件链接主要分为硬链接和软链接。通过查看ln--help可以看到一些重要的内容:ln命令默认创建一个硬链接。如果加上-s参数,会生成一个软链接。硬链接首先我们看一下ln默认创建的硬链接。由于Linux下的文件是由索引节点(Inode)来标识的,在Linux文件系统中,无论磁盘分区中存放的是什么类型的文件,都是赋予它的。分配一个编号,称为索引节点编号(InodeNumber)。在Linux中,存在多个指向同一个索引节点的文件名,所以硬链接是指通过索引节点进行连接,即每个硬链接都是指向对应区域的一个文件。这里我们创建一个文件foo.txt,然后创建一个硬链接可以看到:前面的6817859是文件的inode,可以简单的认为是C语言中的一个指针,它指向物理硬盘的一个block,其实文件系统会维护一个引用计数。只要有文件指向这个块,它就不会从硬盘上消失。这里我们会发现这两个文件的inode相同,查看文件内容会发现是同一个文件。:硬链接的作用是让一个文件有多个有效的路径名,这样用户就可以建立重要文件的硬链接,防止“误删”。由于目录的index节点有多个连接,假设我们删除了原来的foo.txt文件:此时文件内容仍然存在,所以只删除一个链接并不会影响inode本身和其他链接,只有最后一个链接被删除,文件的数据块和目录内容的连接才会被释放,也就是文件被真正删除。软链接软链接也称为符号链接。该文件包含另一个文件的路径名。例如上图中,foo.txt是bar.txt的软链接,bar.txt是实际文件,foo.txtcontains是bar.txt的inode记录。软链接可以是任意文件或目录,可以链接不同文件系统中的文件。在读取或写入符号文件时,系统会自动将操作转换为对源文件的操作,但在删除链接文件时,系统只会删除链接文件,而不会删除源文件本身,类似于Windows操作系统中的快捷方式。软链接和硬链接的区别有了上面的知识,我们就可以简单的回答一下面试中的问题:软链接和硬链接有什么区别?总结一下:掌握了链接的知识后,还可以一起准备以下相关的面试题:Linux文件系统有哪些Linux中的文件类型有哪些用户进程间通信的主要方式有哪些?