文件系统&硬链接&软链接

我们使用ls-l的时候看到的除了看到文件名,还看到了文件元数据

Linux7种文件类型:
普通文件、目录文件、管道文件、软链接文件、块设备文件、字符设备文件socket文件

ls-l读取存储在磁盘上的文件信息,然后显示出来
4

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <sys/stat.h>
  5 #include <string.h>
  6 
  7 //求文件的大小
  8 int main()
  9 {
 10         struct stat sbuf;
 11         if(stat("./file",&sbuf)==-1)
 12                 perror("stat"),exit(1);
 13         printf("Size:%d\n",sbuf.st_size);
 14         return 0;
 15 }

其实这个文件元信息除了通过ls方式来读取,还有一个stat命令可以看到更多信息

为了解释Inode我们需要了解文件系统

文件系统

typedef struct iofile{
    int cnt;     还剩多少个字节
    char *base;    指向缓起始地址
    char *ptr;    当前位置
    int fd;    
}FILE


超级块:存放文件系统本身的结构信息
I节点表:存放文件属性,如:文件大小、所有者、最近修改时间等
数据区:存放文件内容

因此我们知道创建一个新文件的操作:

  • 存储属性
    内核先找到一个空闲的i节点(这里是263466),内核把文件信息记录到其中。
  • 存储数据
    该文件需要存储三个磁盘块,内核找到了单个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
  • 记录分配情况
    文件内容按顺序300、500、800存放,内核在Inode上的磁盘分布区记录了上述块列表。
  • 添加文件名到目录
    新的文件名abc。Linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和Inode之间的对应关系将文件名和文件的内容及属性连接起来。

硬链接

我们看到,真正找到硬盘上文件的并不是文件名,而是Inode。其实在Linux中可以让多个文件名对应于同一个Inode

  • Size.c和def_size的链接状态文件相同,它们被称为指向文件的硬链接。内核记录了这个连接数,Inode 263466的硬链接数为2。
  • 我们在删除文件时干了两件事:
    • 在目录中将对应的记录删除
    • 将硬链接数-1。如果为0,则将对应的硬盘释放。

软链接

硬链接是通过Inode引用另外一个文件,软链接是通过名字引用另外一个文件
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件

  • 链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象。
  • 链接文件甚至可以循环链接自己。类似于编程语言中的递归。
  • 软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。
//用`ln -s` 命令可以生成一个软连接,如下:
[root@linux236 test]# ln -s source_file softlink_file

在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。

//删除硬/软链接用
rm softlink_file
//或者
unlink softlink_file

文件的三个时间

  • 最后访问时间Acess
  • 文件内容最后修改时间Modify
  • 属性最后修改时间Change

猜你喜欢

转载自blog.csdn.net/sifanchao/article/details/81739909