首页 > 其他分享 >《信息安全系统设计与实现》第四周学习笔记

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

时间:2023-10-01 21:47:43浏览次数:23  
标签:文件 int 分区 信息安全 笔记 char file 四周 链接

   

第七章

文件操作级别:

硬件级别

fdisk

mkfs

fsck

碎片整理

操作系统内核中的文件系统函数:

系统调用

I/O库函数

用户命令

sh脚本

低级别文件操作:
分区
Command (m for help): m ---输出帮助信息

Command action

a toggle a bootable flag ---设置启动分区

b edit bsd disklabel ---编辑分区标签

c toggle the dos compatibility flag

d delete a partition --删除一个分区

l list known partition types --列出分区类型

m print this menu --帮助

n add a new partition --建立一个新的分区

o create a new empty DOS partition table --创建一个新的空白DOS分区表

p print the partition table ---打印分区表

q quit without saving changes ---退出不保存设置

s create a new empty Sun disklabel ---

t change a partition's system id ---改变分区的ID

u change display/entry units ---改变显示的单位

v verify the partition table ---检查验证分区表

w write table to disk and exit ---保存分区表

x extra functionality (experts only)
格式划分区
挂载分区:

dd if=/dev/zero of =vdisk bs=1024 count=32768

losetup -o $(expr 2048 * 512) --sizelimit $(expr 65535* 512) /dev/loop1 vdisk

第八章

系统调用:
系统调用手册页
man 2 stat
man 2 open
man 2 read

使用系统调用进行文件操作
include<stdio.h>
include<errno.h>
int main()
{
char buf[256],*s;
int r;
r = mkdir("newdir",0766); //mkdir syscall
if(r<0)
printf("error=%d : %s\n",errno,strerror(errno));
r = chdir("newdir"); //cd into newdir
s = getcwd(buf,256); //get CWD string int buf[]
printf("CWD = %s\n",s);
}

常用的系统调用:
open:打开一个文件进行读、写、追加
int open(char *file, int flags, int mode);

close:关闭打开的文件描述符
int close(int fd);

read:读取打开的文件描述符
int read(int fd, char buf[], int count);

write:写入打开的文件描述符
int write(int fd, char buf[], int count);

dup:将文件描述符复制到可用的最小描述符编号中
int dup(int oldfd);

dup2:将oldfd复制到newfd中,如果文件链接数为0,则删除文件
int dup2(int oldfd, int newfd);

link:将新文件硬链接到旧文件
int link(char *oldPath, char *newPath);

unlink:取消某个文件的链接;如果文件链接数为0,则删除文件
int unlink(char *pathname);

symlink:创建一个符号链接
int symlink(char *target, char *newpath);

readlink:读取符号链接文件的内容
int readlink(char *path, char *buf, int bufsize);

umask:设置文件创建掩码;文件权限为(mask & ~umask)
int umask(int umask);

mknod:创建特殊文件
int mknod(char *path,int mode,int device);

链接文件:

硬链接文件
ln oldpath newpath
对应系统调用:link(char *oldpath,char *newpath)
减少文件链接数:unlink(char *pathname)

符号链接文件
ln -s oldpath newpath

创建符号链接或软链接
symlink(char *oldpath,char *newpath)

《信息安全系统设计与实现》第四周学习笔记
第七章
文件操作级别
硬件级别
fdisk
mkfs
fsck
碎片整理
操作系统内核中的文件系统函数
系统调用
I/O库函数
用户命令
sh脚本
文件I/O操作
image

低级别文件操作
分区
主引导记录(MBR):

MBR 是早期使用的一种分区方式,主要用于传统的BIOS系统。
MBR 分区表可以将物理磁盘划分为最多四个主分区或者三个主分区加一个扩展分区。
每个主分区或扩展分区都有一个主引导记录(Master Boot Record,MBR),存放着分区的启动代码和分区表信息。
全局唯一标识符分区表(GUID 分区表,GPT):

