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

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

时间:2023-10-12 14:59:09浏览次数:31  
标签:文件 创建 信息安全 笔记 目录 第六周 dev 链接 dir


一、课程内容第十一章学习

EXT2文件数据结构

1、通过mkfs创建虚拟磁盘
mke2fs [-b blksize -N ninodes] device nblocks
虚拟磁盘布局:

2、操作系统内核中的文件系统函数
3、系统调用
4、I/O库函数
5、用户命令
6、sh脚本

低级别的文件操作中的常用函数:

打开和关闭文件:

open():打开文件并返回文件描述符。
close():关闭文件。

读写文件:

read():从文件中读取数据。
write():向文件中写入数据。

移动文件指针:

lseek():在文件中移动指针的位置。

创建和删除文件:

creat():创建新文件。
unlink():删除文件。

重命名文件:

rename():更改文件名。

创建和删除目录:

mkdir():创建新目录。
rmdir():删除空目录。

文件I/O操作

格式化和划分磁盘分区

设备和分区表示:

在Linux中,磁盘设备通常被表示为/dev/sdX,其中X是字母a、b、c等,代表不同的物理设备。
分区通常以数字表示,例如/dev/sda1代表设备/dev/sda上的第一个分区。

分区工具:

fdisk:用于创建、删除和管理磁盘分区。
parted:支持磁盘操作,包括创建、删除、调整分区大小等。

格式化分区:

在分区创建后,我们需要对其进行格式化,以便在其上创建文件系统。
常见的文件系统格式包括Ext4、XFS、NTFS等。
格式化命令示例:mkfs.ext2 /dev/sda1表示将/dev/sda1分区格式化为Ext2文件系统。

#!/bin/bash

# 使用 parted 创建分区
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary ext2 1MiB 100%

# 格式化分区为 EXT2 文件系统
mkfs.ext2 /dev/sda1

# 创建挂载点目录
mkdir /mnt/mydisk

# 挂载分区
mount /dev/sda1 /mnt/mydisk

# 设置开机自动挂载
echo "/dev/sda1   /mnt/mydisk   ext2   defaults   0   0" >> /etc/fstab

二、课程内容第八章学习

软链接:指向目标文件或目录的路径。

创建软链接:使用ln -s 源文件 目标链接命令创建软链接。
软链接特点:软链接文件大小很小,且具有自己的inode号和权限。删除原始文件不会影响软链接的可用性。

硬链接:多个文件名指向同一个文件数据的链接。

创建硬链接:使用ln 源文件 目标链接命令创建硬链接。
硬链接特点:硬链接与原始文件具有相同的文件大小、inode号和权限。删除原始文件仍然可以通过硬链接访问数据。

软链接与硬链接之间的区别:

路径:软链接是一个路径名,而硬链接是一个直接链接到文件数据块的路径。
文件类型:软链接是一个特殊的文件类型,而硬链接是普通文件。
跨文件系统:软链接可以跨越不同的文件系统,而硬链接只能在同一个文件系统内创建。
大小:硬链接与原始文件的大小相同,而软链接的大小很小。

代码例子

#!/bin/bash

# 创建一个名为myfile的文件
echo "This is myfile." > myfile

# 创建一个硬链接
ln myfile hardlink

# 创建一个符号链接
ln -s myfile softlink

# 显示文件和链接的信息
echo "Original file:"
ls -li myfile
echo "Hard link:"
ls -li hardlink
echo "Soft link:"
ls -li softlink

stat结构体:

用于获取文件或目录的状态信息的数据结构。它定义在 <sys/stat.h> 头文件中,包含了如下字段:

dev_t st_dev:表示设备 ID,用于标识文件所在的设备。

ino_t st_ino:表示索引节点号,用于唯一标识文件。

mode_t st_mode:表示文件类型和访问权限。可以使用 st_mode 与 S_IRWXU、S_IRWXG、S_IRWXO 进行按位与运算来获取相应的权限。

nlink_t st_nlink:表示文件的硬链接数,即有多少个目录项指向该文件。

ls程序

基本语法:ls [选项] [文件或目录]。
可以省略文件或目录参数,默认列出当前目录的内容,用于列出指定目录中的文件和子目录。

-l:以长格式显示文件和目录的详细信息,包括权限、所有者、大小、修改时间等。
-a:显示所有文件和目录
-h:以可读的方式显示文件大小,比如使用 KB、MB、GB 等单位。
-r:以相反的顺序显示文件和目录。
-t:按照修改时间排序,最新的文件或目录排在前面。
-d:仅显示目录本身,而不显示目录下的文件和子目录。

三、代码实践

8.11编译项目:设计一个linux中的c语言代码,让其可以把src递归复制到dest文件夹中,功能与cp -r src dest完全一致

1、建立需要复制的文件夹和文件

2、编写代码,编译生成

3、成功运行,复制文件夹到dest2_dir中

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>

void recursive_copy(const char *source_dir, const char *dest_dir) {
    DIR *dir;
    struct dirent *entry;
    struct stat statbuf;
    char source_path[PATH_MAX];
    char dest_path[PATH_MAX];

    dir = opendir(source_dir);
    if (dir == NULL) {
        perror("opendir");
        return;
    }

    if (mkdir(dest_dir, 0755) == -1) {
        perror("mkdir");
        closedir(dir);
        return;
    }

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

        snprintf(source_path, sizeof(source_path), "%s/%s", source_dir, entry->d_name);
        snprintf(dest_path, sizeof(dest_path), "%s/%s", dest_dir, entry->d_name);

        if (lstat(source_path, &statbuf) == -1) {
            perror("lstat");
            closedir(dir);
            return;
        }

        if (S_ISDIR(statbuf.st_mode)) {
            recursive_copy(source_path, dest_path);
        } else {
            if (link(source_path, dest_path) == -1) {
                perror("link");
                closedir(dir);
                return;
            }
        }
    }

    closedir(dir);
}

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "Usage: %s source_dir dest_dir\n", argv[0]);
        return 1;
    }

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

    return 0;
}

