实验四 文件管理

实验四  文件管理

  • 实验目的

(一)实验1

1.加深对文件,目录,文件系统等概念的理解。

2.掌握Linux文件系统的目录结构。

3.掌握有关Linux文件系统操作的常用命令。

4.了解有关文件安全方面的知识。

(二)实验2

1)掌握LINUX文件系统的基本原理,结构和实现的方法

2)掌握LINUX文件系统中文件的建立,打开,读写,执行,属性等系统调用的使用.

  • 实验内容与要求
  • 实验一

(1)运行pwd命令,确定你当前的工作目录。

(2)利用以下命令显示当前工作目录的内容:ls –l

     照屏幕上的现实信息,理解各字段的含义。

(3)运行以下命令:ls –ai

观察显示的信息。注意列出的前两项,它们分别表示当前目录和父目录。

使用不带-a选项的ls命令,注意,不再显示隐藏文件了。

使用不带-i选项的ls命令,注意,文件的i节点号不再出现。

(4)使用mkdir命令建立一个子目录subdir。

(5)使用带-d选项的ls命令,你只能看到有关子目录的信息。

(6)使用cd命令,将工作目录改到根目录(/)上。命令格式:cd  /

(7)使用ls命令列出根目录的内容,再分别列出各子目录的内容。

      步骤:①cd /;②ls;

③ls+子目录名或者cd+子目录名进入子目录后,用ls命令查看。

(8)使用ls -l命令列出/dev的内容,注意各行第一个字符b和c的含义以及规定的访问权限。

(9)使用不带参数的命令cd,然后用pwd命令确定你当前的工作目录是什么。

(10)使用命令cd .. /..,你将工作目录移到什么地方。这个命令同cd /。注意cd .. /..(/前有空格)和cd ../..(/前无空格)的区别。

2.查看你的文件

(1)利用cd命令,将工作目录改到你的主目录上。命令格式:cd+目录名;

 (2)将工作目录改到你的子目录subdir,然后运行命令:

date > file1

将当前日期和时间存放到新建文件file1中。

具体步骤:①mkdir subdir;②cd subdir;③date>file1;

(3)使用cat命令查看file1文件的内容。

(4)利用man命令显示date命令的用法:

man date

(5)将date命令的用法附加到文件file1的后面:

man date >> file1

(6)利用cat命令显示文件file1的内容。你会看到,前面date命令的输出和有关date命令的用法的信息都在这个文件中。

(7)利用ls -l file1命令列出文件file1的较详细的信息,注意其中第二字段(链接计数)的值。

(8)利用ln file1../fa命令进行文件链接。然后运行ls -l file1,查看显示的第二段的值发生了什么变化。

(9)现在想利用cat fa命令显示文件fa的内容,应该如何改动工作目录?

(10)设你的主目录是/usr/student,利用ln -s /usr/student/file1 slink进行符号连接。然后,利用ls -l file1 slink显示有关file1和slink的信息。

(11)运行ls -l/bin命令显示目录的内容。

(12)利用ls -l/bin|more命令行分屏显示/bin目录的内容。

3.文件操作

(1)查找文件和目录

利用find命令可以查找文件和目录的位置。你要告诉系统你想查找的文件名和从哪个目录开始进行查找。其常用使用格式是:

find pathname -name filename -print

其中,pathname是指定开始查找的目录,filename是你要查找的文件或目录。-name和-print是find命令的选项。例如:find . –name ‘f*’ –print,在当前目录的父目录的所有子目录中查找名字以f开头的文件名。要查找的文件名模式‘f*’必须用引号括起来,因为其中用到shell的元字符(*)。

(2)查找文件中指定的模式

grep命令常用于文本文件中查找给定的词或短语。包含给定模式字符串的行在标准输出(即显示器)上显示出来。例如:grep root/etc/passwd,在口令文件etc/passwd中查找名称为root的用户是否为和服的用户。

4.文件存取权限

(1)存取权限。Linux系统对所有文件设置了存取权限。存取权限让你确定谁可以对你的个人文件和目录进行访问,以及可以进行什么操作。

把所有用户分为三类:

——文件主(user),即文件的属主。

——组用户(group),即文件组的成员。

——其他用户(other),即能对系统进行访问的所有其他用户。

对一个文件的存取权限分为三种:

——读(r)

——写(w)

