1 文件类型
- 普通文件 一般的存放数据的文件 在文件按权限里面的标识是 -
- 目录文件 目录,文件存储在目录里
- 连接文件 指向其他文件或目录的文件
- 其他文件 特殊用途的文件 如socket文件,tty文件,块设备和字符设备等
2 文件的存储方式
先看一张图:
从上面的图中我们可以看出:在linux系统里,一个文件是由下面三部分构成的
- 数据块 存储文件内容的地方
- i结点(inode) 文件索引结点,是文件的身份证一样,存放文件的
元数据
,大致包含以下内容(不包含文件名):- iNumber inode的编号
- File Type 文件类型
- Link count 文件的链接数目
- Last access time 最近一次访问的时间
- ···· 指向文件内容的磁盘物理块的指针,文件所属用户的ID,所属用户所在的组的ID等
- 目录项 保存了文件名和inode的编号
如果一个文件的类型是目录文件的话,那么它的内容就是这个目录里所有文件(包括该目录下的子目录)目录项的列表,也就是说目录文件的内容是n多个目录项。linux的文件系统在磁盘分区的时候,会划分出存放目录项的块,存放inode表的块和存放文件内容的块。linux在访问文件的时候一般是这样的:
- 先通过文件名拿到目录项,获取目录项里面的inode编号
- 根据inode编号,拿到相对应的inode,获取到inode中指向磁盘物理块的指针
- 通过指针找到相应数据块,读取或写入
3 文件链接
文件的链接分为硬链接和软连接。
3.1 硬链接
从上面的分析我们可以知道,文件的目录项指向文件的inode,在linux里面,指向一个inode可不止一个目录项,这就是硬链接的原理。所以创建硬链接就是创建一个新的目录项,指向你需要关联的文件即可,如下图所示:
硬链接的好处是允许同一个文件有多个名称,并且可以在不同的路径下访问到该文件,硬链接可以防止数据的误删除,因为我们删除文件的时候是通过文件名,也就是目录项来删除的,当一个文件有多个目录项时,我们删除其中一个的时候只是删除了一个目录项,而并非删除文件的存储的数据,也不会影响到inode本身和其他硬链接,只有当删除最后一个硬链接被删除的时候,被删除文件的目录项和inode才会被删除,而被删除文件的数据块在有新的数据写入时,会被新数据覆盖,除此之外,硬链接还有如下注意点:
- 不允许给目录创建硬链接
- 只有在同一个文件系统中才允许创建硬链接
3.2 软链接
也叫做符号链接,类似于windows中的快捷方式。与硬链接不同的是,创建软连接是创建了一个新的普通文件,只是其内容存放了被链接文件的路径(指向一个目录项):如下图所示:
软连接的好处:
- 可以跨文件系统创建,比如当一个文件系统的空间快用完了的时候,但是还需要再该文件系统下存储大量的文件(扩大文件系统的容量需要重新分区,重新分区会格式化文件系统,但是文件系统有很多文件,备份时间很长),这时候该怎么办呢?可以在该文件系统下创建软链接,链接到一个空闲的文件系统即可。逻辑上看似文件还是存到该文件系统了,但是实际上文件是存储在新的文件系统上去了。
- 可以对目录创建软连接
- 可以对一个不存在的文件创建软连接
- 当软连接所指向的文件被删除的时候,软连接就不能用了
3.3 ln命令
linux下创建文件的链接需要使用ln命令来实现,我们看一下他的简单使用:
格式:ln [选项] <被链接的文件或目录> <链接文件或目录>
选项是可选的
创建软连接:ln -s source linkfile
演示如下:
可以看出创建的软连接文件的权限是满的。
在演示一个创建目录的软连接:
创建硬连接:ln source linkfile
演示如下:
硬链接文件的权限与被链接文件一样,ls -i
会列出文件的inode编号,图中可以看出硬链接文件和源文件的inode编号是一样的。