四、苏格拉底问答






五、其他

代码中遇到的问题

gdb学习

代码开始我遇到了问题,求助gpt,gpt让我进行验证



在这里我学习到了怎么利用gdb来诊断和调试程序中的错误

代码中使用的知识点

文件和目录操作: 在 C 语言中,可以使用 <dirent.h> 头文件中定义的 DIR、dirent 和 <sys/stat.h> 头文件中定义的 stat 来进行文件和目录操作。

打开目录:使用 DIR *opendir(const char *dirname) 函数来打开指定路径的目录。它返回一个指向目录流的指针,或者返回 NULL 如果目录打开失败。

遍历目录:通过调用 readdir(DIR *dirp) 函数来遍历打开的目录。该函数会读取下一个目录项,并返回一个指向 dirent 结构体的指针,或者返回 NULL 表示已经读取完所有目录项。

查询文件信息:使用 int stat(const char *pathname, struct stat *statbuf) 函数来获取指定路径上的文件信息。它接受文件路径作为参数,并将结果存储在 stat 结构体中。成功返回 0,失败返回 -1。

标签:文件,创建,信息安全,笔记,目录,第六周,dev,链接,dir
From: https://www.cnblogs.com/ningxinyu1/p/17759434.html

相关文章

  • DR7808 配置笔记
    CSA部分:内部CSA可以配置为单向,或者双向,一共有两个CSA,内部CSA的GAIN可以配置,挡位有10,20,40,80四种增益选项。也可以直接关闭内部CSA,CSA的过流保护值和过流保护滤波时间都可以单独设置。相关寄存器:DR7808_GENCTRL1DR7808_HBIDIAGDR7808_GENCTRL2DR7808_CSA_OC_SH寄存器相关描......
  • C#学习笔记--面向对象三大特征
    C#核心面向对象--封装用程序来抽象现实世界,(万物皆对象)来编程实现功能。三大特性:封装、继承、多态。类与对象声明位置:namespace中样式:class类名{}命名:帕斯卡命名法(首字母大写)实例化对象:根据类来新建一个对象。Personp=newPerson();成员变量声明在类语句块中用来描述......
  • 【刷题笔记】80. Remove Duplicates from Sorted Array II
    题目Givenasortedarraynums,removetheduplicatesin-placesuchthatduplicatesappearedatmosttwiceandreturnthenewlength.Donotallocateextraspaceforanotherarray,youmustdothisbymodifyingtheinputarrayin-placewithO(1)extramemor......
  • 开发者笔记 C++11新特性并发编程future
    上一篇介绍了<thread>文件里线程相关类,这篇将介绍C++<future>头文件里线程类,future里包含的类主要是处理异步任务,线程函数封装,线程间通信,同步,捕捉异常处理https://zhuanlan.zhihu.com/p/509118687future的引入c++11引入的future是为了解决异步通信问题的。future可以看做是数......
  • 2023_10_12_MYSQL_DAY_04_笔记
    2023_10_12_MYSQL_DAY_04_笔记14章课后作业CREATETABLExi(xidINTPRIMARYKEYAUTO_INCREMENT,xnameVARCHAR(10)UNIQUE,xheadVARCHAR(10)NOTNULL,xlocVARCHAR(30)DEFAULT'浑南区');CREATETABLEclass02(cnoINTPRIMARYKEY......
  • destoon开发笔记-调取资讯标题图
    今天也没做什么,就帮一个朋友调试了DT内核开发的模板,调取资讯内容第一张图作为标题图,网上也有一些教程,感觉不太好,所以我就写详细一些,希望对大家有帮助! 第一步:修改module\article\admin\template\edit.tpl.php     1<inputname="post[thumb_no]" type="te......
  • python 基础笔记-函数
    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段·。   好处为: 一可以把程序中相对独立的功能模块抽取出来,减少重读代码的编写; 二是将来可以以重复的使用这些功能模块https://www.clw9335.com/zx/index-htm-page-5.html  定义一个函数 你可以定义一......
  • Qt信号槽与事件循环学习笔记
    事件与事件循环信号槽机制事件与事件循环在Qt中,事件(event)被封装为QEvent类/子类对象,用来表示应用内部或外部发生的各种事情。事件可以被任何QObject子类的对象接收并处理。根据事件的创建方式和调度方式,Qt中事件可分为三类,分别是:自发事件(Spontaneousevent)由窗口系统(windo......
  • Linux第六周技术博客
    今天我们学习文件的权限操作在Windows系统里文件的属性包括文件的创建者、创建时间、创建的位置和大小,在Linux系统中文件的属性同样包含这些。我们在/home/swxy中创建一个文件file01,用ll命令来查看文件的各种属性。llfile01-rw-r--r--.1rootroot010月1115:53file01在......
  • 学习笔记——关于浏览器中的事件循环
    首先了解关于浏览器的进程与线程何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。何为线程?有了进程后,就可以运行程序的代码了。运行代码的「人」称之为「线程」。一个进......