实验四 文件管理

合集下载

文件管理系统实验报告

文件管理系统实验报告

一、实验目的本次实验旨在通过设计和实现一个简单的文件管理系统,加深对文件管理原理的理解,掌握文件系统的基本操作,包括文件的创建、删除、修改、查询等,并了解文件系统的目录结构和管理机制。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 实验时间:2023年10月25日三、实验内容1. 文件系统的目录结构设计2. 文件的基本操作实现3. 文件系统的存储管理4. 文件系统的安全机制四、实验步骤1. 目录结构设计根据文件系统的需求,设计以下目录结构:```根目录│├── 文件夹A│ ├── 文件1.txt│ └── 文件2.txt│├── 文件夹B│ └── 文件3.txt│└── 文件夹C```2. 文件的基本操作实现(1)文件创建```cppvoid CreateFile(const std::string& filePath, const std::string& content) {// 检查文件是否存在if (CheckFileExist(filePath)) {std::cout << "文件已存在!" << std::endl;return;}// 创建文件std::ofstream file(filePath);if (file.is_open()) {file << content;file.close();std::cout << "文件创建成功!" << std::endl;} else {std::cout << "文件创建失败!" << std::endl;}}```(2)文件删除```cppvoid DeleteFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl;return;}// 删除文件if (remove(filePath) == 0) {std::cout << "文件删除成功!" << std::endl;} else {std::cout << "文件删除失败!" << std::endl;}}```(3)文件修改```cppvoid ModifyFile(const std::string& filePath, const std::string& newContent) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 修改文件内容std::ofstream file(filePath, std::ios::trunc); if (file.is_open()) {file << newContent;file.close();std::cout << "文件修改成功!" << std::endl; } else {std::cout << "文件修改失败!" << std::endl; }}```(4)文件查询```cppvoid QueryFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 读取文件内容std::ifstream file(filePath);if (file.is_open()) {std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << "文件内容:" << content << std::endl;file.close();} else {std::cout << "文件读取失败!" << std::endl;}}```3. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。

实验四 文件管理实验

实验四  文件管理实验

实验四文件管理实验◆实验名称:文件管理实验◆仪器、设备:计算机◆参考资料:操作系统实验指导书◆实验目的:设计一个n个用户的文件系统,用户在一次运行中只能打开一个文件,有Create、delete、open、close、read、write等命令。

◆实验内容:为DOS系统设计一个简单的二级文件系统。

要求可以实现下列几条命令CREATE 创建文件DELETE 删除文件OPEN 打开文件CLOSE 关闭文件READ 读文件WRITE 写文件◆实验原理、数据(程序)记录:#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],strtext[255],a[25];char fmode[25];int FindPANo(); /*find out physical address num*/int WriteF1(); /*write file*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You must create file in your own dir.\n");wgetchar=1;}else{ printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));if (ExistF(fname)>=0){printf("\nError. Name \'%s\' has already existed.\n",fname);wgetchar=1;} else{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp(fmode ,"3")==0)){fpaddrno=FindPANo();if (fpaddrno>=0){i=ExistD(username);strcpy(ufd[i]->ufdfile[fcount[i]].fname,fname);ufd[i]->ufdfile[fcount[i]].fpaddr=fpaddrno;ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);ifopen[i][fcount[i]].ifopen=0;ifopen[i][fcount[i]].openmode=4;strcpy(str,"c:\\osfile\\file\\file");itoa(fpaddrno,str1,10);strcat(str,str1);fp_file=fopen(str,"wb");fclose(fp_file);fcount[i]++;while(flag){printf("Input text now(Y/N):");gets(a);ltrim(rtrim(a));ufd[i]->ufdfile[fcount[i]-1].flength=0;if(strcmp(strupr(a),"Y")==0){fp_file=fopen(str,"wb+");ufd[i]->ufdfile[fcount[i]-1].flength=WriteF1();flag=0;} else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}} printf("\n\'%s\' has been created successfully!\n",fname);} else{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}} else {printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}}}}int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/{int i,j;int exist=0;int ExistD(char *dirname);j=ExistD(dirname);for(i=0;i<fcount[j];i++)if (strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0){exist=1;break;}if (exist) return(i);else return(-1);}int FindPANo() /*find out physical address num*/{int i;for(i=0;i<MAX;i++)if (fpaddrno[i]==0) {fpaddrno[i]=1;break;}if (i<MAX) return(i);else return(-1);}int WriteF1() /*write file*/{int length=0;char c;printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n') length++;} fprintf(fp_file,"\n");fclose(fp_file);return(length);}******************************************************************************* void DeleteF() /*Delete File*/{char fname[MAXNAME];char str[50],str1[50];int i,j,k,flag=1;char a[25]; /*whether delete*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You can only delete file in your own dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==1){printf("\nError. \'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;}else{while(flag){printf("\'%s\' will be deleted. Are you sure(Y/N):",fname);gets(a);ltrim(rtrim(a));if(strcmp(strupr(a),"Y")==0){fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;itoa(ufd[k]->ufdfile[i].fpaddr,str,10);for(j=i;j<fcount[k]-1;j++){strcpy(ufd[k]->ufdfile[j].fname,ufd[k]->ufdfile[j+1].fname);ufd[k]->ufdfile[j].fpaddr=ufd[k]->ufdfile[j+1].fpaddr;ufd[k]->ufdfile[j].flength=ufd[k]->ufdfile[j+1].flength;ufd[k]->ufdfile[j].fmode=ufd[k]->ufdfile[j+1].fmode;ifopen[k][j]=ifopen[k][j+1];}fcount[k]--;strcpy(str1,"c:\\osfile\\file\\file");strcat(str1,str);remove(str1);flag=0;printf("\n\'%s\' has been deleted successfully.\n",fname);wgetchar=1;}else if(strcmp(strupr(a),"N")==0){printf("\nError. \'%s\' hasn\'t been deleted.\n",fname);wgetchar=1;flag=0;}}}}else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void OpenF() /*Open File*/{char fname[MAXNAME];char str[25],str1[25],fmode[25];int i,k;char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError. Please change to ufd dir before open.\n");wgetchar=1;return;}printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(dirname);if(!ifopen[k][i].ifopen){if (ufd[k]->ufdfile[i].fmode==3){printf("\nError. The file\'s mode is FORBID. Can not open.\n");wgetchar=1;}else{printf("Please input FileOpenMode(0-Read Only,1-Write Only,2-Read and Write):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)){if(fmode[0]=='0') /*open file with read only mode*/{strcpy(str,"read only");if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;}else if(fmode[0]=='1') /*open file with write only mode*/{strcpy(str,"write only");if((ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;}else if(fmode[0]=='2') /*open file with read and write mode*/{strcpy(str,"read and write");if(ufd[k]->ufdfile[i].fmode==2) ifopen[k][i].ifopen=1;}if(ufd[k]->ufdfile[i].fmode==0) strcpy(str1,"read only"); /*FileMode*/else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str1,"write only");else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str1,"read and write");if(ifopen[k][i].ifopen==1){ifopen[k][i].openmode=atoi(fmode);if (ifopen[k][i].openmode==0) strcpy(str,"read only");else if(ifopen[k][i].openmode==1) strcpy(str,"write only");else if(ifopen[k][i].openmode==2) strcpy(str,"read and write");printf("\n\'%s\' has been opened. OpenMode is %s,FileModeis %s\n",fname,strupr(str),strupr(str1));wgetchar=1;} else{printf("\nError. \'%s\' hasn\'t been opened. OpenMode Error. OpenMode is %s,but FileMode is %s\n",fname,strupr(str),strupr(str1));wgetchar=1;}} else {printf("\nError. FileOpenMode\'s Range is 0-2\n");wgetchar=1;}}} else {printf("\nError. \'%s\' is in open status.\n",fname);wgetchar=1;}} else{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}******************************************************************************* void CloseF() /*Close File*/{int i,k,n=0;char fname[MAXNAME];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError. Please convert to ufd dir before close.\n");wgetchar=1;return;}k=ExistD(dirname);printf("\nOpen File(s) In This Ufd:\n"); /*display openned file*/for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");} printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){ifopen[k][i].ifopen=0;ifopen[k][i].openmode=4;printf("\n\'%s\' has been closed successfully.\n",fname);wgetchar=1;} else {printf("\nError.\'%s\' is in closing status.\n",fname);wgetchar=1;}} else {printf("\nError. \'%s\' is not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void ReadF() /*Read File*/{int i,k,n=0;char fname[MAXNAME];char str[255],str1[255],c;char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}printf("\nCaution:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);fp_file=fopen(str,"rb");fseek(fp_file,0,0);printf("\nThe text is:\n\n");printf(" ");while(fscanf(fp_file,"%c",&c)!=EOF)if (c=='\n') printf("\n ");else printf("%c",c);printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);fclose(fp_file);wgetchar=1;}else{printf("\nError.\'%s\' has been opened with WRITE ONLY mode. It isn\'tread.\n",fname);wgetchar=1;}}else {printf("\nError.\'%s\' is in closing status. Please open it beforeread\n",fname);wgetchar=1;}}else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void WriteF() /*Write File*/{int i,k,n=0;char fname[MAXNAME];char str[50],str1[50],a[50];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);int WriteF1(); /*write file*/if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError. Please convert to ufd dir before write.\n");wgetchar=1;return;}k=ExistD(dirname);printf("\nOpen File(s) with write only mode or read and write mode:\n");/*display openned files with writable mode*/for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files open.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);if (ufd[k]->ufdfile[i].flength!=0){printf("\n\'%s\' has text. Overwrite or Append(O-overwrite,A-Append,else-not write):",fname);gets(a);ltrim(rtrim(a));if (fp_file!=NULL) fclose(fp_file);if (strcmp(strupr(a),"O")==0){printf("\nOverwrite\n");fp_file=fopen(str,"wb");ufd[k]->ufdfile[i].flength=0;ufd[k]->ufdfile[i].flength=WriteF1();}else if(strcmp(strupr(a),"A")==0){printf("\nAppend\n");fp_file=fopen(str,"ab");ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+WriteF1();}else{printf("\nError.\'%s\' has not been written.\n",fname);fclose(fp_file);wgetchar=1;} }else{fp_file=fopen(str,"wb");ufd[k]->ufdfile[i].flength=WriteF1();}}else{printf("\nError. \'%s\' has been opened with read only mode.It isn\'twrited.\n",fname);wgetchar=1;}}else{printf("\nError. \'%s\' is in closing status. Please open it beforewrite\n",fname);wgetchar=1;}}else{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}◆实验结果及分析通过实验实现了有Create、delete、open、close、read、write等命令的简单的文件系统。