GPT 是一种较新的分区方式,主要用于UEFI(统一扩展固件接口)系统。
GPT 分区表支持更大容量的磁盘和更多的分区数量,最多可达到128个分区,且每个分区的大小理论上没有限制。
每个 GPT 分区都有一个全局唯一标识符(GUID),用于标识分区。

格式划分区
挂载分区
dd if=/dev/zero of =vdisk bs=1024 count=32768
losetup -o $(expr 2048 * 512) --sizelimit $(expr 65535* 512) /dev/loop1 vdisk

第八章
系统调用
系统调用手册页
man 2 stat
man 2 open
man 2 read
image

使用系统调用进行文件操作

include<stdio.h>

include<errno.h>

int main()
{
char buf[256],*s;
int r;
r = mkdir("newdir",0766); //mkdir syscall
if(r<0)
printf("error=%d : %s\n",errno,strerror(errno));
r = chdir("newdir"); //cd into newdir
s = getcwd(buf,256); //get CWD string int buf[]
printf("CWD = %s\n",s);
}
常用的系统调用
open:打开一个文件进行读、写、追加
int open(char *file, int flags, int mode);
close:关闭打开的文件描述符
int close(int fd);
read:读取打开的文件描述符
int read(int fd, char buf[], int count);
write:写入打开的文件描述符
int write(int fd, char buf[], int count);
dup:将文件描述符复制到可用的最小描述符编号中
int dup(int oldfd);
dup2:将oldfd复制到newfd中,如果文件链接数为0,则删除文件
int dup2(int oldfd, int newfd);
link:将新文件硬链接到旧文件
int link(char *oldPath, char *newPath);
unlink:取消某个文件的链接;如果文件链接数为0,则删除文件
int unlink(char *pathname);
symlink:创建一个符号链接
int symlink(char *target, char *newpath);
readlink:读取符号链接文件的内容
int readlink(char *path, char *buf, int bufsize);
umask:设置文件创建掩码;文件权限为(mask & ~umask)
int umask(int umask);
mknod:创建特殊文件
int mknod(char *path,int mode,int device)
链接文件:

硬链接文件
ln oldpath newpath
对应系统调用:link(char *oldpath,char *newpath)
减少文件链接数:unlink(char *pathname)

符号链接文件
ln -s oldpath newpath

创建符号链接或软链接
symlink(char *oldpath,char *newpath)

stat系统调用:
stat文件状态
stat结构体
stat与文件索引节点
每个索引节点在存储设备上都有唯一的索引节点编号(ino)。每个设备都由一对设备号标识,例如0x0302表示/dev/hda2等

文件类型和权限
st_mode:第一个字母表示文件类型,后面9个字符基于权限位,如果位是1,每个字符打印为r|w|x;如果位是0,则打印-。x位表示是否允许访问目录。

opendir-readdir函数
头文件:#include<dirent.h>

read()系统调用
将n个字节从打开的文件描述符读入用户空间中的buf[] 返回值是实际读取的字节数,read失败返回-1

write()系统调用
将n个字节从用户空间中的buf[]写入文件描述符,必须打开该文件描述符进行写,读写或追加
实践 8.11系统调用递归复制文件:
代码如下
include <stdio.h>
include <stdlib.h>
include <unistd.h>
include <sys/stat.h>
include <fcntl.h>
include <dirent.h>
include <string.h>

void copy_file(const char* src, const char* dest) {
int src_fd = open(src, O_RDONLY);
int dest_fd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0644);

// 设置缓冲区大小,可根据具体情况进行调整
const size_t BUFFER_SIZE = 1024;
char buffer[BUFFER_SIZE];

ssize_t bytes_read, bytes_written;

while ((bytes_read = read(src_fd, buffer, BUFFER_SIZE)) > 0) {
    bytes_written = write(dest_fd, buffer, bytes_read);
    if (bytes_written != bytes_read) {
        perror("write error");
        exit(1);
    }
}

close(src_fd);
close(dest_fd);

}

