文件系统的功能规划
- 1、文件系统要有严格的组织形式,能够以块为单位进行存储
- 2、文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。
- 3、文件系统应该有缓存层,用于存放文件系统中的热点文件,近期经常被读取和写入。
- 4、文件用文件夹的形式组织起来,方便管理和查询。
- 5、Linux 内核要在内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。
文件系统相关命令行
格式化
将一块盘使用命令组织成一定格式的文件系统的过程
Windows,常格式化的格式为 NTFS(New Technology File System)。
Linux,常用的是 ext3 或者 ext4
fdisk -l 查看分区
mkfs.ext3/mkfs.ext4 /dev/… 进行格式化
多个分区
fdisk /dev/… 打开交互式程序
- p 打印分区
- n 新建分区: p primary 建立主分区; e extended 建立扩展分区;
- 设置大小;
- w 执行分区修改
再执行 mkfs.ext* 进行格式化
挂载与卸载
挂载分区到某个目录, 才能正常访问
mount /dev/… /目录
例子:
mount /dev/vdc1 /根目录/用户A目录/目录1
这个命令将这个文件系统挂载到“/ 根目录 / 用户 A 目录 / 目录 1”这个目录下面。一旦挂载过去,“/ 根目录 / 用户 A 目录 / 目录 1”这个目录下面原来的文件 1 和文件 2 就都看不到了,换成了 vdc1 这个硬盘里面的文件系统的根目录。
卸载使用 umount 命令
umount /根目录/用户A目录/目录1
文件类型查看
ls -l 的结果的第一位标识位查看
- - 表示普通文件
- d 表示文件夹
- c 表示字符设备文件
- b 表示块设备文件
- s 表示套接字 socket 文件
- l 表示符号链接,也即软链接,就是通过名字指向另外一个文件
文件系统相关系统调用
fd 文件描述符,用来区分一个进程打开的多个文件的。它的作用域就是当前进程,出了当前进程这个文件描述符就没有意义了
- open 打开一个文件, 返回文件描述符 fd; 参数 O_CREAT 不存在就创建, O_RDWR 以读写方式打开, O_TRUNC 文件长度截断为 0; 返回成功写入字节数
- write 写数据, 参数 fd, 数据位置, 写入字节数; 返回成功写入字节数
- lseek 重新定位读写位置, 参数 fd, 位置, SEEK_SET
- read 读数据, 参数 fd, 存放位置, 读取字节数; 返回成功读取字节数
- close 关闭文件
- stat/lstat 通过文件名获取文件信息,这两个方法区别在于,stat 没有处理符号链接(软链接)的能力; fstat 通过 fd 获取文件信息。这个信息将会写到类型为 struct stat 的 buf 结构中。
int stat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* Inode number */
mode_t st_mode; /* File type and mode */
nlink_t st_nlink; /* Number of hard links */
uid_t st_uid; /* User ID of owner */
gid_t st_gid; /* Group ID of owner */
dev_t st_rdev; /* Device ID (if special file) */
off_t st_size; /* Total size, in bytes */
blksize_t st_blksize; /* Block size for filesystem I/O */
blkcnt_t st_blocks; /* Number of 512B blocks allocated */
struct timespec st_atim; /* Time of last access */
struct timespec st_mtim; /* Time of last modification */
struct timespec st_ctim; /* Time of last status change */
};
- opendir 打开一个目录, 生成一个目录流 DIR
- readdir 读取目录流的一个条目, 自动指向下一个条目
- closedir 关闭目录流
总结
图片来自极客时间趣谈linux操作系统
参考资料:
趣谈Linux操作系统(极客时间)链接:
http://gk.link/a/10iXZ
欢迎大家来一起交流学习