第七八章读书笔记
知识点归纳
1.文件操作级别
1.硬盘级别——针对系统,较为底层
fdisk:分区
mkfs:格式化磁盘分区
fsck:检查维修系统
碎片整理:压缩系统文件
2.操作系统内核中的文件系统函数
3.系统调用——用户模式程序使用系统调用来访问内核函数
每个库函数都会发出一个系统调用,使进程进入内核模式来执行相应的内核函数。当进程结束执行内核函数时,会返回到用户模式并返回所需结果。两种模式切换会耗费大量操作和时间,所以要尽可能不虚此行。
4.I/O函数库——建立在系统调用之上,帮助用户读/写单独的字符、行或数据结构记录等。
FILE mode : fopen, fread; fwrite, fseek, fclose, fflush
char mode : getc, getchar, ugetc; putc, putchar
line mode : gets, fgets; puts, fputs
formatted : scanf, fscanf, sscanf; printf, fprintf,sprintf
5.用户命令——是一个可执行程序(exclude cd),通常会调用I/O库。
6.sh脚本
2.低级别文件操作(此处结合实践内容)
1.分区
一个块存储设备可以分为几个逻辑单元,称为分区。各分区可以格式化为特定的文件系统,也可以安装在不同的操作系统上。分区表位于第一个扇区的字节便宜446(0x1BE)处,该山区陈伟设备的主引导记录(MBR)。表有四个目录,每个目录由一个16字节的分区结构体定义。
如果分区为拓展类型,则可以划分为更多的分区。拓展分区在区域内形成一个链表,第一个扇区是一个本地MBR。每个本地MBR在字节偏移量0x1BE处也有一个分区表,包含两个目录,第一个目录定义了拓展分区的起始扇区和大小,第二个目录指向下一个本地MBR。
tips:CHS值是什么?
CHS:Cylinder/Head/Sector
柱面/磁头/扇区 的意思LBA:是一种模式而不是一种值 逻辑块寻址模式
2.格式化分区(mkfs,Make文件系统)
每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须为特定的文件系统准备好分区。
mkfs -t TYPE [-b bsize] device nblocks
在一个nblocks设备上创建一个TYPE文件系统,每个块都是bsize字节,默认块大小为1KB。
3.挂载分区
man 8 losetup:显示用于系统管理的losetup实用工具命令。
3.EXT2文件系统
1.EX2文件系统数据结构
Block#0:引导块—容纳从磁盘应道操作系统的引导程序。
Block#1:超级块—用于容纳关于整个文件系统的信息。
Block#2:块组描述符块—EXT2将磁盘块分成几个组,每组由8192个块,每组用一个块组描述符结构体描述。
Block#8:块位图—表示磁盘块或者索引节点的位序列,用于分配和回收项。
Block#10:索引(开始)节点块
4.系统调用
在操作系统中,进程以两种模式进行,内核模式(Kmode)和用户模式(Umode)。
常用系统调用:
stat 获取文件状态信息
open 打开一个文件进行读、写、追加
close 关闭打开的文件描述符
read 读取打开的文件描述符
write 写入打开的文件描述符
lseek 重新定位文件描述符的读/写偏移量
dup 将文件描述符复制到可用的最小描述编号中
dip2 将oldfd复制到newfd中,如果newfd一打开,先将其关闭
link 将新文件硬链接到旧文件
unlink 减少文件的链接数;如果链接数达到零,则删除文件
symlink 为文件创建一个符号链接
readlink 读取符号链接文件的内容
umask 设置文件创建掩码;文件权限为 (mask&~umasl)
文件描述符
文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,用于指代被打开的文件,对文件所有 I/O 操作相关的系统调用都需要通过文件描述符。
问题与解决思路
实践内容
1.fdisk实践
创建分区
打印分区表
显示所有文件系统类型的十六进制唯一值
写入修改磁盘分区
2.mkfs实践
使用1440(1KB)个块将mydisk格式化为EXT2文件系统,Linux的mkfs会在根目录下创建一个默认的lost+found目录。接着挂载到根文件系统中的现有目录中,/mnt目录通常用于挂载其他文件系统,由于虚拟文件系统不是真正的设备,它们必须作为循环设备挂载。挂载后的设备使用完成后,将cd从/mnt中取出。
不带任何参数的mount会显示Linux系统所有挂载设备。
虚拟磁盘如果包含多个分区,需要将这些分区与虚拟设备关联起来。
此处还不是很明确
3.链接文件实践
硬链接,可以直接在新路径下创建文件并链接到旧路径。
硬链接特征:
- 源文件和硬链接文件使用相同的 Inode 和 Block
- 修改任意一个文件,另一个都改变
- 删除任意一个文件,另一个都能使用
- 硬链接标记不清,很难确认硬链接文件位置,不建议使用
- 硬链接不能链接目录
- 硬链接不能跨分区
软链接特征:
- 软链接和源文件使用不同的 Inode 和 Block
- 两个文件修改任意一个,另一个都改变
- 删除软链接,源文件不受影响;删除源文件,软链接不能使用
- 软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
- 软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
- 软链接可以链接目录
- 软链接可以跨分区
- 软链接特征明显,建议使用软连接