实验四 文件管理
文件管理的实验报告(3篇)

第1篇一、实验目的1. 理解文件管理的概念和重要性。
2. 掌握文件系统的基本结构和工作原理。
3. 学会使用文件管理工具进行文件操作。
4. 了解文件系统优化和故障处理方法。
二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows资源管理器3. 实验数据:实验过程中所创建和操作的文件、文件夹三、实验内容1. 文件系统的基本概念(1)文件:文件是存储在存储设备上的数据集合,具有特定的文件名和文件属性。
(2)文件夹:文件夹是用于组织和管理文件的容器,可以包含多个文件和子文件夹。
(3)文件系统:文件系统是操作系统用于管理存储设备上的文件和文件夹的机制。
2. 文件系统的基本操作(1)创建文件:在资源管理器中,右键单击目标位置,选择“新建”->“文本文档”或“新建”->“文件夹”等操作创建文件或文件夹。
(2)重命名文件:选中文件或文件夹,右键单击,选择“重命名”进行修改。
(3)移动文件:选中文件或文件夹,右键单击,选择“剪切”或“复制”,然后在目标位置粘贴。
(4)复制文件:选中文件或文件夹,右键单击,选择“复制”,然后在目标位置粘贴。
(5)删除文件:选中文件或文件夹,右键单击,选择“删除”。
(6)恢复文件:在回收站中,右键单击已删除的文件或文件夹,选择“还原”。
3. 文件系统的目录结构(1)单级目录结构:所有文件和文件夹都存储在一个根目录下,易于管理,但存在文件名冲突、文件查找效率低等问题。
(2)多级目录结构:将文件和文件夹组织成树状结构,便于管理和查找,解决了单级目录结构的缺点。
4. 文件系统优化(1)定期清理磁盘碎片:磁盘碎片会影响文件读写速度,可以通过磁盘清理工具或系统自带的磁盘碎片整理程序进行优化。
(2)合理分配磁盘空间:根据实际需求,将磁盘空间分配给不同分区,提高磁盘利用率。
(3)限制文件权限:设置文件和文件夹的访问权限,保护数据安全。
5. 文件系统故障处理(1)磁盘损坏:使用数据恢复软件尝试恢复数据,或更换磁盘。
国开 操作系统 实验4:文件管理实验

实验4:文件管理实验
一、目的:
1、加深对文件、目录、文件系统等概念的理解。
2、掌握Linux 文件系统的目录结构。
3、掌握有关Linux 文件系统操作的常用命令。
4、了解有关文件安全性方面的知识。
二、条件:
需要一个Linux的环境
1、在Win10系统启用Linux子系统
2、在Win10应用商店安装Ubuntu应用
3、
三、过程:
1、浏览文件系统
用到pwd、ls、mkdir、cd命令
不带参数的cd命令,工作目录回到了用户的默认目录
cd ../.. 执行后,工作目录回到了/根目录
2、查看文件
用到data、head、tail、ls、man、date、cp、mv、rm命令
man date
建立链接后第2个字段从1变成2
3、文件查找和目录
用到了find、grep命令
4、修改文件存取权限
chmod命令
四、总结:Linux是一个多用户的现代操作系统,提供了丰富和强大的文件管理的命令。
掌握这些命令对于我们深入Linux学习是必需的。
实验四 文件管理实验

实验四文件管理实验◆实验名称:文件管理实验◆仪器、设备:计算机◆参考资料:操作系统实验指导书◆实验目的:设计一个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等命令的简单的文件系统。
文件管理实验报告答案(3篇)

第1篇一、实验目的1. 理解文件管理的概念和作用。
2. 掌握文件系统的基本操作,如创建、删除、复制、移动等。
3. 学会使用文件管理工具,提高文件管理效率。
二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows资源管理器3. 实验设备:计算机三、实验内容1. 文件系统的基本概念文件系统是操作系统用来组织和管理文件的一种机制。
它主要包括以下内容:(1)文件:数据的基本单位,可以存储信息、程序等。
(2)目录:文件系统的组织单位,用于存放文件和子目录。
(3)路径:文件在文件系统中的位置,由目录名和文件名组成。
2. 文件系统的基本操作(1)创建文件:在指定目录下创建一个新的文件。
操作步骤:1)打开Windows资源管理器;2)找到要创建文件的目录;3)右键单击空白区域,选择“新建”;4)选择文件类型,如文本文档、Word文档等;5)输入文件名,点击“确定”。
(2)删除文件:删除指定的文件。
操作步骤:1)打开Windows资源管理器;2)找到要删除的文件;3)右键单击文件,选择“删除”;4)在弹出的确认对话框中点击“是”。
(3)复制文件:将文件从一个目录复制到另一个目录。
操作步骤:1)打开Windows资源管理器;2)找到要复制的文件;3)右键单击文件,选择“复制”;4)打开目标目录,右键单击空白区域,选择“粘贴”。
(4)移动文件:将文件从一个目录移动到另一个目录。
操作步骤:1)打开Windows资源管理器;2)找到要移动的文件;3)右键单击文件,选择“剪切”;4)打开目标目录,右键单击空白区域,选择“粘贴”。
3. 文件管理工具的使用(1)文件搜索:在文件系统中快速找到所需的文件。
操作步骤:1)打开Windows资源管理器;2)在地址栏输入文件名或部分内容;3)按Enter键或点击搜索按钮。
(2)文件预览:查看文件内容,如图片、文档等。
操作步骤:1)打开Windows资源管理器;2)找到要预览的文件;3)双击文件,系统会自动打开相应的应用程序进行预览。
实验四 磁盘和文件系统管理心得

实验四磁盘和文件系统管理心得前言实验四主要涉及磁盘和文件系统的管理,通过对磁盘分区、文件系统格式化、文件的创建、删除和修改等操作,我们能够更好地理解和掌握磁盘和文件系统的相关概念和原理。
本文将从以下几个方面对实验四的心得进行全面、详细、完整且深入地探讨。
磁盘分区的原理与方法磁盘分区是指将一个物理硬盘分成多个逻辑区域的操作。
通过对磁盘进行合理分区,可以充分利用磁盘空间,并为不同用途的数据提供不同的存储空间。
磁盘分区有两种常见的方法:主引导记录(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篇)

第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、查看建立符号连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。
实验四文件系统实验

实验四文件系统实验一. 目的要求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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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—,变为同组用户和其他用户均不可读。