ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:218.09KB ,
资源ID:8560031      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8560031.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux inode 学习.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux inode 学习.docx

1、Linux inode 学习Linux inode 学习 收藏人:gzxx2007sddx 2014-03-17|阅:1转:17 |分享 微信朋友圈腾讯空间新浪微博腾讯微博人人网开心网搜狐微博推荐给朋友举报|来源 大 中 小 在Linux文件系统中,很多人对Inode都不太明白,今天我就和大家一起来分享一下我对Inode的认识,如果有理解错误的地方,请大家多多批评指点。先看看Inode的结构图再来了解一下文件系统如何存取文件的1、根据文件名,通过Directory里的对应关系,找到文件对应的Inode number2、再根据Inode number读取到文件的Inode table3、再根据I

2、node table中的Pointer读取到相应的Blocks这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inode number。如下图 Directory:A directory is a mapping between the human name for the file and the computers inode number.所以说,这个Directory不是文件,我们可以看作是文件系统中的一个属性,只是用来关键文件名与Inode number。这个一定要理解好,否则后面关于硬链接的内容,就不容易理解了。我在

3、一天一点学习Linux之文件与目录权限的基本概念中讲到第二栏表示的是有多少文件连接到inode如果是一个文件,此时这一字段表示这个文件所具有的硬链接数, 如果是一个目录,则此字段表示该目录所含子目录的个数。 现在是不是容易理解了?如果你还不是很明白,那么下面我们就再通过实例让大家明白。我们以RHEL6系统为例在根目录下创建一个test目录,我们进入此目录,进行操作。rootyufei test# pwd/testrootyufei test# touch testfilerootyufei test# mkdir testdir创建实验文件和目录rootyufei test# ls -lito

4、tal 4977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir976 -rw-r-r-. 1 root root 0 Apr 5 16:47 testfile查看到文件与目录的Inode和inode count分别为977 2 testdir976 1 testfile现在目录的链接数为2,文件的链接数为1。为什么会这样呢?其实很好理解。对于目录而言,每个目录里面肯定会有两个特殊目录,那就是.和.这两个目录,我们前面的课程中也讲到,.表示当前的目录,而.则是表示上层目录。我们也知道,在Linux系统中,是从根来开始查找的,要想找到某个目录,必

5、需要先找到他的上层目录,所以说,空目录(严格的来说,不能叫空目录)是有两个链接到相应的Inode number的。作为文件很明显,他只有一个链接到相应的Inode number。也不用多说,下面我们就来看看这个链接数是如何改变的。继续上面的操作rootyufei test# ln testfile testfile.hardrootyufei test# ln -s testfile testfile.soft对testfile建立一个硬链接和一个软链接rootyufei test# ls -iltotal 4977 drwxr-xr-x. 2 root root 4096 Apr 5 16:

6、48 testdir976 -rw-r-r-. 2 root root 0 Apr 5 16:47 testfile976 -rw-r-r-. 2 root root 0 Apr 5 16:47 testfile.hard978 lrwxrwxrwx. 1 root root 8 Apr 5 17:03 testfile.soft - testfile再查看文件和目录的属性,我们就发现:创建一个硬链接后,testfile的inode count增加了一个。而且testfile和testfile.hard这两个的Inode number是一样的。这个硬链接就是重新创建了一个文件名对应到原文件的I

7、node。实质就是在Directory中增加了一个新的对应关系。通过这个例子,你是不是更清楚了,这个Inode count的含义了。他就是指,一个Inode对应了多少个文件名。下面我们再来看看硬链接的其他特点rootyufei # watch -n 1 df -i;dfEvery 1.0s: df -i;df Tue Apr 5 21:52:53 2011Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 960992 105415 855577 11% /tmpfs 63946 1 63945 1% /dev/shmFilesyst

8、em 1K-blocks Used Available Use% Mounted on/dev/sda1 15118728 2747612 11603116 20% /tmpfs 255784 0 255784 0% /dev/shm用上面的命令可以实时查看系统中所剩的block和inode的变化数量。建议大家不要用deumpe2fs和tune2fs这两个命令,如果使用他们来查看的话,将会很郁闷你会发现,你无论怎么创建文件或对文件写入内容,Inode和block的值都不会变,除非你每操作一次,重新启动一次系统,而用了上面的命令,就是第秒钟监视他们的变化情况。关于df的命令使用,大家可以自行查看

