🌏博客主页:PH_modest的博客主页
🚩当前专栏:Linux跬步积累
💌其他专栏:
🔴 每日一题
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!
一、软硬链接
软链接
如何创建软链接文件
我们可以通过下面的命令创建一个文件的软链接。
[_HPH@iZbp1ezziqb3x7ubzpkn9wZ demo-8-19]$
ln -s myproc link.soft
通过ls -l -i
命令我们可以看到,软链接文件的inode和源文件的inode是不同的,并且软链接文件的大小比源文件的大小要小很多。
基本概念
软链接,也称为符号链接(Symbolic Link),是一种文件系统对象,它指向另一个文件或目录的路径。软链接本身不包含数据,而是作为一个指针,指向它所链接的目标文件或目录。 当访问软链接时,系统会自动将访问请求重定向到链接所指向的目标。
软链接文件相对于源文件来说是一个独立的文件,该文件有自己的inode号,但是该文件只包含了源文件的路径名,所以软链接文件的大小要比源文件小的多。
软链接就类似于Windows操作系统中的快捷方式。
但是当软链接文件只是源文件的一个标记而已,当删除了源文件之后,链接文件就会变成一个悬空链接,虽然仍然保留文件名,但是不能执行或是查看软链接的内容了。
软链接的特点
- 跨文件系统:软链接可以跨越不同的文件系统,而硬链接(Hard Link)则不能。
- 可删除:如果目标文件被删除,软链接会变成一个悬空链接(Dangling Link),此时访问软链接会报错。
- 可更新:可以更改软链接指向的目标,而硬链接则不能。
- 空间占用小:软链接文件本身几乎不占用磁盘空间,因为它只是保存了一个路径。
硬链接
如何创建硬链接文件
我们可以通过下面的命令创建一个文件的硬链接。
[_HPH@iZbp1ezziqb3x7ubzpkn9wZ demo-8-19]$
ln myproc link.hard
通过ls -i -l
命令我们可以看到,硬链接文件的inode号与源文件的inode号是相同的,并且硬链接文件的大小和源文件的大小也是相同的,特别注意的是,当创建了一个硬链接文件后,该硬链接文件和源文件的硬链接数都变成了2。
硬链接文件就是源文件的一个别名,一个文件有几个文件名,该文件的硬链接数就是几,这里inode号为1449012的文件有两个,所以硬链接数为2。
与软链接不同的是,当硬链接的源文件被删除后,硬链接文件仍然能正常执行,只是文件的链接数减少了一个。
基本概念
硬链接(Hard Link)是一种文件系统中的链接方式,它指向文件系统中的一个文件或目录的物理位置。与软链接(Symbolic Link)不同,硬链接实际上是文件系统中的一个独立条目,它与原始文件共享相同的inode(文件索引节点),这意味着硬链接和原始文件是同一个文件的不同名称。
总而言之,硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改之后,所有与其有硬链接的文件都一起修改了。
硬链接的特点
- 同一文件系统:硬链接只能在同一个文件系统中创建,不能跨越文件系统。
- 共享inode:硬链接和原始文件共享同一个inode,因此它们拥有相同的文件属性,如权限、所有者等。
- 不可删除:即使删除了原始文件,只要硬链接还存在,文件内容也不会丢失。
- 空间占用:硬链接不占用额外的磁盘空间,因为它们只是指向原始文件的inode。
其他知识点
1、为什么刚刚创建的目录的硬链接数是2?
我们创建一个普通文件,该普通文件的硬链接数是1,因为此时该文件只有一个文件名。那为什么我们创建一个目录后,该目录的硬链接数是2?
因为每个目录创建之后,该目录下会默认有两个隐含文件.
和..
,它们分别代表当前目录和上级目录,因此这里创建的目录有两个名字,一个是dir
还有一个是 .
,所以刚创建的目录硬链接数是2,。通过命令我们也可以看到dir
和该目录下的.
的inode号是一样的,也就可以说明它们代表的是同一个文件。
小技巧: 一个目录有多少个子目录:硬链接数 - 2
2、能不能给目录建立硬链接?
主要因为环路问题,不允许用户给目录建立硬链接,除非系统自己建立!
总结:
-
目录结构循环:如果允许对目录创建硬链接,可能会导致目录结构中的循环。例如,如果有一个目录A,创建一个硬链接B指向A,然后在A中再创建一个硬链接C指向B,这样就形成了一个循环,操作系统将无法确定这个循环的结束点。
-
文件系统损坏:硬链接共享相同的inode,如果目录的硬链接被删除或移动,可能会破坏目录树的结构,导致文件系统损坏。
-
inode使用冲突:目录的inode包含了指向其子目录和文件的指针。如果存在硬链接,inode的计数器(记录有多少个硬链接指向该inode)可能会在删除或移动硬链接时产生冲突。
-
文件系统设计:文件系统的设计通常不允许目录有多个硬链接,以避免上述问题。相反,软链接提供了一种灵活的方式来引用目录,而不会产生硬链接可能引起的问题。
软硬链接的区别
- 软链接是一个独立的文件,有独立的inode,而硬链接没有独立的inode。
- 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录。
总结
- 硬链接本质就是在指定目录下,插入新的文件名和目标文件的映射关系,并让inode的引用计数++。
- 软链接本质就是一个独立文件,软链接内容里面放的是目标文件的路径!(类似于快捷方式)
二、文件的三个时间
在Linux中,我们可以使用命令stat 文件名
来查看对应文件的信息。
这其中包含了文件的三个时间信息:
- Access: 文件最后被访问的时间。
- Modify: 文件内容最后的修改时间。
- Change: 文件属性最后的修改时间。
当我们修改文件内容时,文件的大小一般也会随之改变,所以一般情况下Modify的改变会带动Change一起改变,但修改文件属性一般不会影响到文件内容,所以一般情况下Change的改变不会带动Modify的改变。
我们若是想将文件的这三个时间都更新到最新状态,可以使用命令touch 文件名
来进行时间更新。
注意: 当某一文件存在时使用touch命令,此时touch命令的作用变为更新文件信息。