linux的文件管理
linux的文件组成:
1、数据:数据就是文件内容
2、Metadata元数据:每个文件除了内容之外,都有一些相关信息。例如我们之前所提到的文件的所有者,所有组和权限,这些都属于元数据,还包含了修改时间。可ls -l显示的内容大多都属于。这些信息都保持在一个叫inode节点的结构中;
3、文件名称:其实文件名称也算是元数据,只所有把它摘出来,是因为其不保存在i节点中,文件名保持在名为dentry目录项的结构中。在实质上,该文件名是把一个文件名称和一个i节点关联起来。
总的来说:每个文件都有以下三层结构:dentry/inode以及data。dentry含有文件名并关联inode,inode含有文件元数据并指向数据data。
什么是i节点?linux系统中,文件系统内的每个文件都有一个相关的i节点,里面保存除了文件名称和数据外所有文件信息。
i节点里面有什么?
1、文件类型:linux系统中,file的含义非常笼统,文件系统内的任何东西,都有可能是个文件,包括我们提到过的常规文件、目录、符号链接、设备节点等等。
2、所有者身份及权限:每个文件和目录都有所有者、所有组合分别权限,这些信息都保持在i节点中,而且所有文件的i节点结构相同,所有我们在查看时,显示内容,以及修改的命令,都相同的。
3、时间信息:每一个i节点保存于文件文件关联的三个时间信息,通常叫做atime/ctime以及mtime。
缩写 | 命令 | 含义 |
atime | 访问时间 | 文件数据每次被阅读后更新 |
ctime | 改变时间 | 文件的i节点信息每次被改变后更新 |
mtime | 修改时间 | 文件数据每次被改变后更新 |
我们需要知道,改变修改有何不同? 当一个文件的数据更新,就说该文件被修改,mtime会更新;当一个文件的i节点更新时,就说该文件被改变,ctime会更新。
最后需要注意的是,人民常错把ctime作为创建时间,其实linux系统不记录文件创建时间,这是系统设计缺陷导致。
4、文件长度以及大小:i节点用两种度量记录文件大小,分别是长度和大小,长度表示文件数据实际的字节数,而大小则表示所占用的磁盘空间,
5、链接数量:i节点记录着文件的链接数,也就是引用该文件dentry数(就是文件名称)
使用stat命令查看i节点信息
stat filename | 显示文件状态信息 |
file | 文件名称,该信息不属于i节点的信息 |
size | 文件长度 |
blocks | 该文件占用的文件系统空间块数 |
regular* | 文件类型 |
links | 链接计数 |
uid* | 该文件所有者以及权限 |
access* | 该文件atime/mtime和ctime |
使用ls命令查看i节点信息
ls -i filename 显示文件i节点的编号
硬链接以及软链接:
什么是硬链接?比如a和b两个人同时开发一款软件,那a写完之后要拷给b,b写完也要拷给a,这样子很麻烦,如果a的文件更新之后,b的文件自动同步更新,岂不更加方面?这就是硬链接。
创建方式:ln file1 file2
什么是软链接?软链接就好比windows的快捷方式,用于链接一个文件,却占用很小的空间。
创建方式:ln -s file1 file2
注意:创建的时候,原文件在前,快捷方式在后
工作经验:一般都用软链接,硬链接基本没用
与软链接有关的事项:
1、Dangling Link 空链接:链接目标文件被删除了,软链就会变成空链
2、递归链接:file1链接file2,file2链接file1,这种相互链接,称为递归链接;
3、绝对软链以及相对软链:由路径决定的。
软链 | 硬链 |
软连接可以关联到目录 | 目录之间不可用硬链接 |
删除原文件会导致空链 | 可以删除任意一端 |
软链可以关联不同文件系统中的文件 | 硬链必须在同一个文件系统下面 |
当一个文件依赖于另一个文件而存在,一般使用软链 | 链接两端文件经常被使用到,甚至其中一端的文件不存在,用硬链接比较合适 |