实验四 磁盘和文件系统管理心得

实验四 磁盘和文件系统管理心得

实验四磁盘和文件系统管理心得前言实验四主要涉及磁盘和文件系统的管理,通过对磁盘分区、文件系统格式化、文件的创建、删除和修改等操作,我们能够更好地理解和掌握磁盘和文件系统的相关概念和原理。

本文将从以下几个方面对实验四的心得进行全面、详细、完整且深入地探讨。

磁盘分区的原理与方法磁盘分区是指将一个物理硬盘分成多个逻辑区域的操作。

通过对磁盘进行合理分区,可以充分利用磁盘空间,并为不同用途的数据提供不同的存储空间。

磁盘分区有两种常见的方法:主引导记录(Master Boot Record,MBR)分区和GUID分区表(GUID Partition Table,GPT)。

MBR分区MBR分区是一种传统的分区方式,适用于BIOS引导的系统。

MBR分区表将硬盘的第一个扇区(512字节)用于存储分区表的信息,包括主引导记录、分区表项等。

MBR分区最多支持4个主分区或3个主分区加一个扩展分区。

其中,扩展分区可以进一步划分逻辑分区。

GPT分区GPT分区是一种新的分区方式,适用于UEFI引导的系统。

GPT分区通过GUID(全局唯一标识符)来标识分区,解决了MBR分区的一些限制,如只能支持最多4个主分区等。

GPT分区表存储在硬盘末尾的一个独立区域,可以容纳更多的分区信息。

文件系统的选择与格式化文件系统是操作系统用来管理和组织文件的一种方式。

常见的文件系统有FAT32、NTFS、ext4等。

在进行文件系统格式化之前,我们需要选择适合自己需求的文件系统。

FAT32文件系统FAT32是一种通用的文件系统,在各个操作系统中都能够良好地兼容。

它支持的单个文件最大为4GB,簇大小可以灵活配置。

然而,FAT32文件系统对于大容量硬盘的利用率较低,而且不支持文件权限和加密等高级功能。

NTFS文件系统NTFS是Windows操作系统中常用的文件系统,它支持大容量硬盘,单个文件最大支持16TB。

NTFS文件系统具有更高的稳定性和安全性,支持文件权限、加密和压缩等功能。

文件操作的实验报告(3篇)

文件操作的实验报告(3篇)

第1篇一、实验目的1. 熟悉文件和文件夹的基本操作。

2. 掌握文件的创建、复制、移动、删除等基本操作方法。

3. 学习如何使用文件管理器进行文件和文件夹的管理。

4. 了解文件属性的设置和修改方法。

二、实验环境1. 操作系统:Windows 102. 文件管理器:Windows资源管理器三、实验内容1. 文件的基本操作2. 文件夹的基本操作3. 文件属性的设置与修改4. 文件夹属性的设置与修改5. 文件夹的搜索与查找6. 文件夹的压缩与解压四、实验步骤1. 文件的基本操作(1)创建文件:在Windows资源管理器中,选择一个空白位置,右键点击,选择“新建” -> “文本文档”,然后输入文件名并按回车键。

(2)复制文件:选中需要复制的文件,右键点击,选择“复制”,然后在目标位置右键点击,选择“粘贴”。

(3)移动文件:选中需要移动的文件,右键点击,选择“剪切”,然后在目标位置右键点击,选择“粘贴”。

(4)删除文件:选中需要删除的文件,右键点击,选择“删除”,或者直接按Delete键。

2. 文件夹的基本操作(1)创建文件夹:在Windows资源管理器中,选择一个空白位置,右键点击,选择“新建” -> “文件夹”,然后输入文件夹名并按回车键。

(2)复制文件夹:选中需要复制的文件夹,右键点击,选择“复制”,然后在目标位置右键点击,选择“粘贴”。

(3)移动文件夹:选中需要移动的文件夹,右键点击,选择“剪切”,然后在目标位置右键点击,选择“粘贴”。

(4)删除文件夹:选中需要删除的文件夹,右键点击,选择“删除”,或者直接按Delete键。

3. 文件属性的设置与修改(1)选中文件,右键点击,选择“属性”,在“常规”选项卡中,可以设置文件的只读、隐藏等属性。

(2)在“安全”选项卡中,可以设置文件的安全权限,如完全控制、修改、读取等。

4. 文件夹属性的设置与修改(1)选中文件夹,右键点击,选择“属性”,在“常规”选项卡中,可以设置文件夹的只读、隐藏等属性。

实验四: 文件管理

实验四: 文件管理

实验四:文件管理一、实验目的1、掌握linux文件保护的原理2、掌握linux 符号链接、软链接的不同二.实验环境一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

三.实验内容内容一:Linux操作系统下帐号管理命令及文件介绍1、添加用户2、为用户添加密码3、锁定账号4、解锁账号5、设置账号的过期时间6、添加组账号7、指定用户的所属组8、修改用户的所属组9、删除组内容二:Linux操作系统下文件、目录权限管理1、为用户创建的所有新文件生成一个默认的文件权限 755。

2、改变/opt/local /book/及其子目录下的所有文件的属组为book3.把文件shiyan.c的所有者改为wan4.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users。

5.新建一个文件,并将它的权限修改为 rwxrw-r--, 最少列举两种方法:内容三:硬链接、符号连接Linux系统中连接文件分为硬连接和符号连接。

硬连接:只是在某一目录下的块多写入一个关联数据,不会用掉incode 与磁盘空间(只有当目录的块被用完,才可能会增加一个块来完成,从而导致磁盘空间发生变化,这样的可能性非常小)。

符号连接:我们可以理解成如Windows的快捷方式。

符号连接是一个独立的新文件,所以占inode与块。

(注:在ext2文件系统中,文件由文件属性块(即indoe talbe)和文件内容块两区域)实验步骤:1、 /显示当前目录占用的容量,和磁盘空间大小命令:结果:2、使用vi建立一个测试文件test。

内容为“Hello everyone!”3、显示当前目录占用的容量,和磁盘空间大小结果:4、为test创建硬连接文件testh命令:5、查看建立硬连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

结果:6、为test创建一个符号连接文件testo文件命令:7、查看建立符号连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

实验四 文件管理

实验四  文件管理

实验四Linux下的文件管理1. 实验目的⑴加深对文件,目录,文件系统等概念的理解。

⑵掌握Linux系统中文件和目录的基本操作方法;⑶了解在多用户环境下文件和目录权限的重要性。

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

2. 实验准备⑴阅读Linux文件系统的树形结构,掌握系统中各目录的用途。

⑵阅读树形结构中每个目录的内容,分析进程的创建过程。

3. 实验内容⑴使用pwd,cd,ls等命令浏览文件系统。

⑵使用cat,cp,mv,head,tail,rm等命令查看你的文件。

⑶使用ln命令进行文件的硬连接和符号连接。