9、帮助进行学习。当然还有du这个命令,他们都和文件系统有关。我们再来创建一个硬链接rootyufei test# ls -litotal 4977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir976 -rw-r-r-. 2 root root 0 Apr 5 16:47 testfile976 -rw-r-r-. 2 root root 0 Apr 5 16:47 testfile.hard978 lrwxrwxrwx. 1 root root 8 Apr 5 17:03 testfile.soft - testfilerootyufei te

10、st# ln testfile testfile.hard1rootyufei test# ls -litotal 4977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir976 -rw-r-r-. 3 root root 0 Apr 5 16:47 testfile976 -rw-r-r-. 3 root root 0 Apr 5 16:47 testfile.hard976 -rw-r-r-. 3 root root 0 Apr 5 16:47 testfile.hard1978 lrwxrwxrwx. 1 root root 8 Apr

11、5 17:03 testfile.soft - testfile可以再观察一下Inode count和Inode number的对应关系。下面再看看inodes和blocks的变化rootyufei # watch -n 1 df -i;dfEvery 1.0s: df -i;df Tue Apr 5 21:53:38 2011Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 960992 105415 855577 11% /tmpfs 63946 1 63945 1% /dev/shmFilesystem 1K-blocks U

12、sed Available Use% Mounted on/dev/sda1 15118728 2747612 11603116 20% /tmpfs 255784 0 255784 0% /dev/shm我们发现,inodes和blocks是没有减少的,所以说,硬链接是不会占用磁盘的空间的。如果说删除硬链接的话,就会改变Inode count的数量。硬链接还有其他的两个特性:不能跨Filesystem也不能link目录。下面再来看看这个软链接rootyufei test# ls -il testfile.soft testfile976 -rw-r-r-. 3 root root 0 Apr

13、 5 21:50 testfile978 lrwxrwxrwx. 1 root root 8 Apr 5 21:52 testfile.soft - testfile他的Inode number和原文件不一样。而且大小也发生了变化。可见,这个软链接是重新建立了一个文件,而文件是指向到原文件,而不是指向原Inode。当然他会占用掉 inode 与 block。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接文件的内容了。但软链接是可以跨文件系统,而且是可以链接目录。他就相当于windows系统下的快捷方式一样。通过这个特性,我们可以通过软链接解决某个分区ino

14、de conut不足的问题(软链接到另一个inode count足够多的分区)。接下来,我们再来分析一下复制文件、移动文件和删除文件对inode的影响rootyufei # watch -n 1 df -i;dfEvery 1.0s: df -i;df Tue Apr 5 21:57:38 2011Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 960992 105415 855577 11% /tmpfs 63946 1 63945 1% /dev/shmFilesystem 1K-blocks Used Available U

15、se% Mounted on/dev/sda1 15118728 2747612 11603116 20% /tmpfs 255784 0 255784 0% /dev/shmrootyufei test# ls -litotal 4977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir976 -rw-r-r-. 3 root root 0 Apr 5 18:54 testfile976 -rw-r-r-. 3 root root 0 Apr 5 18:54 testfile.hard976 -rw-r-r-. 3 root root 0 Ap

16、r 5 18:54 testfile.hard1978 lrwxrwxrwx. 1 root root 8 Apr 5 17:03 testfile.soft - testfile我们先记录以上的信息先看复制文件的情况rootyufei test# cp testfile testfile.cprootyufei test# ls -li976 -rw-r-r-. 3 root root 0 Apr 5 21:50 testfile979 -rw-r-r-. 1 root root 0 Apr 5 21:58 testfile.cp我们只对比这两个文件,发现Inode number不一样,我们

17、再来看看inodes和blocks的剩余情况Every 1.0s: df -i;df Tue Apr 5 22:02:49 2011Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 960992 105416 855576 11% /tmpfs 63946 1 63945 1% /dev/shmFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda1 15118728 2747620 11603108 20% /tmpfs 255784 0 255784 0% /dev