——执行(x)

一组存取权限以及相应的文件类型统称为文件模式。如:rw-r--r--表示文件主有读和写的权限,同组用户和其他用户只有读权限。

(2)文件存取权限

读权限(r):允许指定的用户可以打开文件并阅读其内容。如cat,more,file和cp命令等。

写权限(w):允许指定的用户可以打开文件并修改其内容。如vi,mail,cp等。

执行权限(x):允许指定的用户运行(即执行)一个二进制文件或者把一个shell脚本文件当作命令来运行。当你通过输入命令名来调用命令时,你必须具有该命令文件的执行权限。

(3)目录存取权限

读权限(r):允许你列出相应目录中所存放的文件的名字(即目录的内容表)。

写权限(w):允许你从目录中删除已有文件或者把新文件添加到目录中。

查询权限(x):允许你在目录中进行查找和使用cd命令把工作目录放到它这里。

(4)修改文件权限

文件主或root用户可以使用chmod命令来修改文件或目录的权限。修改文件权限的方式有两种:符号模式和绝对模式。

符号模式

使用chmod命令修改当前权限设置的一般形式是:

chmod key file [file...]

其中,key由以下成分组成:

[who] [+|-|=] [mode]

——who这一部分可以由下面的一个和多个字符组成:u,g,o或a,它们分别表示文件主,组用户,其他用户或所有三种用户。默认值是a。

——第二部分必须是以下三个字符中的一个:+,-,或者=,分别表示增加,删除或者设定。

——mode成分可以由以下字符任意组合:r,w或x,分别表示读,写或者执行/查询的权限。

以上三个部分必须依次输入,而且它们之间没有空格。在一个命令行中可以指定多个key,彼此间用逗号隔开,中间没有空格。

如:设文件f原来的权限是rw-rw-r--,现在想让所有用户都具有执行权限,则可使用以下命令:

chmod a+x f

该命令执行后,文件f的权限变成rwxrwxr-x。

练习:首先使用ls –l命令查看文件file1的存取权限。然后用命令 chmod g –r o –r file1修改file1的权限——组用户和其他用户都能被取消对该文件的读权限。最后使用命令ls –l file1核查文件file1存取权限的变化情况。

  • 实验二

(1)仔细阅读提供的源代码

(2)理解LINUX文件系统的基本原理

(3)调试提供的源代码

  • 实验步骤
  • 实验一

按照实验内容顺序进行操作

  • 实验二
  1. 在终端上创建test.c文件把程序放进文件里面,保存退出。
  2. 编译文件
  3. 运行程序
  4. 测试程序
  • 程序清单:注意加注释(包含关键字、方法、变量等),在每个模块前加注释

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

#include<fcntl.h>

#include<sys/stat.h>

#include<syslog.h>

#include<string.h>

#include<stdlib.h>

#define MAX 128

int chmd();

int chmd ()

{

       int c;

       mode_t mode=S_IWUSR;

       printf(" 0. 0700\n 1. 0400\n 2. 0200 \n 3. 0100\n ");

       printf("Please input your choice(0-3):");

       scanf("%d",&c);

       switch(c)

       {

              case 0: chmod("file1",S_IRWXU);break;

              case 1: chmod("file1",S_IRUSR);break;

              case 2: chmod("file1",S_IWUSR);break;

              case 3: chmod("file1",S_IXUSR);break;

              default:printf("You have a wrong choice!\n");            

       }

       return(0);

}

main()

{

    int fd;

    int num;   

    int choice;

    char buffer[MAX];

    struct stat buf;

    char* path="/bin/ls";

    char* argv[4]={"ls","-l","file1",NULL};

   while(1)

   {

    printf("********************************\n");

    printf("0. 退出\n");

    printf("1. 创建新文件\n");

    printf("2. 写文件\n");

    printf("3. 读文件\n");

    printf("4. 修改文件权限\n");

    printf("5. 查看当前文件的权限修改文件权限\n");  

    printf("********************************\n");

   

    printf("Please input your choice(0-6):");

    scanf("%d",&choice);   

   

        switch(choice)

        {

           case 0:close(fd);   

         exit(0);

       case 1:

                fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750);

                if(fd==-1)

                    printf("File Create Failed!\n");

                else

                    printf("fd = %d\n",fd);                

                break;

            case 2:               

                num=read(0,buffer,MAX); 

                write(fd,buffer,num);  

                break;

            case 3:

                read(fd,buffer,MAX);

                write(1,buffer,num);

                break;

            case 4:

                chmd ();

                printf("Change mode success!\n");

                break;

            case 5:

                  execv(path,argv);   

                break;          

            default:

                printf("You have a wrong choice!\n");

        }

  }   

