文章目录
inode概念
文件=数据+属性,使用
shell
ls -l
的时候可以看到除了文件名,还能看到文件元数据(属性)。

包含:
- 模式
- 硬链接数
- 文件所有者
- 组
- 大小
- 最后修改时间
- 文件名
ls-l 读取存储在磁盘上的文件信息,然后显示出来。
shell
ls -li

文件数据都存储在"块"中,那么我们还必须找打一个地方存储文件的元信息(属性信息),比如文件的创作者、文件的创建日期、文件的大小等。这种存储文件的信息的区域就叫inode,中午译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
Linux下文件的存储属性和内容分离存储的
Linux下,保存文件属性的集合叫做inode,一个文件,一个inode,inode内有一个唯一的标识符,叫做inode号。
cpp
#include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<dirent.h>
5 #include<sys/types.h>
6 #include<unistd.h>
7
8 int main(int argc,char *argv[]){
9
10 if(argc != 2){
11 fprintf(stderr,"Usage : %s <directory>\n", argv[0]);
12 exit(EXIT_FAILURE);
13 } //调用 opendir 打开 argv[1] 指定的目录,返回一个指向 DIR 结构的指针
14 DIR *dir = opendir(argv[1]); 。
15 if(!dir){
16 perror("opendir");
17 exit(EXIT_FAILURE);
18 }
19 struct dirent *entry;
20 while((entry = readdir(dir)) != NULL){
21 if(strcmp(entry->d_name, ".")==0 || strcmp(entry->d_name,"..")==0){
22 continue;
23 }
24
25 printf("Filename:%s,Inode:%lu\n",entry->d_name,(unsigned long)entry->d_ino);
26 }
27 closedir(dir);
28 return 0;
29 }

软硬连接
硬连接
真正找到磁盘上文件的并不是文件名,而是inode。其实在Linux中可以让多个文件名对应同一个inode。
shell
touch log1.txt
ln log1.txt log2.txt
ls -li log1.txt log2.txt

- log1.txt和log2.txt的链接状态完全相同,他们被称为指向文件的硬链接。内容记录了这个连接数。
- 我们在删除文件时干了两件事:1.在目录中将对应的记录删除,2.将硬链接数-1,如果为0,则将对应的磁盘释放。
软连接
硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件,但实际上,新的文件和被引用的文件inode不同,应用常见上可以想象成一个快捷方式。
shell
touch log.txt
ln -s log.txt soft
ls -li

软硬链接对比
- 软链接是独立文件
- 硬链接只是文件名和目标文件inode的映射关系
软硬链接的用途
硬链接:
- . 和 **. .**就是硬链接
- 文件备份
软链接
- 类似快捷方式

觉得我回答有用的话,记得点个关注哟!谢谢支持!