void copy_directory(const char* src, const char* dest) {
DIR* dir;
struct dirent* entry;
struct stat statbuf;
char file_src[4096], file_dest[4096];

if ((dir = opendir(src)) == NULL) {
    perror("opendir error");
    exit(1);
}

// 创建目标目录
mkdir(dest, 0755);

while ((entry = readdir(dir)) != NULL) {
    if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
        continue;
    }

    snprintf(file_src, sizeof(file_src), "%s/%s", src, entry->d_name);
    snprintf(file_dest, sizeof(file_dest), "%s/%s", dest, entry->d_name);

    if (lstat(file_src, &statbuf) < 0) {
        perror("lstat error");
        exit(1);
    }

    if (S_ISDIR(statbuf.st_mode)) {
        copy_directory(file_src, file_dest);
    } else {
        copy_file(file_src, file_dest);
    }
}

closedir(dir);

}

int main(int argc, char* argv[]) {
if (argc != 3) {
printf("Usage: %s \n", argv[0]);
exit(1);
}

copy_directory(argv[1], argv[2]);

return 0;

}


苏格拉底挑战:








标签:文件,int,分区,信息安全,笔记,char,file,四周,链接
From: https://www.cnblogs.com/ljy12392/p/17739298.html

相关文章

  • Webpack5 基础使用笔记
    [webpack中文文档](概念|webpack中文文档|webpack中文文档|webpack中文网(webpackjs.com)):本质上,webpack是一个用于现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependencygraph),然后将你......
  • 第七、八章学习笔记
    学习笔记第七章文件操作2023-10-011.文件操作级别(1)硬件级别:fdisk:将硬件、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准备。fsck:检查和维修系统。碎片整理:压缩文件系统中的文件。(2)操作系统中的文件系统函数(3)系统调用(4)I/O库函数(5)用户命令(6)sh......
  • 学习笔记(4)
    一、任务详情自学教材第7,8章,提交学习笔记(10分),评分标准如下知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)实践过程截图,......
  • 斜率优化学习笔记
    下面可能会用到一些叫上凸壳鸭下凸壳呀的名词,大家不用弄懂它的概念的说也不用望风而逃(我之前就望风而逃过(*/ω\*)),凸壳就简单理解成一个凸了一块的一段连线就好了。斜率优化有些地方不好用代数的语言刻画,比如下凸壳,比如凸包(凸包有的定义就直接写橡皮筋的比喻233333),以及为什么下凸......
  • 学习笔记四
    文件操作文件操作级别文件操作分为五个级别,按照从高到低的顺序如下:(1)硬件级别:硬件级别的文件操作包括:fdisk:将硬盘、U盘或SDC盘分区。mkfs:格式化磁盘分区、为系统做好准备。fsck:检查和维修系统。碎片整理:压缩文件系统中的文件。大多数是针对系统的实用程序。普通用......
  • 第七八章学习笔记
    第七八章学习笔记知识点总结第七章文件操作级别:文件操作级别
文件操作分为五个级别,按照从低到高的顺序排列如下。(1)硬件级别∶硬件级别的文件操作包括∶fdisk∶将硬盘、U盘或SDC盘分区。mkfs∶格式化磁盘分区,为系统做好准备。fsck∶检查和维修系统。碎片整理∶压缩......
  • 20211128《信息安全系统设计与实现》第七、八章笔记
    一、任务内容自学教材第7,8章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT......
  • 《信息安全系统设计与实现》第四周学习笔记
    第七章:文件操作文件操作级别硬件级别disk:将硬盘、U盘或SDC盘分区mkfs:格式化磁盘分区,为系统做好准备fsck:检查和维修系统碎片整理:压缩文件系统中的文件操作系统内核中的文件系统函数类Unix系统内核中的一些函数,其中前缀k表示内核函数系统调用用户模式程序使用系统调......
  • Python笔记:控制流优化
    零值判断Python当中有个语法糖是可以直接对某个对象做空值判断:ifnums_arr: pass不同类型的数据对应什么样的bool值呢?我们可以有如下的判断:None、0、False、空列表、空元组、空字典、空集合等等都对应布尔值为假。其余的对应布尔值为真。但是现在问题来了,对于开发者自......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》第四周学习笔记
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......