18、/shm发现inodes减少了一个,而blocks也少了,这就说明,复制文件是创建文件,并占Inode和Block的。文件创建过程是:先查找一个空的Inode,写入新的Inode table,创建Directory,对应文件名,向block中写入文件内容关于移动文件和删除文件的实验,大家可以自己动手来实践吧。我直接给出相应的说明。移动文件,他分两种情况:在同一个文件系统中移动文件时创建一个新的文件名和Inode的对应关系(也就是在Directory中写入信息),然后在Directory中删除旧的信息,更新CTIME,其他的信息如Inode等等均无任何影响在不同文件系统移动文件时先查找一个空的I

19、node,写入新的Inode table,创建Directory中的对应关系,向block中写入文件内容,同时还会更改CTIME。删除文件他实质上就是减少link count,当link count为0时,就表示这个Inode可以使用,并把Block标记为可以写,但并没有清除Block里面数据,除非是有新的数据需要用到这个block。最后我们来做个总结:1、一个Inode对应一个文件,而一个文件根据其大小,会占用多块blocks。2、更为准确的来说,一个文件只对应一个Inode。因为硬链接其实不是创建新文件,只是在Directory中写入了新的对应关系而已。3、当我们删除文件的时候,只是把In

20、ode标记为可用,文件在block中的内容是没有被清除的,只有在有新的文件需要占用block的时候,才会被覆盖。 附录:kernel部分inode数据结构列表 、*索引节点对象由inode结构体表示,定义文件在linux/fs.h中*/struct inode struct hlist_node i_hash; /* 哈希表 */ struct list_head i_list; /* 索引节点链表 */ struct list_head i_dentry; /* 目录项链表 */ unsigned long i_ino; /* 节点号 */ atomic_t i_count; /* 引用记数

21、 */ umode_t i_mode; /* 访问权限控制 */ unsigned int i_nlink; /* 硬链接数 */ uid_t i_uid; /* 使用者id */ gid_t i_gid; /* 使用者id组 */ kdev_t i_rdev; /* 实设备标识符 */ loff_t i_size; /* 以字节为单位的文件大小 */ struct timespec i_atime; /* 最后访问时间 */ struct timespec i_mtime; /* 最后修改(modify)时间 */ struct timespec i_ctime; /* 最后改变(chang

22、e)时间 */ unsigned int i_blkbits; /* 以位为单位的块大小 */ unsigned long i_blksize; /* 以字节为单位的块大小 */ unsigned long i_version; /* 版本号 */ unsigned long i_blocks; /* 文件的块数 */ unsigned short i_bytes; /* 使用的字节数 */ spinlock_t i_lock; /* 自旋锁 */ struct rw_semaphore i_alloc_sem; /* 索引节点信号量 */ struct inode_operations *i

23、_op; /* 索引节点操作表 */ struct file_operations*i_fop; /* 默认的索引节点操作 */ struct super_block *i_sb; /* 相关的超级块 */ struct file_lock *i_flock; /* 文件锁链表 */ struct address_space *i_mapping; /* 相关的地址映射 */ struct address_space i_data; /* 设备地址映射 */ struct dquot *i_dquotMAXQUOTAS; /* 节点的磁盘限额 */ struct list_head i_dev

24、ices; /* 块设备链表 */ struct pipe_inode_info*i_pipe; /* 管道信息 */ struct block_device *i_bdev; /* 块设备驱动 */ unsigned long i_dnotify_mask; /* 目录通知掩码 */ struct dnotify_struct *i_dnotify; /* 目录通知 */ unsigned long i_state; /* 状态标志 */ unsigned long dirtied_when; /* 首次修改时间 */ unsigned int i_flags; /* 文件系统标志 */ unsigned char i_sock; /* 可能是个套接字吧 */ atomic_t i_writecount; /* 写者记数 */ void *i_security; /* 安全模块 */ _u32 i_generation; /* 索引节点版本号 */ union void *generic_ip; /* 文件特殊信息 */ u;/*索引节点的操作inode_operations定义在linux/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1