五、测试结果(运行结果、结果分析)

()实验一

                                                                                                                                         

实验(二)

1.实验结果

2. 回答问题

  1. 程序分析

本程序主要是通过调用系统中“文件的建立、打开、读写、执行”等系统调用函数,实现对 Linux 文件的各种操作,例如创建、读写、修改文件权限等操作。

1.创建新文件 fd=open("filel",0 RDWR O TRUNC O CREAT,0750):

调用函数 open(打开文件,第一个参数为要打开的文件名,第二个参数为打开文件的方式,其中参数 0CREAT 表示当打开的文件不存在时,创建该文件,此时要加上第二个参数,第三个参数表创建文件后文件所具有的权限。该函数的返回值为打开文件的标识符,出错时 fd=-1;

2.写文件 num=read(0,buffer,MAX);调用 read0函数,该函数的第一个参数为要读取的文件描述符,0 表示从输入流中读取文件,第二个参数表示将读取到的数据存放到 buffer 缓冲区中,第三个参数为最大读取的字符个数。函数的返回值为实际读取到的字符数。

write(fd,buffer,num) :

调用 write(函数,该函数的第一个参数为要将数据写入的文件描述符,第二个参数要写入的缓冲区,第三个参数为写入的字符长度。

3.读文件 read(fd,buffer,MAX):

调用该函数,将文件标识符为 fd 中的文件中的数据读取到 buffer 缓冲中write(1,buffer,num) :

调用该函数,将 buffer 缓冲区中的数据写入到输出流中,输出到显示器上。4.修改文件权限 chmod("filel”,S IRWXU);

调用该函数更改文件的权限,其中第一个参数为要更改权限的文件名,第二个参数为要修改到的权限,其中,S IRWXU 表示具有执行、可读、可写权限,S IRUSR 表示具有可读权限,S IWUSR 表示具有可写权限,S IXUSR 表示具有可执行权限。

5.查看当前文件的权限修改文件权限char* path="/bin/ls": char* argv[4]=("ls","-l","filel",NULL); execv(path,argv);调用系统调用execv(函数,表示调用/bin/ls,实际相当于在终端上执行” ls -1file1”,查看文件 file1 的详细信息。

(2)num=read(0,buffer,MAX); write(fd,buffer,num);代码的含义?

表示从标准输入设备中(键盘输入) 读取数据放入buffer 再写到“file1”中
   0代表标准输入设备, 1代表标准输出设备 , 2,代表错误输出设备

  1. 系统调用execv()的用途?

执行 ls -l file1这个命令 这个命令执行后 会列出file1的文件属性
包括访问权限

(4)心得体会

通过本次实验,我加深对文件,目录,文件系统等概念的理解。

六、总结(实验效果分析、心得体会,遗留问题)

通过这次实验我理解Linux文件系统的基本原理,加深对文件,目录,文件系统等概念的理解,掌握Linux文件系统的目录结构,掌握有关Linux文件系统操作的常用命令。了解有关文件安全方面的知识。也明白了做实验要有耐心,只有自己亲自操作才能从中学到知识,要花多一点时间在学习上,学会克制才能优雅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36240.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解ThreadLocal

什么是ThreadLocal&#xff1f; ThreadLocal是每个线程私有的&#xff0c;线程可以把自己的私有数据放到ThreadLocal里面&#xff0c;不用担心其他线程访问到自己ThreadLocal。 通过set()方法将值存入ThreadLocal或者修改值&#xff0c;get()方法取出值&#xff0c;remove()方…

河南大学数据库实验5

由于版本问题图片无法正常上传&#xff0c;如果word版本需要请私信 1.现有读者购书数据库&#xff0c;该数据库中包含三个表&#xff1a;读者相关信息表R&#xff0c;图书信息表B&#xff0c;读者订购图书表OD&#xff0c;具体情况如下表&#xff1a; 表1 R表 表2 B表 表3 …

利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例

引言 随着人工智能技术的不断进步&#xff0c;开发过程中的自动化程度也在逐步提高。阿里云推出的通义灵码AI程序员&#xff0c;作为一款创新型的智能编程助手&#xff0c;现已全面上线并兼容VS Code、JetBrains IDEs等多种开发环境。本文将介绍如何利用最新的Qwen2.5-Max模型…

Java多线程与高并发专题——在 Thread 中多个 ThreadLocal 是怎么存储的?

Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系 在解答本文的标题问题之前&#xff0c;先要搞清楚 Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系。 首先我们梳理下它们的定义与作用&#xff1a; Thread&#xff08;线程&#xff09; 定义&#xff1a;Th…

git tag常用操作

git tag是干嘛用的&#xff0c;相当于一个轻量级的分支。在一个分支上&#xff0c;创建一个tag&#xff0c;就是标记某一次的提交。然后方便checkout到 这个标签上。用tag的意思就是不用专门再创建一个新分支来修改后续的改动。分支不变&#xff0c;继续在上面改动&#xff0c;…

大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统

LoRA项目——新媒体评论智能分类与信息抽取系统 0 前言1 项目介绍1.1 项目功能1.2 技术原理1.3 软硬件环境1.4 项目结构 2 数据介绍与处理2.1 数据集介绍2.2 数据处理2.3 数据导入器 3 模型训练3.1 配置文件3.2 工具函数3.3 模型训练3.4 模型评估 4 模型推理 0 前言 微调里面&…

简单几步完成dify的本地搭建

简单几步完成dify的本地搭建

网络爬虫【爬虫库request】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库&#xff0c;完全满足如今网络爬虫的需求。与Urllib对比&#xff0c;Requests不仅具备Urllib的全部功能&#xff1b;在开发使用上&…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接&#xff1a;从零开始的DeepSeek微调训练实战&#xff08;SFT&#xff09; 微调参考示例&#xff1a;由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

MySQL 调优

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Clion远程开发配置

代码开发环境&#xff1a;windows下&#xff0c;基于Clion 2024.3开发&#xff0c;标准为C20 代码运行环境&#xff1a;远程服务器&#xff0c;ubuntu&#xff0c;cmake版本3.12&#xff0c;gcc11.4&#xff0c;g11.4&#xff0c;gdb12.1 实现功能&#xff1a;在本地windows开…

男女搭配(数学思维)

#include <bits/stdc.h> using namespace std; int main() {// 请在此输入您的代码int t;cin>>t;while(t--){int n,m,k;cin>>n>>m>>k;int smin(n,2*m)/2;if(nm-k > 3*s) cout<<s<<endl;else cout<<(nm-k)/3<<endl;}r…

SakuraCat(1)整体架构概述 (完善中)

项目功能概述 支持Servlet组件可部署一个标准的Web App 项目架构总览 HTTP服务器&#xff1a;负责建立链接&#xff0c;处理请求的数据&#xff0c;并转发给Servlet容器。Servlet容器&#xff1a;将HttpServletRequest和HttpServletResponse对象传给对应的业务类进行相应的逻…

一种基于大规模语言模型LLM的数据分析洞察生成方法

从复杂数据库中提取洞察对数据驱动决策至关重要,但传统手动生成洞察的方式耗时耗力,现有自动化数据分析方法生成的洞察不如人工生成的有洞察力,且存在适用场景受限等问题。下文将介绍一种新的方法,通过生成高层次问题和子问题,并使用SQL查询和LLM总结生成多表数据库中的见…

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…

实验10决策树

实验10决策树 一、实验目的 &#xff08;1&#xff09;理解并熟悉决策树算法思想和原理&#xff1b; &#xff08;2&#xff09;熟悉决策树算法的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用决策树算法解决实际问题并体会算法的效果&#xff1b; &#xff08;4…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…

【模块化编程】制作、可视化不平衡数据(长尾数据)(以Cifar-10为例)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《PyTorch科研加速指南&#xff1a;即插即用式模块开发》-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎…

Linux操作系统7- 线程同步与互斥1(POSIX互斥锁的使用详解)

上篇文章&#xff1a;Linux操作系统6- 线程4&#xff08;POSIX线程的简单封装&#xff09;-CSDN博客 本篇代码仓库:myLerningCode/l30 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 线程不互斥造成的结果 二. pthread_mutex_t 互斥…