软中断通信⑷使用find,grep命令进行文件查找和模式匹配。

⑸使用chmod命令修改文件的权限。

4. 实验步骤进入虚拟机,并在此平台上练习文件管理有关命令.一般在[root @ localhost xxxx]$提示符下键入有关命令。

【步骤1】浏览文件系统⑴运行pwd命令,确定你当前的工作目录。

利用以下命令显示当前工作目录的内容:ls –l运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)ls –ai使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。

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

Ls -d⑵使用cd命令,将工作目录改到根目录(/)上。

用相对路径将工作目录改到根目录。

Pwd 显示当前目录为 /home/mengqcCd .. 相对路径,返回上一级。

Pwd 反馈显示当前目录为 /homeCd .. 相对路径,再返回上一级。

Pwd 反馈显示当前目录为 /Cd /home/mengqc 恢复本身目录(也可以 cd↙).Pwd 反馈显示当前目录用绝对路径将工作目录改到根目录。

Cd / 用绝对路径返回根目录,Pwd 反馈显示当前目录为 /⑶使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。

实验四文件系统实验

实验四文件系统实验

实验四文件系统实验一. 目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

二. 例题:1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。

另外,为打开文件设置了运行文件目录(AFD)。

3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。

4、算法与框图:①因系统小,文件目录的检索使用了简单的线性搜索。

②文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。

③程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)打开文件目录(AFD)(即运行文件目录)文件目录指针文件名··文件系统算法的流程图如下:三. 实验题:1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

代码如下://1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

#include<iostream>#include<string>#include<conio.h>using namespace std;struct TYPE_UFD{string File_Name;bool Read;bool Write;bool Execute;int Length_File;};struct TYPE_MFD{string User_Name;TYPE_UFD *Pointer;};struct TYPE_AFD{int File_ID;bool Read;bool Write;bool Execute;int Pointer;};class TYPE_FILE_SYSTEM{public:void Initial( void );void Start( void );private:int _Number_Users;int _Number_Files;int _MaxNumber_Open_Files;TYPE_MFD *_MFD;TYPE_UFD *_UFD;TYPE_AFD *_AFD;};void TYPE_FILE_SYSTEM::Initial( void ){_Number_Users = 10;_Number_Files = 10;_MaxNumber_Open_Files = 5;_UFD = new TYPE_UFD [_Number_Users*_Number_Files];_MFD = new TYPE_MFD [_Number_Users];int i=0;for( i=0 ; i<_Number_Users ; i++ ){_MFD[i].Pointer = &(_UFD[i*_Number_Files]);}_AFD = new TYPE_AFD [_MaxNumber_Open_Files];_MFD[0].User_Name = "zaq";_UFD[0].File_Name = "file1.txt";_UFD[0].Length_File = 10;_UFD[0].Read = true;_UFD[0].Write = false;_UFD[0].Execute = true;_UFD[1].File_Name = "file2.txt";_UFD[1].Length_File = 20;_UFD[1].Read = true;_UFD[1].Write = false;_UFD[1].Execute = false;for( i=2 ; i<_Number_Files ; i++ ){_UFD[i].File_Name = "";_UFD[i].Length_File = -1;_UFD[i].Read = false;_UFD[i].Write = false;_UFD[i].Execute = false;}}void TYPE_FILE_SYSTEM::Start( void ){int User_ID;int i,temp_int;string temp;char choice;int Number_Open_Files;string User_Name;string Command;TYPE_UFD *UFD;do{do{cout << "已创建用户名为zaq\n指令有:create delete open dir diropen write read logout shutdown \n\n";cout << "请输入用户名:";cin >> User_Name;for( User_ID=0 ; User_ID<_Number_Users ; User_ID++ ){if( _MFD[User_ID].User_Name == User_Name )break;}if( User_ID == _Number_Users )cout << "用户名错误,请再次输入." << endl;}while( User_ID == _Number_Users );cout << "欢迎登录, " << User_Name << " !" << endl;UFD = _MFD[User_ID].Pointer;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){_AFD[i].File_ID = -1;}Number_Open_Files = 0;do{cout << "C:\\" << User_Name << ">" ;cin >> Command;if( Command == "dir" ){cout << endl;cout << "打开用户" << User_Name <<"的文件" << endl;cout << "\t" << "State\t" << "Length\t" << "File name" << endl;for( i=0 ; i<_Number_Files ; i++ ){if( UFD[i].Length_File != -1 ){cout << "\t" ;if( UFD[i].Read == true )cout << "R";elsecout << "-";if( UFD[i].Write == true )cout << "W";elsecout << "-";if( UFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[i].Length_File;cout << "\t";cout << UFD[i].File_Name << endl;}}cout << endl;}else if( Command == "diropen" ){cout << endl;cout << "打开用户" << User_Name << "的文件"<<endl;cout << "\t" << "State\t" << "Open File name" << endl;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){if( _AFD[i].File_ID != -1 ){cout << "\t" ;if( _AFD[i].Read == true )cout << "R";elsecout << "-";if( _AFD[i].Write == true )cout << "W";elsecout << "-";if( _AFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[_AFD[i].File_ID].File_Name << endl;}}cout << endl;}else if( Command == "create" ){for( i=0 ; i<_Number_Files ; i++ )if( UFD[i].Length_File == -1 )break;if( i == _Number_Files )cout << "Error: 已有名为" << _Number_Files << " 的文件." << endl;else{cout << "请输入新文件信息:" << endl;cout << "文件名: ";cin >> temp;UFD[i].File_Name = temp;cout << "文件权限: ";cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Read = true;elseUFD[i].Read = false;cout << endl;cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Write = true;elseUFD[i].Write = false;cout << endl;cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Execute = true;elseUFD[i].Execute = false;cout << endl;cout << "Length :";cin >> temp_int;if( temp_int > 0 )UFD[i].Length_File = temp_int;cout << "新文件" << UFD[i].File_Name << " 已建立!" << endl;}}else if( Command == "delete" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{UFD[i].Length_File = -1;cout << "文件" << UFD[i].File_Name << " 已删除." << endl;}}else if( Command == "open" ){if( Number_Open_Files == _MaxNumber_Open_Files )cout << "Error: 你已经打开了" <<Number_Open_Files << " 文件." << endl;else{cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{Number_Open_Files++;for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == -1 )break;_AFD[temp_int].File_ID = i;_AFD[temp_int].Pointer = 0;cout << "请定义打开方式:" << endl;if( UFD[i].Read == true ){cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Read = true;else_AFD[temp_int].Read = false;cout << endl;}else_AFD[temp_int].Read = false;if( UFD[i].Write == true ){cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Write = true;else_AFD[temp_int].Write = false;cout << endl;}else_AFD[temp_int].Write = false;if( UFD[i].Execute == true ){cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Execute = true;else_AFD[temp_int].Execute = false;cout << endl;}else_AFD[temp_int].Execute;cout << "文件" << temp << " 已打开." << endl;}}}else if( Command == "logout" ){cout << "再见, " << User_Name << " !" << endl;break;}else if( Command == "close" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{_AFD[temp_int].File_ID = -1;Number_Open_Files--;cout << "文件" << temp << " 已关闭." << endl;}}}else if( Command == "read" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Read == true )cout << "文件" << temp << " 成功读取." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "write" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Write == true )cout << "文件" << temp << " 成功写入." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "shutdown" ){cout << "正在注销........" << endl;cout << "再见, " << User_Name << " !" << endl;cout << "正在关机.........." << endl;break;}else{cout << "指令错误,请再次输入." << endl;}}while( Command != "logout" && Command != "shutdown" );}while( Command != "shutdown" );}int main(){TYPE_FILE_SYSTEM FS;FS.Initial();FS.Start();return 0;}2、编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

文件系统实验报告

文件系统实验报告

试验四文件系统之马矢奏春创作一、二、实验目的1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操纵命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个n个用户的文件系统,每次用户可以保管M个文件。

用户在一次运行中只能打开一个文件,对文件必须设置呵护措施,且至少有create、delete、open、close、read、write等命令。

三、实验题目:采取二级目录结构实现磁盘文件操纵。

要求:1.普通文件的目录项包含文件名,文件类型,文件长度,指向文件内容的指针内容。

2.目录文件的目录项包含目录名,指向下一级目录块的指针内容。

假定每个目录文件最多只能占用一个块;3.程序功能方面的要求:需要实现一个命令行操纵界面,包含如下命令:4.程序实现方面的要求:(1)、对于重名(创建时),文件不存在(删除时),目录不存在(改变目录时)等错误操纵情况,程序应该做出相应处理并给出错误信息,但是程序不得因此而退出。

(2)、界面友好,程序强壮。

(3)、设置界面的提示符,提示的命令以及调试的方法应和前面的要求一致。

