《信息安全系统设计与实现》学习笔记

学习笔记

20191318 王泽文

  《Unix/Linux系统编程》


第七章 文件操作

  本章主要讲述讨论了多种文件系统;解释了操作系统中的各种操作级别,系统性概述了各种操作,介绍了Linux系统的EXT2文件系统。

  文件操作级别包括:

  1. 硬件级别
  2. 操作系统内核中的文件系统函数
  3. 系统调用
  4. 文件流上的I/O库函数
  5. 用户命令
  6. 各种操作的sh脚本

  在低级别的文件操作中,主要学习了分区和格式化分区。分区指的是一个块存储设备, 如硬盘、U盘、SD卡等,可以分为几个逻辑单元。学习了磁盘分区、显示分区表的程序、文件系统的格式化分区以及挂载磁盘分区;

  接着,还了解了EXT2文件系统,包括EXT2文件系统的系统数据结构、显示超级块、组描述符、块和索引节点位图以及目录内容的程序

  

  


第八章 使用系统调用进行文件操作

  本章主要讲述如何使用系统调用进行文件操作。

  系统调用是一种允许进程进入Kmode(内核模式)以执行Umode(用户模式)不允许操作的机制。复刻子进程、修改执行映像,甚至是终止等操作都必须在内核中执行。

  系统调用手册页,使用man 2 NAME可以用来显示系统调用手册页。

  简单的系统调用:

  1. access : int access(char *pathname,int mode);检查对某个文件的权限
  2. chdir : int chdir(const char *path);更改目录
  3. chmod:int chmod{char *path, mode_t mode); 更改某个文件的权限
  4. chown : int chown(char *name, int uid, int gid); 更改文件所有人
  5. chroot: int chroot(char *pathname); 将(逻辑)根目录更改为路径名
  6. getcwd: char *getcwd(char *buf, int size); 获取 CWD 的绝对路径名
  7. mkdir: int mkdir(char *pathname, mode_t mode)创建目录
  8. rmdir: int rmdir(char *pathname); 移除目录(必须为空)
  9. link: int link(char *oldpath, char *newpath); 将新文件名硬链接到旧文件名
  10. unlink: int unlink(char *pathname);减少文件的链接数;如呆链接数达到 0, 则删除文件
  11. symlink: int sym1ink(char *o1dpath, char *newpath); 为文件创建一个符号链接
  12. rename: int rename(char *o1dpath, char *newpath); 更改文件名称
  13. utime: int utime(char *pathname, struct utimebuf *time) 更改文件的访间和修改时间

  以下系统调用需要超级用户权限。

  1. mount: int mount(char *specialfile, char •mountDir); 将文件系统添加到挂载点目录上
  2. urnount: int umount(char *dir); 分离挂载的文件系统
  3. mknod: int mknod(char *path, int mode, int device); 创建特殊文件

  常用的文件操作的系统调用:

  1. stat : 获取文件状态信息
  2. open: 打开一个文件进行读、写、追加
  3. close: 关闭打开的文件描述符
  4. read: 读取打开的文件描述符
  5. write: 写入打开的文件描述符
  6. lseek: 重新定位文件描述符的读/写偏移量
  7. dup: 将文件描述符复制到可用的最小描述符编号中
  8. dup2: 将oldfd复制到newfd中,如果newfd己打开,先将其关闭
  9. link: 将新文件硬链接到旧文件
  10. unlink: 取消某个文件的链接;如果文件链接数为0,则删除文件int unlink(char *pathname)
  11. symlink: 创建一个符号链接
  12. readlink: 读取符号链接文件的内容
  13. umask: 设置文件创建掩码;文件权限为(mask& -umask)

  编程实践

在这里进行了myls编程实践,但是在调试的过程中并没有把代码调试成功


课堂学习

  在课堂的学习中,我学习了man手册的使用和sort指令的使用,学习到了在不清楚Linux指令的使用时可以用man -k 来获取帮助。也了解到了cheat的使用也能给我的系统指令学习带来帮助。


学习体会

  在这次的学习中,开始对Linux的系统调用等的函数进行学习,但由于还是初初接触,对其各种定义和使用都一知半解,了解不够。因此,在实践中也无法很好的去实现出来,希望在接下来的学习中继续深入去学习。
原文地址:https://www.cnblogs.com/wzwyoshino/p/15389578.html