您的位置:首页 > 运维架构 > Linux

Unix-linux编程实践教程

2017-12-17 20:16 561 查看

1.从用户角度看待目录和文件

对于目录有以下操作:

mkdir cd cp mv pwd

对于文件有以下操作:

cp cat mv等操作。

1.1针对目录树的命令

ls -R(显示目录和子目录中所有的内容)

chmod -R (修改子目录中所有文件的许可权限)

du (disk usage 查看目录及子目录所有文件占用硬盘中数据块的总数)

find (在目录和子目录中检索满足要求的文件和目录)

2.Unix文件系统内部的结构

文件系统是对于磁盘的多次抽象,接下来分几次抽象来讲解硬盘。

第一层抽象:从磁盘到分区(把一个磁盘看成多个分区)

第二层抽象:从磁盘到块序列(块序列:即在每一个磁道上的块都被编号,每个扇区代表一个块号)

第三层抽象:从块序列到三个区域的划分(即将文件系统划分为三部分:超级块,i-node节点,数据区)

其中:

(1)超级块:第一个区域是超级块,存放文件本身的信息。如,每个区域块的大小

(2)i-节点表:记录每个文件的属性:大小,创建时间,文件所有者等等。每一个文件都有一个i节点,大小相等,它们共同组成了i-节点表。其中每个节点通过位置来标识,标识位2表示第3个节点/

(3)数据区:数据区,文件内容保存在这个地方。

2.1文件系统的实现:创建一个文件的过程

1.存储文件属性:

找到空闲的i-node节点,

2.存储文件数据:

计算文件需要的大小,在空闲块中挑选大小对应的数据块空间,存放数据。

3.记录分配情况

在i-node节点中,记录存放磁盘块序号。

4.添加文件名到目录

在目录中使文件名与i-node节点信息联系。

2.2文件系统的实现:目录工作过程

这里主要介绍查看当前目录的inode信息

ls -1ia   //在一行中显示inode编号和对应的文件名


若文件在文件系统中inode节点编号相同,表明当前两个文件名指向相同的节点,文件相同。

2.3文件系统的实现:cat命令的工作原理

以文件gouge为例:

$ cat gouge


(1)内核在当前目录查找gouge,假设找到,则取出对应的记录的inode编号。

(2)定位inode的位置,并且读取数据到缓冲中。

(3)访问存储文件内容的数据块,不断的读取数据块到内核缓冲中。

当然对于没有读写文件权限的用户,内核会在查找inode节点时报错(检测访问权限)

2.4文件系统的实现:大文件存储

当需要存放大文件的时候,即一个inode节点不能指向所有的区域的时候,可以创建间接块,通过多级来访问。如二级,三级。当然相应的开销会增加。

3理解目录

从两个角度理解目录,用户角度和实现角度。

用户角度,就是目录中有文件,有子目录,有父目录。

从实现角度,目录是存放文件和inode的编号的对应关系。存放有指向当前目录的(.)和指向上一个目录的(..),以及指向子目录的名称和编号(如果有的话)

3.1与目录树相关的命令和系统调用

1.mkdir

2.rmdir

3.rm:从文件目录中删除一个记录,用到了unlink系统调用来删除。判断当前文件计数是否位0,为0删除inode。这个系统调用不能用来删除目录。

4.ln:使用link系统调用。给当前文件包含了原先的链接信息。不能用来创建新的链接。

5.mv:使用rename系统调用。来改变文件的位置和名字。其实,移动文件,并没有正真的移动文件,只是把文件的链接关系改变了。

if(link("x","z")!=-1)
unlink("x");


当rename出现使得重定位或重命名更加安全。第二个是不同的系统可能使用不同的rename实现细节,封装了这些细节。

6.cd:chdir.它的工作原理是什么?

4编写pwd

工作过程:

1.得到”.”的i-节点号,称为n(使用stat)

2.chdir(使用chdir)

3.找到在当前目录下n链接的名字(opendir,readdir,closedir)

重复工作

5多个文件系统的组合

在unix中,当存在两个文件系统或者是分区。则将一个分区挂到另一个分区下面。但在用户看来仿佛是只有一棵树。

这里需要注意:不同的文件系统中可能会有i-节点号相同的文件,在不同的文件系统中,它们指向的内容是不同的。其中link和rename都不能跨越不同的文件系统

5.1符号链接

硬链接和软链接:

ln -s * * //软连接

ln * * //硬链接

小结在p120页

unix文件系统包含目录和文件。目录是文件名和指针的列表。

unix文件系统包含三个部分,超级块,i-节点表和数据区域。内容存在数据区域,文件属性存在i-节点表,i-节点唯一标识文件

相同的i-节点号可以以不同的名字出现在目录中,每个入口被称为指向文件的硬链接,符号链接通过文件名来引用,不改变i-节点号

内核把一个文件系统的目录链接到另一个文件系统的根的操作称为装载。

5.2易混淆的内容

磁盘块:2的n次方*512,表示多个扇区组成一个磁盘块。

扇区大小一般为:512。

一个是操作系统概念,一个是硬件概念。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix-linux