不要自己设计命令或者附加不要求的功能。

:执行文件名:Project1.exe四.实验分析1)总论:该系统是一个多用户、多任务的实时操纵系统。

对用户和用户的文件数目并没有上限。

也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目其实不做任何的限制。

该系统的操纵命令如下:①、bye-用户注销命令。

当使用该命令时,用户退出系统。

命令格式:run\bye↙系统注销该用户并回到登陆界面。

②、close-删除用户注册信息命令。

执行该命令后,用户在系统中的所有信息,包含该用户目录下的所有文件都被删除。

命令格式:run\close↙.完成后返回登陆界面。

③、create-在当前目录下创建一个文件,且该文件不克不及跟系统中的文件重名。

该文件的管理信息登录到用户文件信息管理模块中。

命令格式:run\create>file1↙。

【VIP专享】实验四 表空间及数据文件管理

【VIP专享】实验四 表空间及数据文件管理

实验四表空间及数据库文件管理1)在SQL*PLUS环境下,使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS1,其对应的数据文件为usertbs1_1.DBF,大小为20MB。

2)使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS2,要求每个分区大小为512KB。

3)修改USERTBS1表空间的大小为30MB,将其数据文件改为自动扩展方式,每次扩展5MB,最大值为100MB。

4)为USERS表空间添加一个数据文件usere03.DBF,大小为50MB。

5)使用SQL命令创建一个本地管理方式下的临时表空间TEMPTBS,并将该表空间作为当前数据库实例的默认临时表空间。

6)使用SQL命令对USERTBS1表空间进行联机和脱机状态转换。

7)创建一个回滚表空间UNDOTBS,并作为数据库的撤销表空间。

8)删除表空间USERTBS2,同时删除该表空间的内容以及对应的操作系统文件。

9)将表空间USERS中的数据文件usere03.DBF更名为userdata03.dbf,将表空间EXAMPLE中的数据文件example02.dbf更名为example03.dbf。

10)查询当前数据库中所有表空间及其对应的数据文件信息。

11)将数据库的控制文件以二进制文件的形式备份。

12)为数据库ORCL添加一个重做日志文件组,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。

13)为新建的重做日志文件组添加一个成员完文件,名称为redo4c.log。

14)将数据库设置为归档模式,并采用自动归档方式。

15)设置数据库归档路径为D:\ORACLE\BACKUP。

一、实验步骤参考PPT内容。

二、思考题1)Oracle 归档模式与非归档模式有什么区别?七、实验总结写出本次实验的收获、不足和改进。

实验四

实验四

实验四文件系统一、目的要求1、用高级语言编写和调试一个简单的文件系统。

模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个n个用户的文件系统。

每次用户可保存m个件,用户在一次运行中只能打开一个文件。

对文件必须设置保护措施,且至少有Creat,Delete,Close,Write等命令。

二、实验设计:设计一个10个用户的文件系统。

每个用户最多可保存10个文件,一次运行用户可一个文件。

程序是采用二级文件目录。

