zoukankan      html  css  js  c++  java
  • inode

    常用命令

    [root@localhost ~]# stat log-consumer.tgz
      文件:"log-consumer.tgz"
      大小:8167640   	块:15960      IO 块:4096   普通文件
    设备:fd02h/64770d	Inode:203135374   硬链接:1
    权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
    最近访问:2019-11-28 21:09:59.788123948 +0800
    最近更改:2019-11-28 21:09:47.708063560 +0800
    最近改动:2019-11-28 21:09:47.708063560 +0800
    创建时间:-
    
    [root@localhost ~]# df -i
    文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
    /dev/vda2      51200000   92450 51107550       1% /
    devtmpfs         482424     345   482079       1% /dev
    tmpfs            485132       1   485131       1% /dev/shm
    tmpfs            485132     439   484693       1% /run
    tmpfs            485132      16   485116       1% /sys/fs/cgroup
    /dev/vda5      52990976       3 52990973       1% /data
    /dev/vda1        153600     327   153273       1% /boot
    tmpfs            485132       1   485131       1% /run/user/0
    
    [root@localhost ~]# ls -i log-consumer.tgz
    203135374 log-consumer.tgz
    [root@localhost ~]#
    

    硬链接

    ln 源文件 目标文件
    

    这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

    inode的特殊作用

    由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

      1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

      2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

      3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

    第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

    理解inode

    filegraph2.png

    文件描述符、打开文件表以及inode

    1、文件描述符和inode号码是不同的两个东西。

    2、对于每个进程,系统会建立一个进程控制块(PCB)来保存相关的信息,而这个PCB在内核中的表现其实就是一个称为task_struct的结构体,这个结构体的成员用来保存与此进程有关的相关信息,其中有个成员是struct file_struct *files,它是用来找到此进程所有打开的文件列表的,files变量指向的是struct file_struct类型的结构体,这个结构体中有一个成员是一个指针数组struct file *fd_array[],这个数组中的每个元素会指向一个struct file的结构体,这个结构体是用来描述一个打开的文件的,有很多的成员,其中有个成员是指向struct file_operation的指针变量,而struct file_operation结构体中包括了很多的函数指针,也就是open,write,realease,read等等对文件进行操作的函数,具体这些函数的实现就是驱动开发需要做的事情。如下图所示。

    文件IO详解(二)---文件描述符(fd)和inode号的关系

  • 相关阅读:
    从倒水问题到欧几里得算法扩展
    uva 10651
    STC12C5201AD AD采样+串口发送模板
    [置顶] 中国象棋程序的设计与实现–楚汉棋兵(高级版)(源码)
    【Leetcode】Same Tree
    问卷调查模块实现的过程中的历程
    差一本CSS 3的书,有兴趣的作者来写
    [置顶] 网络认证小结——你有网络身份证吗?
    音乐播放器的实现(简易版)
    空格填充器(alignBySpace)
  • 原文地址:https://www.cnblogs.com/zhouj-happy/p/12439397.html
Copyright © 2011-2022 走看看