我的VIM配置文件

呵呵,看见Jove把自己的VIM配置文件贴在网站上,那我也就贴一下,备份一下!提供下载,要的拿走!

将/etc/vim/vimrc中的内容全部替换即可。

下载地址:vimrc

详细代码见下:

 

Linux文件与目录的三种时间状态

今天看内核文件系统这一块又遇到了这个问题:atime,ctime,mtime分别代表什么意思他们之间的区别是什么?对此我又研究了一番!

1. mtime(medify time):最后一次修改文件或目录的时间;

2. ctime(chang time) :最后一次改变文件或目录(改变的是原数据即:属性)的时间;
如:记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。

3. atime(access time)::最后一次访问文件或目录的时间;

对于文件:
当 修改mtime时,ctime必须随着改变.因为文件大小等都属性;有人说说atime也一定会改变,要想修改文件必须先访问;其实是不对的,不必访问文 件就能修改其内容:如:

issue文件内容会变,但并没有访问文件,所以atime并没有改变.

对于目录:
访问一个目录其atime改变,mtime ,ctime不变;修改一个目录:在一个目录下touch一个文件,mtime与ctime会改变,atime不一定会变.
使用stat命令可以查看三时间值:如

也可使用:

 

目录项对象dentry结构体

VFS把目录当作文件对待,所以在路径/bin/vi中,bin和vi都属于文件——bin是特殊的目录文件而vi是一个普通文件,路径中的每个组成部分都是由一个索引节点对象表示。

目录项也可包括安装点。在路径/mnt/cdrom/foo中,构成元素/、mnt、cdrom、和foo都属于目录项对象。VFS在执行目录操作时(如果需要的话)会现场创建目录项对象。

其中需要更正的是《linux内核设计与实现-原书第三版》P222中,关于“int d_mounted”的注释作者并不确定,我认为是挂载点的目录项。当然我的见解还存在很多的问题,我会不断的更新,改正。

目录项对象由dentry结构体表示,定义在文件中。以下为该结构体中各项的描述:

 

索引节点操作inode_oprations结构体

和超级块操作一样,索引节点对象中的inode_operations项也非常重要,因为它描述了VFS用以操作索引节点对象的所有方法,这些方法由文件系统实现,与超级块类似,对索引节点的操作调用方式如下:

i指向给定的索引节点,truncate()函数是由索引节点i所在的文件系统定义的。inode_operations结构体定义在中。

其中需要更正的是《linux内核设计与实现-原书第三版》P220中,“该函数被系统调用symlik()调用”,更正为“该函数被系统调用symlink()调用”;

今天这块的笔记具体如下:

 

索引节点对象inode结构体

索引节点对象包含了内核在操作文件或目录时需要的全部信息。索引节点对象由inode结构题表示,它定义在中,下面是它的结构体和描述,有的描述我还不太清楚所以没加注释,以后会不断更新:

 

超级块操作super_operations结构体

超级块对象中最重要的一个域是s_op,它指向超级块的操作函数表。超级块操作函数表由super_operations结构体表示,定义在文件中,其形式如下:

当然我的总结还不完善,关键书中对有些函数没有描述,以后等我了解后,我会持续更新的!

超级块对象super_block结构体

今天终于狠下决心,把文件系统这块的结构体好好的看了一下!

把我的笔记贴上了供大家参考!

还有这些代码主要参考kernel 2.6.35与陈莉君老师《linux内核设计与实现-原书第三版》。

其中需要更正的是《linux内核设计与实现-原书第三版》P233中,文件 应更正为文件。

各种文件系统都必须实现超级块对象,该对象由super_block结构题表示,定义在文件中,下面为其结构与描述:

我的总结不完全准确,我会不断的修改更正!

什么是VFS?

这几天跟着赵桥学长在学习文件系统,前几天由于课程设计一直没跟上进度,所以这几天恶补一下!

Linux是一个非常优秀的操作系统,它是免费的,而且很稳定。 Linux所支持的文件系统高达十几个,除了为它量身打造的Ext2之外,它还支持了Minix,FAT,VFAT,NFS,NTFS…等等。

所谓VFS就是Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).

这是Linux档案系统对外的接口。任何要使用档案系统的程序都必须经由这层接口来使用它。

VFS是一个异构文件系统之上的软件粘合层(注:有时也把VFS称为可堆叠的文件系统(Stackable Filesystem),因为VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。

VFS最早由Sun公司提出以实现NFS(Network FileSystem,网络文件系统)。但是现在很多Unix系统都采用了VFS(包括Linux、FreeBSD、Solaris等)。

Linux下的VFS:
VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。

每一种类型的文件系统代码都隐藏了实现的细节。因此,对于VFS层和内核的其它部分而言,每一种类型的文件系统看起来都是一样的。

在Linux中,VFS采用的是面向对象的编程方法。