(即设置主目录(MFD)和用户文件目录(UFD)。

另外,为打开文件设置指针。

为了方便实现,对文件的读写作了简化。

在执行读写命令时,只需改读写指针。

并不进行实际的读写操作。

四、实验流程:实验开始,先进入MFD表,初值为空。

输入用户名字,需要保存用户名字,同时也有了有个新文件目录表。

接着是文件的一系列的基本操作:1、打印所有文件名。

2、打开一个文件。

3、添加一个文件。

4、删除一个文件。

5、改文件的保护码。

6、写文件。

7、读文件。

8、退出。

可以,重复用户登陆。

框图如下:五、源程序:#include <iostream.h>#include <string.h>#include <stdio.h>#include<iomanip.h>struct user {char name[10];}user[10];int in=0;struct link {struct file {char name[10];int lenght;int write;int read;int exe;}file[10];int used;}link[10];char name[10];int p;int checkuser();void createuser();void openall();void openfile();void createfile();void deletefile();void changeprotect();void write();void read();int find();void main(){int ch;char c;cout<<"*******************文件管理统*********************"<<endl<<endl<<endl; str: cout<<"用户名:";cin>>name;p=checkuser();if(p==10) {cout<<"用户不存在!"<<endl;cout<<"是否加为用户(y/n):";cin>>c;if(c=='y')createuser();else goto str;}printf("请输入操作:\n");menu: printf("1.打开所有文件.\n2.打开某一文件.\n3.添加文件.\n4.删除文件.\n5.改文件保护位.\n6.写文件.\n7.读文件.\n8.退出.\nchoose1,2,3,4,5,6,7,8:");cin>>ch;if(ch==1)openall();if(ch==2)openfile();if(ch==3)createfile();if(ch==4)deletefile();if(ch==5)changeprotect();if(ch==6)write();if(ch==7)read();if(ch==8) {printf("是否退出程序(y/n):");cin>>c;if(c=='y') goto ext;goto str;}goto menu;ext:cout<<"拜拜"<<endl;}int checkuser(){int s;for(int i=0;i<10;i++){s=strcmp(name,user[i].name);if(s==0) return i;}return 10;}void createuser(){strcpy(user[in].name,name);link[in].used=0;in++;}void openall(){if(link[p].used==0)cout<<"此文件夹为空!"<<endl;else{cout<<"文件名------读保护------写保护------执保护"<<endl;for(int i=0;i<link[p].used;i++)cout<<link[p].file[i].name<<setw(12)<<link[p].file[i].write<<setw(12)<<link[p].file[i].read< <setw(12)<<link[p].file[i].exe<<endl;}}void openfile(){cout<<"输入文件名:";cin>>name;int i=find();if(i==10)cout<<"此文件不存在!"<<endl;else{cout<<"文件名------读保护------写保护------执保护------文件长度"<<endl;cout<<link[p].file[i].name<<setw(12)<<link[p].file[i].write<<setw(12)<<link[p].file[i].read< <setw(12)<<link[p].file[i].exe<<setw(12)<<link[p].file[i].lenght<<endl;}}void createfile(){int a=link[p].used;link[p].used++;cout<<"输入文件名:";cin>>link[p].file[a].name;link[p].file[a].write=0;link[p].file[a].read=0;link[p].file[a].exe=0;link[p].file[a].lenght=0;}void deletefile(){cout<<"输入文件名:";cin>>name;int i=find();if(i==10)cout<<"此文件不存在!";else {for(int j=i;j<9;j++){strcpy(link[p].file[i].name,link[p].file[i+1].name);link[p].file[i].write=link[p].file[i+1].write;link[p].file[i].read=link[p].file[i+1].read;link[p].file[i].exe=link[p].file[i+1].exe;}link[p].used--;}}void changeprotect(){cout<<"输入文件名:"<<endl;cin>>name;int i=find();if(i==10)cout<<"此文件不存在!";else {cout<<"改变保护值:读,写,执:(0/1,0/1,0/1):";cin>>link[p].file[i].write;cin>>link[p].file[i].read;cin>>link[p].file[i].exe;}}void write(){cout<<"输入文件名:"<<endl;cin>>name;int l;int i=find();if(i==10)cout<<"此文件不存在!";else {cout<<"此文件已经打开!";cout<<"文件将要写的长度:";cin>>l;link[p].file[i].lenght+=l;}}void read(){cout<<"输入文件名:"<<endl;cin>>name;int i=find();if(i==10)cout<<"此文件不存在!"<<endl;else {cout<<"文件已经打开!"<<endl;cout<<"文件长度为:"<<link[p].file[i].lenght<<endl;}}int find(){int a;for(int i=0;i<10;i++){a=strcmp(name,link[p].file[i].name);if(a==0) return i;}return 10;}。

《操作系统》实验报告四磁盘文件操作

《操作系统》实验报告四磁盘文件操作

《操作系统》实验报告四磁盘文件操作实验目的:1.学会使用文件系统的相关API进行磁盘文件的创建、读写和删除。

2.加深对文件系统组织结构的理解。

实验内容:1.创建一个磁盘文件,并向文件中写入一定内容。

2.在磁盘文件中读取数据,并进行输出。

3.删除磁盘文件。

实验步骤:实验步骤一:创建磁盘文件在实验前,我们首先要分配一块磁盘空间来存放文件。

在操作系统中,通常会有一个文件系统来管理磁盘上的数据。

我们可以通过文件系统的相关API来创建磁盘文件。

在实验开始前,调用文件系统的API函数create(file_name)创建一个新文件,并将其命名为file_name。

实验步骤二:向磁盘文件中写入数据在创建磁盘文件之后,我们可以通过文件系统的write(file_name, data)函数来向文件中写入数据。

其中,file_name是要写入的文件名,data是要写入的内容。

实验步骤三:从磁盘文件中读取数据并输出在文件写入操作之后,我们可以通过文件系统的read(file_name)函数来读取文件中的数据,并进行输出。

其中,file_name是要读取的文件名。

实验步骤四:删除磁盘文件在实验结束后,我们可以使用文件系统的delete(file_name)函数来删除磁盘文件。

其中,file_name是要删除的文件名。

实验结果:经过以上实验步骤操作后,我们可以观察到以下结果:1. 在实验步骤一中,磁盘空间上创建了一个新文件,并赋予了文件名file_name。

2.在实验步骤二中,我们向磁盘文件中写入了一定的数据。

3.在实验步骤三中,我们成功地从磁盘文件中读取了数据,并进行了输出。

4.在实验步骤四中,我们成功地删除了磁盘文件。

实验心得:通过这次实验,我学会了如何使用文件系统的相关API进行磁盘文件的创建、读写和删除操作。

实验中,我们了解到了文件系统的组织结构,以及如何通过API函数来对磁盘文件进行操作。

在实验过程中,我深入理解了文件系统是如何将文件组织存储在磁盘上的,从而更好地理解了操作系统的内部机制。

04文件管理应用

04文件管理应用
完成以上的需求。
三、实验平台
VMware workstation、windows server
四、实验步骤
1.创建各年级专业用户
2.创建各年级专业文件
3.给16rg文件设置仅16rg用户可访问权限
4.给16wg文件设置仅16wg用户可访问权限
5.登录并测试16rg用户,发现16rg用户不可访问16wg文件
6.对16rg、16wg用户磁盘配额
7.测试16rg配额情况
五实验总结
本实验的大致步骤为,创建用户与文件,为各文件分配不同用户访问权限,进行权限设置,其后是为各用户分配不同的磁盘配额,并测试。
在实验中我遇到了两个问题,第一:用户创建之后无法登录,注册表中不存在该用户的资料。第二:文件分配权限时,无法删除User此类用户的权限。
《操作系统原理》实验报告
实验名称:文件管理应用
专业:计算机科学与技术
班级:2017级计算机科学与技术2班
学号:xxxxxxxxxxx
姓名:xxxxxxx
指导教师:xxxx
时间:2019年12月x日
xxxx信息工程学院制
一、实验目的
(1)理解文件目录相关理论。
(2)掌握文件共享、文件保护相关技能文件属性、还有在权限中取消勾选“包括可从该对象的父项继承的权限”,解决了上述问题。
经过此次实验,我了解了用户管理和文件权限设置、文件共享和用户磁盘配额等知识。
实验评分:
指导教师签字:
年月日
信息工程学院的机房,由于学生存放大量文件,又互相删除文件,造成管理上的混乱。该学院有4个年级,每个年级有网络工程、软件工程2个专业。请给出解决方案,对每个年级每个专业所使用的目录进行保护,并且根据实际情况限制学生占用的硬盘空间。若未来有新增的学生用户属于某个年级的,将相应的文件夹共享给相应的学生用户。

操作系统 实验4:文件管理实验报告

操作系统 实验4:文件管理实验报告

一、实验题目:文件管理实验--Linux下的文件管理二、实验目的和要求:实验目的:(1)加深对文件、目录、文件系统等概念的理解。

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

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

(4)了解有关文件安全性方面的知识。

实验要求:(1)正确使用文件管理命令,能熟练地对文件进行浏览、拷贝、移动和删除。

(2)能熟练地确定和更改工作目录,查看内容和文件属性,创建和删除目录。

(3)正确地理解文件的权限,并能进行相应更改。

(4)理解文件的类型及其表示形式。

(5)理解文件名的表示形式,在模式匹配中能正确使用通配符。

三、实验内容:(1)使用pwd,cd,ls等命令浏览文件系统。

(2)使用cat,cp,mv,head,tail,rm等命令查看你的文件。

(3)使用ln命令进行文件的硬连接和符号连接。

软中断通信(4)使用find,grep命令进行文件查找和模式匹配。

(5)使用chmod命令修改文件的权限。

四、实验步骤:(说明:对本实验涉及的教材中的相关内容进行归纳总结,只需简要说明即可。

)1、用root账号登录到终端,使用pwd命令查看当前目录2、用cd命令将当前目录切换到“/”目录下3、使用ls明令查看Linux的目录结构,了解各目录存放与系统相关的文件14、使用 cat、more、head、tail等命令显示 /etc/inittab文件内容5、使用grep 命令在/etc/inittab 文件中查询“initdefault”字符串26、使用find 命令查找 /目录下所有以main 开头的文件7、使用 cp 命令将/etc目录下的inittab文件拷贝到/root目录下8、使用 sort 和uniq 命令对 /root目录下的inittab文件排序后输出其结果39、统计inittab文件的字节数、行数、字数10、用mkdir命令在/root目录下创建一个test目录11、用cp命令将/etc目录及其下所有内容复制到test目录下12、使用cd和ls查看/root/test/etc 下的内容413、将test目录改名为test214、删除test2五、实验总结:通过本次实验,让我懂得了怎样创建文件以及文件管理命令的使用,对Linux的掌握和了解进一步加深。

《Linux操作系统》实验四-文件管理和管理实验

《Linux操作系统》实验四-文件管理和管理实验

《Linux操作系统》实验报告实验四:文件管理和管理实验一、实验目的1.掌握用户管理命令;2.掌握文件管理命令。

二、实验环境Win10记事本VM三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果)用户管理实验内容:一、用户管理(一)添加用户useradd1、增加新用户user1,用户主目录:/home/user12、设置user1密码为user1113、增加新用户user2,用户主目录:/user/user24、设置user2 的密码为空5、以user1用户身份登陆6、将/home/file1文件拷贝到user1的用户主目录下,能够执行成功吗?可以执行7、将/home/file1文件拷贝到/home/dir1目录下,能够执行成功吗?不能够执行成功8、切换到root用户9、将/home/file1文件拷贝到/home/dir1目录下,能够执行成功吗?为什么?可以执行,因为Root用户有权限执行10、执行# chown user1 /home/dir1,命令作用是什么?改变user1的主目录为:/home/dir111、切换回user1用户12、将/home/file1文件拷贝到/home/dir1目录下,能够执行成功吗?为什么?不能,因为user1用户没有权限13、passwd和shadow文件的前5行内容和后4行内容是什么?Passwd(1):用户名。

(2):密码(已经加密)(3):UID(用户标识),操作系统自己用的(4):GID组标识。

(5):用户全名或本地帐号shadow(1):帐号名称(2):密码:这里是加密过的,但高手也可以解密的。

要主要安全问题(代!符号标识该帐号不能用来登录)(3):上次修改密码的日期(4):密码不可被变更的天数(5):密码需要被重新变更的天数(99999表示不需要变更)(6):密码变更前提前几天警告(7):帐号失效日期(8):帐号取消日期(9):保留条目,目前没用思考题:/etc/passwd和/etc/shadow的文件权限对于系统安全有何作用?(二)删除用户1、#userdel user12、#userdel -r user2思考:步骤1和步骤2的执行结果有什么异同?若使用参数r则删除用户的同事也删除用户所有的相关文件,也包括宿主目录及用户的邮件池等。

Vol.4实验(四)

Vol.4实验(四)

实验四管理文件和文件夹【实验目的】掌握文件和文件夹的基本操作:复制、移动和删除等。

【实验建议】看似简单的操作,重点在于熟练,尤其是通过快捷键操作,可以提高工作效率。

【实验操作内容和步骤】1 文件基本知识什么是文件?文件是用文件名标识的一组相关数据的集合,任何程序和数据都是以文件的形式存放在计算机的磁盘上。

在计算机中,一篇文章、一幅图画、一个程序、一首歌曲等都是以文件的形式存储在磁盘上的。

就像我们每个人都有名字一样,每个文件都要有一个文件名。

计算机就是对文件按名存取的。

什么是文件夹?通常,在计算机中存放着数以万计的文件,为了便于管理这些文件,就像我们把文件分类放到不同的抽屉中便于查阅一样,在计算机中也有像抽屉的东西,它就是文件夹。

文件夹也要有一个名字,取名的原则与文件的取名类似,只是不用再区分文件夹的类型,当文件夹多了以后,还可以把某些文件夹归到一个大文件夹中去。

久而久之,就构成了计算机中庞大的磁盘文件结构。

文件和文件夹命名规则:(1)文件名由主文件名和扩展名两部分组成,中间用小圆点隔开,其中扩展名可以省略。

主文件名用来表示文件的名称,一般通过它可以大概知道文件的作用或内容的含义,而扩展名是用来区分文件类型的。

如:doc类型表示word文档,txt类型表示文本文件,bmp类型表示位图。

(2)不区分英文字母大小写。

例如MYFILE和myfile相同;(3)在文件和文件夹名中,最多可以有255个字符;(4)文件和文件夹名中不能有下列字符出现:\ / :* ? “ < > 等。

总结:文件中放的是文件的内容;文件夹中放的可以是各种文件,也可以是下一级(子)文件夹。

在同一个文件夹中,不能有重名的文件或文件夹,而在不同的文件夹中,是可以有重名的文件或子文件夹的。

2 文件和文件夹管理工具“资源管理器”和“我的电脑”是Windows XP提供的用于管理文件和文件夹的两个应用程序。

“资源管理器”窗口如下图:“我的电脑”窗口如下图:(1)启动“资源管理器”的4种方法A.单击“开始”按钮,选择“所有程序”→“附件”菜单,执行“Windows 资源管理器”命令;B.用鼠标右键单击“开始”按钮,在弹出的快捷菜单中选择“资源管理器”命令;C.用鼠标右键单击桌面“我的电脑”图标,在弹出的快捷菜单中选择“资源管理器”命令;D.使用快捷键:Windows键+E(2)启动“我的电脑”的方法在桌面上双击“我的电脑”图标。

实验四-文件管理

实验四-文件管理

实验四文件管理专业:计算机系班级:xx软件工程学号:xxx姓名:xxx实验地点: xxx 实验时间: xxx 指导教师:xxx【实验目的】通过调试并运行一个简单的文件系统来模拟文件操作命令的执行、模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。

【实验要求】了解该系统的文件管理方案、数据结构、文件目录的建立与删除;理解系统在运行过程中显示的状态和有关参数变化情况的意义。

具体要求为:(1)了解一个支持n 个用户的文件系统,每个用户可拥有多个文件。

(2)理解二级和多级文件目录管理。

(3)了解文件存取控制保护方式。

(4)了解常见的文件操作命令。

【实验环境】具备Windows或MS-DOS操作系统、带有Turbo Pascal 集成环境的PC机。

【实验重点及难点】重点:理解文件管理的基本概念,文件管理中主要数据结构的设计和文件管理中文件、目录的建立和删除等算法的实现。

难点:实验程序的问题描述、实现算法、数据结构。

【实验内容】一.阅读实验程序文件管理模拟程序代码见【实验例程】。

二.编译实验例程用Turbo Pascal 编译实验例程。

三.运行程序并对照实验源程序阅读理解实验中输入、输出的意义。

【问题与讨论】1、该文件模拟系统目录结构的特点答:该文件采用文件系统的树形结构进行文件管理。

其中有主文件、用户文件和用户子文件,而且,用户子文件还采用了密码保护方式。

2、该文件模拟系统支持几个用户答:0-5 个用户。

3、主文件目录、用户文件目录、活动文件目录的目录项有哪些答:主文件目录:user_number,file_number 用户文件目录:filename,protection code,length 活动文件目录:没有东西。

4、设置数据域pcode 的目的是什么请说明如何发挥它的作用答:目的是为了保存活动文件的密码。

没有什么作用,但是,如果是在正规系统中的话,它是为了保护文件不被恶意删除、修改、查看、复制等。

文件管理-实验4

文件管理-实验4

4.程序清单编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

#include<stdio.h>#include<stdlib.h>#include<string.h>//主文件结构体struct MasterFile{char username[20]; //用户名char password[20]; //用户名密码char flag; //标志struct MasterFile *next;};//用户文件结构体struct UserFile{int fnum; //文件编号char fname[20]; //文件名int flength; //文件长度char flag; //标志char fpw[20]; //文件保护码struct UserFile *link;};//全局变量int shoudsave; //存储标记int usingnum; //当前用户标记struct Master[20]; //主目录struct User[20][20]; //用户目录//寻找主目录空闲区struct Master(){for(int i=0;i<20;i++){if(MFD[i].flag==0)usingnum=i;return &MFD[i];}return NULL;}//查找用户struct Master(char str[]){for(int i=0;i<20;i++){if(strcmp(str,MFD[i].username)==0){usingnum=i;return &MFD[i];}}return NULL;}//寻找用户目录空闲区struct UserFile *MoveUFDToLast(){for(int i=0;i<20;i++){if(UFD[usingnum][i].flag==0)return &UFD[usingnum][i];}return NULL;}//查找用户文件struct UserFile *SearchUFD(int num){for(int i=0;i<20;i++){if(UFD[usingnum][i].fnum==num)return &UFD[usingnum][i];}return NULL;}//删除用户文件目录void LeftMoveUFD(int num){for(int i=0;i<20;i++){if(UFD[usingnum][i].fnum==num){for(int j=i;j<19;j++){UFD[usingnum][i].flag=UFD[usingnum][i+1].flag;UFD[usingnum][i].flength=UFD[usingnum][i+1].flength;strcpy(UFD[usingnum][i].fname,UFD[usingnum][i+1].fname);UFD[usingnum][i].fnum=UFD[usingnum][i+1].fnum;strcpy(UFD[usingnum][i].fpw,UFD[usingnum][i+1].fpw);UFD[usingnum][i].link=UFD[usingnum][i+1].link;}}}}//用户登陆void Login(){char flag1,flag2,flag3;char str1[20],str2[20],str3[20],str4[20];struct MasterFile *p;printf("你是已有用户吗(y/n)?");scanf("%s",&flag1);if(flag1=='n'){ //新用户登录printf("请创建新的用户:(y/n)");scanf("%s",&flag2);if(flag2=='n'){printf("你已退出了系统!\n");exit(1);}else{printf("请输入你的用户名:");scanf("%s",&str1);printf("请输入口令:");scanf("%s",&str2);p=MoveMFDToLast();strcpy(p->username,str1);strcpy(p->password,str2);p->flag=1;printf("%d",MFD[usingnum].flag);p->next=NULL;shoudsave=1; //存储标记}}else{ //旧用户登录while(1){printf("请输入你的用户名:"); //输入用户名scanf("%s",&str3);p=SearchMFD(str3);if(p==NULL){printf("对不起,你输入的用户名不存在!\n");printf("继续(y)还是放弃(n)?");scanf("%s",&flag3);if(flag3=='y') continue;else{printf("你已退出了系统!\n");exit(1);}}else{while(1){printf("请输入口令:"); //输入口令scanf("%s",&str4);if(strcmp(str4,p->password)!=0){printf("对不起,你输入的口令不正确,请重新输入.\n");continue;}else break;}}break;}}}//菜单void menu(){printf("\n********************************************************************************");printf("\t1列文件目录\t\t\t\t\t2创建文件\n");printf("\t3删除文件\t\t\t\t\t4读文件\n");printf("\t5写文件\t\t\t\t\t\t0退出系统\n");printf("********************************************************************************\n"); }//列文件目录void Dir(){if(MFD[usingnum].next==0)printf("目前你不存在任何文件!\n");else{for(int i=0;i<20;i++){if(UFD[usingnum][i].flag==1)printf("文件编号\t%d\t文件名\t%s\t文件长度\t%d\t保护码\t%s\n",UFD[usingnum][i].fnum,UFD[usingnum][i].fname,UFD[usingnum][i].flength,UFD[usingnum][i].fpw);}}}//创建文件void Create(){FILE *fp;int num;struct UserFile *f;char str1[20],str2[20];printf("请输入你要创建的文件名:"); //输入文件信息scanf("%s",&str1);printf("请输入文件编号:");scanf("%d",&num);printf("请输入文件保护码:");scanf("%s",&str2);fp=fopen(str1,"w"); //创建文件f=MoveUFDToLast(); //寻找用户目录空闲区if(&UFD[usingnum][0]==f) //连接主目录MFD[usingnum].next=(struct MasterFile*)f;f->link=(struct UserFile*)fp; //设置用户目录MFD[usingnum].next=(struct MasterFile*)&UFD[usingnum][0];strcpy(f->fname,str1);strcpy(f->fpw,str2);f->fnum=num;f->flength=0;f->flag=1;fclose(fp);shoudsave=1; //设置存储标记printf("文件已创建!\n");}//删除文件void Delete(){struct UserFile *f;int num;printf("请输入你要删除的文件编号:");scanf("%d",&num);f=SearchUFD(num); //查找用户文件if(f==NULL) {printf("你要删除的文件不存在!\n");}else{LeftMoveUFD(num); //删除用户文件目录printf("文件已删除!\n");}shoudsave=1; //设置存储标记}//读文件void Read(){char ch;struct UserFile *f;FILE *fp;int num;printf("请输入你要读的文件的编号:");scanf("%d",&num);f=SearchUFD(num); //查找文件if(f==NULL){printf("你输入的文件不存在!\n");}else{if((fp=fopen(f->fname,"r"))==NULL){ //打开指定文件printf("不能打开该文件!\n");exit(0);}}ch=fgetc(fp); //输出文件内容while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp); //关闭文件printf("文件已读完毕!\n");}//写文件void Write(){char ch;struct UserFile *f;FILE *fp;int num;printf("请输入你要写的文件的编号:");scanf("%d",&num);f=SearchUFD(num); //查找文件if(f==NULL){printf("你输入的文件不存在!\n");}else{if((fp=fopen(f->fname,"wr"))==NULL){ //打开指定文件printf("不能打开该文件!\n");exit(0);}}printf("请按字符输入内容(以'#'表示结束符)"); //写入文件scanf("%s",&ch);while(ch!='#'){fwrite(&ch,1,1,fp);scanf("%s",&ch);}fclose(fp); //关闭文件shoudsave=1; //设置存储标记printf("文件写入完毕!\n");}//保存void Save(){FILE *fpm,*fpu;int flag=1,count=0;fpm=fopen("F:\\Master","wb"); //打开主文件if(fpm==NULL){printf("\n提示:重新打开主文件信息文件时发生错误!\n");exit(1);}for(int i=0;i<20;i++)fwrite(&MFD[i],sizeof(struct Master); //保存主文件目录信息fclose(fpm);printf("主文件目录信息保存完毕!\n");fpu=fopen("F:\\User","wb"); //打开用户文件if(fpu==NULL){printf("\n提示:重新打开用户目录信息文件时发生错误!\n");exit(1);}for(int j=0;j<20;j++) //保存用户文件目录信息fwrite(&UFD[j],sizeof(struct User);fclose(fpu);printf("用户文件目录信息保存完毕!\n");}//主函数int main(){printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t实验四文件管理\n");printf("\t\t*********************************************\t\t\n");printf("\n\n\n\t\t\t\t\t计算机1206\n");printf("\t\t\t\t\t王成义\n");printf("\t\t\t\t\t1030412612\n");printf("\t\t\t\t\t完成时间:2015/5/28\n\n\n\n");printf("\t\t\t\tWelcome\n\n");FILE *fpm,*fpu; //文件指针int sel;char ch;char jian;printf("\t\t\t\t文件管理系统\n\t\t\t\t\n");fpm=fopen("D:\\Master","rb"); //打开主文件目录信息文件if(fpm==NULL) {printf("\n提示:主文件目录信息文件还不存在,是否创建?(y/n)\n");scanf("%s",&jian);if(jian=='y'||jian=='Y')fpm=fopen("D:\\Master","wb"); //创建主文件目录的文件else exit(0);}fpu=fopen("D:\\User","rb"); //打开用户文件目录信息文件if(fpu==NULL){printf("\n提示:用户文件目录信息文件还不存在,是否创建?(y/n)\n");scanf("%s",&jian);if(jian=='y'||jian=='Y')fpu=fopen("D:\\User","wb"); //创建用户文件目录的文件else exit(0);}printf("文件正在打开,请稍等...");for(int i=0;i<20;i++) //读取主文件目录信息fread(&MFD[i],sizeof(struct Master); //将文件的内容放入接点中fclose(fpm); // 关闭文件while(!feof(fpu)){ //读取用户目录文件信息for(int i=0;i<20;i++){if(fread(&UFD[i][0],sizeof(struct User)) //将文件的内容放入接点中MFD[i].next=(struct MasterFile*)&UFD[i][0];}}fclose(fpu); //关闭文件printf("\n文件已导入完毕!\n");Login(); //用户登录while(1) { //菜单操作menu();printf("请你选择操作:");scanf("%d",&sel);if(sel==0){ //保存文件信息if(shoudsave==1){getchar();printf("\n资料已经改动,是否将改动保存到文件中(y/n)?\n");scanf("%c",&ch);if(ch=='y'||ch=='Y')Save();}printf("\n你已经退出系统,再见!\n");break;}switch(sel){case 1:Dir();break; //列文件目录case 2:Create();break; //创建文件case 3:Delete();break; //删除文件case 4:Read();break; //读文件case 5:Write();break; //写文件default: printf("你输的选项有误,请重新输入!\n");break;}}system("PAUSE");return 0;}5.运行情况。

Linux实验4-Linux文件系统-目录和文件管理

Linux实验4-Linux文件系统-目录和文件管理

实验报告课程名称: Linux操作系统实验名称:实验4、Linux文件系统-目录和文件管理学生姓名:班级学号学院(系):指导教师:实验时间:年月日实验成绩:实验四、Linux文件系统-目录和文件管理一、实验要求(1)掌握目录和文件管理的操作命令;(2)掌握文件权限的修改方法。

(3)掌握文件链接的方法。

二、实验内容和实验步骤【操作要求1】查看Linux系统常见的目录。

【操作步骤】输入命令:ls,查看Linux系统常见的目录,截图如下:【操作要求2】显示当前目录下文件类型。

【操作步骤】输入命令:ls –l|more,截图如下:说明:●“-”:表示普通文件●“d”:表示目录文件●“c”:表示字符设备文件●“b”:表示块设备文件●“l”:表示符号链接文件【操作要求3】查看当前目录下所有文件类型【操作步骤】输入命令:file *,截图如下:【操作要求4】先创建两个新目录dir1和dir2,然后将dir2目录移到dir1目录中,最后删除dir2目录。

【操作步骤】(1)以普通用户user登陆字符界面,输入命令:pwd,当前目录为用户的主目录:/home/user。

(2)输入命令:ls –l,查看当前目录中的所有文件。

(3)创建两个目录,输入命令:mkdir dir{1,2}。

(4)输入命令:ls –l,确认两个目录创建成功。

以上4个步骤截图如下:(5)输入命令:mv dir2 dir1,将dir2目录移动到dir1目录。

(6)输入命令:cd dir1,切换dir1目录,再输入:ls命令,查看到dir2目录。

截图如下:(7)删除dir2目录,输入命令:rm –rf dir2。

【操作要求5】查找profile文件。

【操作步骤】(1)切换用户为超级用户,输入命令:su -,并输入密码。

(2)输入命令:find /etc -name profile, 截图如下:(3) 使用exit命令,退出超级用户身份。

【操作要求6】将/etc/profile文件中所有包含“HOSTNAME”的行存入f4文件,并修改f4文件的权限,让所有用户都可以读写。

实验4 Linux 文件权限管理实验

实验4 Linux 文件权限管理实验
对于文件/etc/shadow,该文件的属组(root)不可读、不可写,不可执行
第四部分:其他人权限
对于文件/etc/passwd,其他人可读、不可写,不可执行
对于文件/etc/shadow,其他人不可读、不可写,不可执行
5.尝试向没有写权限的文件写入数据,如图1-5:
图1-5
命令如下:
echo "test" >> /etc/passwd
写标记位:即文件(目录)可以被写,记为w
执行标记位:即文件可以被执行或目录可以被访问,记为x
因为系统有能力支持多用户,在每一方面系统都会做出谁能读、写和执行的资源权力限制。这些权限以三个八位元的方式储存着,一个是表示文件所属者,一个是表示文件所属群组,一个是表示其他人。这些数字以下列方式表示,文件(目录)的每种所属关系均从下表中取一种以组合表示:
真实用户ID (uid)是拥有或启动进程的用户UID。生效UID (euid)是进程以其身份运行的用户ID。
举例来说,passwd工具通常是以发起修改密码的用户身份启动,也就是说其进程的真实用户ID是那个用户的ID;但是,由于需要修改密码数据库,它会以root用户作为生效用户ID的身份运行。这样,普通的非特权用户就可以修改口令,而不是看到“Permission Denied”错误了。
重复上面的图1-11所示步骤,以普通帐号sample创建文件abcd;
重复上面的图1-12所示步骤,到以普通帐号test尝试删除/sample/abcd时,发现这次删除不了了,如图1-14:
图1-14
S位(suid / sgid)
S位分为SUID和SGID,分别作用于属主和属组的权限位。
uid和euid
Linux内核最初是为英特尔386微处理器设计的。现在Linux内核支持从个人电脑到大型主机甚至包括嵌入式系统在内的各种硬件设备。

实验四 文件管理实验

实验四 文件管理实验

实验四文件管理实验1.实验目的(1)了解文件权限。

(2)学会设置文件权限。

(3)学会管理文件权限。

2. 实验环境Linux操作系统的计算机3. 实验内容步骤1 检查系统核心首先检查你的Linux系统的核心是否有支持ACL的功能。

因为Linux系统并不是每一个版本的核心都有支持ACL的功能,而最简单的方法就是检查系统目前的核心能否支持:[root@mail /]$ cat /boot/config-kernel-version | grep -i ext3CONFIG_EXT3_FS=mCONFIG_EXT3_IDEX=yCONFIG_EXT3_FS_XA TTR_SHARING=yCONFIG_EXT3_FS_XA TTR_USER=yCONFIG_EXT3_FS_XA TTR_TRUSTED=yCONFIG_EXT3_FS_ACL=y上面命令中的kernel-version可在/boot子目录中查到,此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。

步骤2 设置ACL权限先用su 命令转换到root用户;再在root用户下建立一个子目录[root@mail root]#mkdir /home/fs1将fs1子目录的权限向所有用户开放[root@mail root]#chmod -R 777 /home/fs1让所有的用户都能增加文件到目录的权限ACL常常针对个别用户来进行设置,下面是例子:例如需要创建一个wang1用户,可以先用root身份登录系统,然后执行以下命令创建用户名和密码下述命令中adduser也可是useradd不是内部命令,相应的命令文件在/usr/sbin子目录下,执行时应在命令前加上路径名/usr/sbin:[root@mail root]#adduser wang1[root@mail root]#passwd wang1将wang1 建立的文件设置读写的权限给student:先用wang1登录系统,执行命令:[wang1@mail ]$ cd /home/fs1[wang1@mail fs1]# echo "Create by wang1" > wang1.txt而如下操作则可以让除了wang1有读写的权限外其他人没有读写wang1.txt的权限(root除外),[wang1@mail fs1]# chmod go-r wang1.txt[wang1@mail fs1]# ll wang1.txt-rw------- 1 wang1 wang1 17 Jul 14 22:11 wang1.txt先用student 登录系统后执行以下命令:[student@mail fs1]# cat wang1.txtcat : wang1.txt Permission denied接着用wang1登录系统,执行如下命令:[wang1@mail fs1]# setfacl -m u:student:rw wang1.txt这样就修改权限允许student 有这个文件的读写权限。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四Linux下的文件管理1. 实验目的⑴加深对文件,目录,文件系统等概念的理解。

⑵掌握Linux系统中文件和目录的基本操作方法;⑶了解在多用户环境下文件和目录权限的重要性。

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

2. 实验准备⑴阅读Linux文件系统的树形结构,掌握系统中各目录的用途。

⑵阅读树形结构中每个目录的内容,分析进程的创建过程。

3. 实验内容⑴使用pwd,cd,ls等命令浏览文件系统。

⑵使用cat,cp,mv,head,tail,rm等命令查看你的文件。

⑶使用ln命令进行文件的硬连接和符号连接。

软中断通信⑷使用find,grep命令进行文件查找和模式匹配。

⑸使用chmod命令修改文件的权限。

4. 实验步骤进入虚拟机,并在此平台上练习文件管理有关命令.一般在[root @ localhost xxxx]$提示符下键入有关命令。

【步骤1】浏览文件系统⑴运行pwd命令,确定你当前的工作目录。

利用以下命令显示当前工作目录的内容:ls –l运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)ls –ai使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。

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

Ls -d⑵使用cd命令,将工作目录改到根目录(/)上。

用相对路径将工作目录改到根目录。

Pwd 显示当前目录为 /home/mengqcCd .. 相对路径,返回上一级。

Pwd 反馈显示当前目录为 /homeCd .. 相对路径,再返回上一级。

Pwd 反馈显示当前目录为 /Cd /home/mengqc 恢复本身目录(也可以 cd↙).Pwd 反馈显示当前目录用绝对路径将工作目录改到根目录。

Cd / 用绝对路径返回根目录,Pwd 反馈显示当前目录为 /⑶使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。

Ls –l 列出根目录的内容Ls –l /bin 列出/bin目录的内容Ls –l /dev 列出/dev目录的内容(设备管理文件目录)Ls –l /home 列出/home目录的内容(一般用户文件目录)Ls –l /root 列出/root 目录的内容(超级用户文件目录)⑷使用ls-l命令列出/dev的内容。

Ls –l /dev 列出/dev目录的内容,文件太多显示多屏,各行第一个字符为b的表示块特别文件;各行第一个字符为c的表示字符特别文件。

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

Cd 返回当前用户本身目录。

Pwd⑹使用命令cd ../..,你将工作目录移到什麽地方?Cd ../.. 返回上两级目录Pwd 反馈 /说明:cd .. 返回上一级目录;cd ../.. 返回上两级目录;cd ../../.. 返回上三级目录。

【步骤2】查看你的文件⑴利用cd命令,将工作目录改到你的主目录上。

⑵将工作目录改到你的子目录subdir,然后运行命令:cd subdir 将工作目录改到你的子目录subdirpwddate > file1 将当前日期和时间存放到新建文件file1中。

Ls –l 反馈信息中有新文件 file1。

⑶使用cat命令查看file1文件的内容。

Cat file1 显示一行当前日期和时间的信息⑷利用man命令显示date命令的用法(说明文件):man date 该文件内容显示多页,空格翻页,回车换行,末页标志为[END]键入Q返回$。

⑸将date命令的用法(说明文件内容)附加到文件file1的后面:man date >> file1ls –l 注意file1文件长度为,较前变长。

⑹利用cat命令显示文件file1的内容。

Cat file1 文件内容很长,滚屏显示。

Cat file1 | more 分屏显示后,不难看出在原有的一行日期、时间信息后面,附加了很长的date用法说明。

⑺利用ls -l file1命令列出文件file1的较详细的信息。

ls -l file1 注意第二字段(链接记数)的值为“1”。

⑻利用ln file1../fa命令进行文件链接。

然后运行ls -l file1,查看显示的第二段的值发生了什麽变化。

Pwdln file1../fa 将当前目录下文件file1 链接到上一级目录中取名为fa .ls -l file1 显示前目录下文件file1的文件信息链接数为“2”,较前多了1。

cat ../fa 显示前目录下文件fa的内容与文件file1完全相同。

⑼现在想利用cat fa命令显示文件fa的内容,应该如何改动工作目录?Cd .. 返回上一级目录。

Cdt fa 在目录中直接显示fa文件内容。

⑽将工作目录移到你的主目录。

利用head命令显示文件file1前10行的内容:cd 返回主目录/home/xxxx;cd subdir 进入/home/xxxx/subdir;head file1 显示当前目录下文件file1前10行的内容。

⑾利用tail file1命令显示文件file1的最后10行(这是默认值)的内容。

tail file1⑿运行ls -l/bin命令显示目录的内容。

ls -l/bin 该目录下文件太多,滚屏。

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

ls -l/bin | more 空格翻页,回车换行,末页后返回$。

⒁利用cp file1 fa命令生成文件file1的副本。

然后利用ls -l命令查看工作目录的内容。

Pwd 返回当前目录cp file1 fals –l 观察两文件的链接数⒂将文件fa删除。

再利用ls -l命令查看工作目录内容。

Rm fa 将文件fa删除时提示:“rm:remore ‘fa’?”键入‘Y’即可删除。

Ls –l 少了文件fa只有file1.⒃运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中?mv file1 file_a 将文件file1改名为file_a 。

ls -l 可验证只有文件file_a。

⒄利用cat file*命令列出当前工作目录中以file开头的所有文件。

仅有file_a。

⒅运行cat file?命令,与上面结果相比有何差别?没有满足条件的文件。

如若运行cat file??方可显示file_a,可见统配符*与?的区别。

[步骤3].文件存取权限⑴存取权限UNIX系统对所有文件设置了存取权限。

存取权限让你确定谁可以对你的个人文件和目录行访问,以及可以进行什麽操作。

把所有用户分为三类:——文件主(user),即文件的属主。

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

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

对一个文件的存取权限分为三种:——读(r)——写(w)——执行(x)一组存取权限以及相应的文件类型统称为文件模式。

如:rw-r--r--表示文件主有读和写的权限,组用户和其他用户只有读权限。

⑵文件存取权限读权限(r)允许指定的用户可以打开文件并阅读其内容。

如cat,more,file和cp命令等。

写权限(w)允许指定的用户可以打开文件并修改其内容。

如vi,mail,cp等。

执行权限(x)允许指定的用户运行(即执行)一个二进制文件文件或者把一个shell脚文件当做命令来运行。

当你通过输入命令名来调用命令时,你必须具有该命令文件的执行限。

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

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

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

⑷修改文件权限文件主或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。

练习:mv file_a file1 恢复文件file1;ls –l 显示文件file1的权限为 rw-rw-r—;chmod g-r,o-r file1 取消同组用户g和其他用户o 对文件可读的权利;ls –l 显示文件file1的权限为 rw--w--—,变为同组用户和其他用户均不可读。

chmod g+r,o+r file1 恢复同组用户g和其他用户o 对文件可读的权利;ls –l 显示文件file1的权限为 rw-rw-r—,变为同组用户和其他用户均不可读。

相关文档
最新文档