操作系统实验5文件系统:Linux文件管理制度

合集下载

《Linux系统管理》文件权限管理实验报告

《Linux系统管理》文件权限管理实验报告

《Linux系统管理》文件权限管理实验报告一、实验目的:1.了解和说下创建并使用脚本的步骤2.掌握shell的变量及特殊字符3.掌握shell的输入输出命令4.掌握常用shell程序逻辑结构语句二、实验内容:1.创建一个简单的列出目录和日期等shell脚本并运行之。

2.shell的输入输出重定向完成以下题目:(1)创建一个mytest文件,然后查看mytest和youtest文件,并观察执行结果。

(2)查看mytest和youtest文件过程中的正确信息输出定向到mytestout文件中,错误信息显示在屏幕,并查看定向文件。

(3)查看mytest和youtest文件过程中正确信息输出定向附加到mytestout,将错误信息输出定向到error,并查看定向文件。

(4)查看mytest和youtest文件过程中正确信息和错误信息混合输出到message文件中,并查看定向文件。

(5)查看mytest和youtest文件过程中正确信息和错误信息混合输出到/dev/null设备文件中。

(6)使用输入重定向把mytestout文件导入给wc -l命令,统计一下文件中的内容行数。

3.用shell语言编制shell程序,该程序在用户输入(read命令)年、月之后,自动打印输出(echo命令)该年该月的日历。

4.shell变量操作(1)编写一个shell脚本,并使它执行时显示/bin目录下所有以b开头的文件和目录并按ASCII码由大到小排序保存到temp文件中。

(2)编写一个shell脚本文件并执行,其中包含date和who 命令。

(3)编写一个简单的shell脚本文件,把你的名字赋给myname 的shell变量并输出改变的内容。

(4)查看系统的环境变量,并保存到文件myv中。

(5)编写一个shell脚本文件,从键盘读取数据保存到myvn 变量中并输出该变量。

(6)编写以下脚本程序带多个命令行参数运行并说明原因。

操作系统实验

操作系统实验

操作系统实验操作系统实验是计算机科学与技术领域非常重要的一门实验课程。

通过操作系统实验,学生可以深入了解操作系统的基本原理和实践技巧,掌握操作系统的设计和开发方法。

本文将介绍操作系统实验的一般内容和实验室环境要求,并详细说明一些常见的操作系统实验内容。

一、实验内容1. 实验环境搭建:操作系统实验通常在实验室中进行。

为了完成实验,学生需要搭建一个操作系统实验环境。

实验环境通常由一个或多个计算机节点组成,每个计算机节点需要安装操作系统实验所需要的软件和驱动程序。

2. 操作系统整体结构分析:学生首先需要通过文献研究和课堂学习,了解操作系统的整体结构和基本原理。

在实验中,学生需要分析和理解操作系统的各个模块之间的功能和相互关系。

3. 进程管理实验:进程是操作系统中最基本的运行单位。

在这个实验中,学生可以通过编写程序并使用系统调用来实现进程的创建、销毁和调度。

学生需要熟悉进程状态转换和调度算法,理解进程间通信和同步机制。

4. 内存管理实验:内存管理是操作系统中非常重要的一个模块。

学生需要实现虚拟内存管理、页面置换算法以及内存分配和回收策略。

通过这个实验,学生可以深入了解虚拟内存管理的原理和实际应用。

5. 文件系统实验:文件系统是操作系统中负责管理文件和目录的模块。

在这个实验中,学生需要实现基本的文件系统功能,如文件的创建、读取和修改。

学生还可以实现进程间的文件共享和保护机制。

6. 设备管理实验:设备管理是操作系统中与硬件设备交互的一个重要模块。

在这个实验中,学生需要实现设备的初始化、打开和关闭功能。

学生还可以实现设备驱动程序,完成对硬件设备的控制。

二、实验室环境要求1. 计算机硬件:实验室需要配备一定数量的计算机节点。

每个计算机节点需要具备足够的计算能力和内存容量,以满足操作系统实验的要求。

2. 操作系统软件:实验室中的计算机节点需要安装操作系统软件,通常使用Linux或者Windows操作系统。

此外,还需要安装相关的开发工具和编程语言环境。

实验Linux文件和目录操作详解

实验Linux文件和目录操作详解

实验Linux文件和目录操作详解在Linux系统下,文件和目录是操作系统中的基本组成部分。

对于初学者来说,熟悉Linux文件和目录的操作是非常重要的。

本篇文档将详细介绍Linux系统中的文件和目录操作。

1. 创建文件和目录在Linux系统中,可以使用touch命令创建一个空文件,例如:$ touch myfile.txt使用mkdir命令可以创建一个新的目录,例如:$ mkdir mydir如果需要一次性创建多级目录,可以使用mkdir命令的-p 选项,例如:$ mkdir -p mydir1/mydir2/mydir32. 查看文件和目录使用ls命令可以查看当前目录中的文件和目录列表,例如:$ lsmyfile.txt mydir如果需要显示隐藏文件,可以使用ls命令的-a选项,例如:$ ls -a. .. .hiddenfile myfile.txt mydir使用cd命令可以切换当前目录,例如:$ cd mydir使用pwd命令可以查看当前所在的目录路径,例如:$ pwd/home/user/mydir使用cat命令可以查看文件的内容,例如:$ cat myfile.txtHello, this is my file.3. 复制、移动和重命名文件和目录使用cp命令可以复制文件或目录,例如:$ cp myfile.txt myfile_copy.txt$ cp -r mydir mydir_copy使用mv命令可以移动文件或目录,例如:$ mv myfile.txt /tmp/myfile.txt$ mv mydir /tmp/mydir使用mv命令还可以重命名文件或目录,例如:$ mv myfile.txt newname.txt4. 删除文件和目录使用rm命令可以删除文件,例如:$ rm myfile.txt使用rm命令的-r选项可以递归删除目录及其内容,例如:$ rm -r mydir5. 修改文件和目录的权限使用chmod命令可以修改文件或目录的权限,例如:$ chmod 755 myfile.txt$ chmod 755 mydir其中,755是权限的数字表示形式,表示文件所有者具有读、写、执行权限,其他用户具有读、执行权限。

操作系统原理及应用(Linux)第5章 文件管理

操作系统原理及应用(Linux)第5章 文件管理
直 接 块
Addr[11]
Addr[12] 一次间接

Addr[13] 二次间接
Addr[14] 三次间接

物理块
… …
… …
混合索引表
假设1个磁盘块4KB,一个索引表项占4B, 直接索引表引出磁盘块 12个
12*4KB=48KB 一级索引表引出文件磁盘块的数量
4KB/4B=1K个 支持的文件长度 1K*4KB=4MB 二级索引表引出文件磁盘块的数量1K*1K 支持的文件长度 1K*1K*4KB=4GB 三级索引表引出文件磁盘块的数量1K*1K*1K 支持的文件长度 >1K*1K*1K*4KB=4TB
…… ……
666 7771
文 索引表指针
件 说 明
索引表
逻辑 块号
0
1 2 3
物理 块号
26
文 件
索引表指针


索引表
逻辑 块号
0
1 2 3
4
物理 块号
NULL
27
优点:既能方便迅速地实现随机存取,又能满足文件动态 增长的需要。 缺点:增加了索引表带来的存储空间开销。
2.多级索引(类似多级页表)
1.数据项 数据项是描述一个对象的某种属性的字符集,是数据组织中可以命名的最 小逻辑数据单位。 2.记录 记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。 3.文件 文件是由创建者定义的、具有文件名的一组相关信息的集合。
4
5.1.2 文件系统
文件系统是操作系统中对文件进行管理和操作的软件机构与数据的 集合,即文件管理系统。 1.文件系统的需解决的问题 (1)有效地分配存储器的存储空间。 (2)提供一种组织数据的方法。数据在辅存设备上的分布构成了文件的 物理结构,实现了“按名存取”的功能。 (3)提供合适的存取方法。 (4)提供一组服务,以执行所需要的操作。这些操作包括创建文件、撤 消文件、组织文件、读文件、写文件、传输文件和控制文件的访问权限 等。

《操作系统》课程实验内容和实验要求

《操作系统》课程实验内容和实验要求

实验内容和实验要求实验1:安装Linux系统(4学时)目的:1.学会在操作系统安装之前,根据硬件配置情况,制订安装计划。

2.学会在安装多操作系统前,利用硬盘分区工具(如PQMagic)为Linux准备分区。

3.学会Linux操作系统的安装步骤和简单配置方法。

4.学会Linux系统的启动、关闭步骤,初步熟悉Linux系统的用户界面。

内容:1.安装并使用硬盘分区工具(如PQMagic),为Linux准备好分区。

2.安装Linux系统(如红旗Linux桌面版)。

3.配置Linux系统运行环境。

4.正确地启动、关闭系统。

5.对图形界面进行一般操作。

要求:1.制订安装计划。

2.如果在机器上已安装了Windows系统,而且没有给Linux预备硬盘分区,则安装硬盘分区工具(如PQMagic),运行它,为Linux划分出一块“未分配”分区。

3.在光驱中放入Linux系统安装盘,启动系统。

按照屏幕提示,选择/输入相关参数,启动安装过程。

4.安装成功后,退出系统,取出安装盘。

重新开机,登录Linux系统。

5.对Linux系统进行配置,如显示设备、打印机等。

6.利用鼠标对图形界面进行操作。

说明:1.本实验应在教师的授权和指导下进行,不可擅自操作,否则可能造成原有系统被破坏。

2.如条件不允许每个学生亲自安装,可采用分组进行安装或课堂演示安装的方式。

实验2:Linux 应用及shell编程(4学时)目的:1.掌握Linux一般命令格式和常用命令。

2.学会使用vi编辑器建立、编辑文本文件。

3.了解shell的作用和主要分类。

4.学会bash脚本的建立和执行方式。

5.理解bash的基本语法。

6.学会编写简单的shell脚本。

内容:1.正确地登录和退出系统。

2.熟悉使用date,cal等常用命令。

3.进入和退出vi。

利用文本插入方式建立一个文件。

4.学会用gcc编译器编译C程序。

5.建立shell脚本并执行它。

6.学会使用shell变量和位置参数、环境变量。

linux实训指导书

linux实训指导书

《网络操作系统》综合实训指导书院系:信息科学与工程学院班级:07网络教师:温静静实验一、Linux的基本操作和常用命令的使用一、实验目的1.学会不同Linux用户登录的方法。

2.掌握常用Linux命令的使用方法。

3.了解Linux命令中参数选项的用法和作用。

二、实验工具与设备1.已安装Linux操作系统的计算机。

2.或装有Windows操作系统的计算机并通过网络与Linux服务器连接。

三、实验内容和步骤1.登录系统以适当的用户名在Windows 95/98下远程登录Linux主机,或在装有Linux系统的计算机中登录Linux系统。

2.文件操作命令(1)查看文件与目录ls(2)显示文件内容命令(cat)(3)文件复制命令(cp)(4)文件改名命令(mv)(5)删除文件命令(rm)3.目录操作命令的使用(1)改变当前目录命令(cd)和显示当前目录命令(pwd)(2)建立子目录命令(mkdir)在用户目录下创建如图所示的目录结构。

图创建的目录结构(3)删除子目录命令(rmdir)4.用户管理命令的使用(1)登录命令(login)和注销命令(logout)提示:可以直接用Ctrl+d退出或注销用户。

(2)添加和更改用户命令①添加用户②转换用户(3)修改用户密码命令(passwd)(4)关机命令(shutdown,终止或重启系统的命令)命令格式:shutdown [-r] [-h] [-c] [-k] [[+]时间]5.其他操作命令的使用(1)链接命令(ln)(2)查看用户命令who命令:查看当前正在登录的其他用户的命令。

whoami命令:查看当前正在使用(登录)的用户名。

(3)查看命令帮助信息命令(man)man命令:联机帮助命令。

用于查询命令和程序的使用方法和参数。

四.实验要求:1.写出实验报告2.练习题(1)熟悉Linux命令的功能和使用。

(2)将图1-5所示的目录结构变为图1-6所示的目录结构。

linux实验5_文件管理

linux实验5_文件管理

实验二Linux指令入门-文件管理目录实验二Linux指令入门-文件管理 (1)1实验环境 (2)2实验内容 (2)2.1磁盘管理命令 (2)2.1.1 cat (2)2.1.2 cmp (3)2.1.3 diff (4)2.1.4 file (6)2.1.5 find (7)3实验小节 (8)1实验环境本实验根据移动云平台的《Linux指令入门-系统管理》进行,为了直观展示linux命令对文件的操作,部分实验使用个人电脑双系统的linux环境,这样可以直接打开文件观察。

由于没有使用docker或虚拟机来备份恢复系统,所以分盘等操作会影响linux系统的使用,因此部分实验直接使用移动云的ECS实例。

2实验内容2.1磁盘管理命令2.1.1 catcat命令描述:该命令用于连接文件并打印到标准输出设备上。

cat命令语法:cat [参数] [文件名]参数说明:cat命令使用示例:a.执行如下命令,将一个自增序列写入test1.txt文件中。

b.执行如下命令,查看文件test1.txt内容。

c.执行如下命令,将test1.txt的文件内容加上行号后输入到test2.txt文件。

d.执行如下命令,查看文件test2.txt内容e.执行如下命令,将test1.txt文件内容清空。

f.执行如下命令,查看文件test1.txt内容。

2.1.2 cmpcmp命令描述:该命令用于比较两个文件是否有差异。

当相互比较的两个文件完全一样时,该指令不会显示任何信息。

否则会标示出第一个不同之处的字符和列数编号。

当不指定任何文件名称,或文件名为"-",则cmp指令会从标准输入设备读取数据。

cmp命令语法:cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]参数说明:cmp命令使用示例:a.执行如下命令,将一个自增序列1-5写入test1.txt文件中。

b.执行如下命令,比较test1.txt文件和test2.txt文件是否相同。

《实用操作系统》实验报告五linux设备管理

《实用操作系统》实验报告五linux设备管理

《实用操作系统》实验报告实验报告: 5 实验项目名称:设备管理班级:学号:姓名:地点:时间:2013 年11 月13 日一、实验内容1、添加硬盘,创建二个主分区、一个扩展分区,二个逻辑分区注意:ide、scsi 提示:分区、格式化、挂载(fdisk,mkfs,mount)2、查看常见的设备文件有哪些?(ls /dev )常见的设备文件:/dev/hd* IDE接口的硬盘(IDE接口的设备) /dev/sd* SCSI/USB设备/dev/cua* 串口设备/dev/lp* 并口设备/dev/tty* 终端设备/dev/consol 控制台设备/dev/eth* 以太网设备/dev/cdrom IDE光驱/dev/fd* 软驱/dev/audio 音频设备/dev/scd SCSI的光驱/dev/ppp PPP设备/dev/isdn* ISDN设备3、挂载光盘,查看光盘内容创建挂载点要求:以本人姓名缩写为目录mkdir /目录/设备挂载mount 空格源设备空格挂载点4、显示管理System-config-display5、声卡管理System-config-soundcard6、打印机管理System-config-printer7、网卡管理System-config-network二、实验步骤及结果1.添加硬盘,创建分区;在启动虚拟机前,在工具栏中点击“虚拟机”,找到“设置”选项,在左面的硬件中找到硬盘,进行硬盘设备添加,这里有IDE和SCSI两种硬盘类型可供选择添加。

完成硬盘添加后即可启动虚拟机进入linux系统。

在这我添加了容量相同的硬盘设备类型各一;打开终端,在命令框输入“fdisk -l”可以查看添加硬盘后,当前磁盘信息;在命令框中输入“fdisk /dev/had”开始对磁盘进行分区命令操作。

在这我以刚添加的IDE类型硬盘为例进行分区实验,其标识符是had。

其中比实验要求多划分了主分区,一共有两个主分区,一个扩展区,将扩展区又分为两个逻辑分区;根据提示,按字母n创建一个分区,之后按p建立一个主分区;给新建的主分区定义一个编号为1,主分区柱面始值默认为1m回车后给定一个分区柱面终值为500m;接着新建第二个主分区依次按n,p,定义第二个主分区编号为2,起始值为501m,终止值为1000m;接下来按字母n,e新建扩展分区,定义编号为3,留下剩余所有磁盘空间;起始值为1001m,终止值为10402m;之后开始在扩展分区中划分创建逻辑分区,按字母m,n后,根据提示按字母l,这里不需要再给分区定义编号,在linux中,逻辑分区的编号直接从5开始计,默认自前向后;给第一个逻辑分区空间柱面初始值,默认为1001m,终止值定义为5000m;创建第二个逻辑分区,将扩展分区中剩下的空间直接留给最后一个逻辑分区,初始值为5001,终止值为10402m;分区完成后,按w保存退出,输入命令“fdisk –l”可以查看分区后磁盘信息;这里以格式化主分区hda1为例,在命令框中输入“mkfs /dev/hda1”结果如下;创建挂载点,新建目录输入命令“mkdir /mnt/gxa”;将磁盘第一个主分区挂载到/mnt/gxa目录下,输入命令“mount /dev/hda1 /mnt/gxa”,输入命令“ls /mnt/gxa”查看,在目录下创建文件输入命令“touch /mnt/gxa/gxa.txt”,同样查看如下;使用命令输入“umount /mnt/gxa”即可完成卸载;2.输入命令“ls /dev”查看设备文件,结果如下;3.挂载光盘,查看光盘内容;挂载光盘之前,如同磁盘挂在一样,先在设置中找到硬件中的“CD/DVD(IDE)”,选中右边使用镜像文件选项,找到镜像光盘文件,上侧勾选“已连接”,点击确定;在命令框中创建目录输入“mkdir /mnt/gxa”命令,将光盘挂载到该目录下输入命令“mount /dev/cdrom /mnt/gxa”,结果显示在桌面;类似磁盘卸载,输入命令“umount /mnt/gxa”,将光盘从目录下卸载,结果显示在桌面;4.显示管理,输入命令“System-config-display”得到结果如下,即可手动进行设置管理;5.声卡管理,输入命令“System-config-soundcard”得到结果如下即可设置;6.打印机管理,输入命令“System-config-printer”即可对打印机进行管理;7.网卡管理,输入命令“System-config-network”得到结果如下,即可手动进行操作管理;三、实验分析与讨论1.在实验刚开始对硬盘的类型理解还不透彻,其中关于IDE与SCSI设备在系统中设备标识符还没有完全弄懂,所以导致在机房实验时,对挂上去的三个硬盘标识的had,sda,sdb以及sda1和sda2之间关系没有摸透,也耽误分区的效果。

操作系统实验报告5——目录与文件管理

操作系统实验报告5——目录与文件管理
《linux下文件管理》实验报告
实验序号: 05 实验项目名称: linux下文件管理
学 号
2009406012
姓 名
吴松娇
Hale Waihona Puke 专业、班09计本(1)实验地点
32404
指导教师
汤敏丽
时间
2012.6.6
一、实验目的
1.加深对操作系统文件管理功能的理解。
2.熟练掌握linux下文件管理命令。
二、实验环境
装有linux系统的计算机。
(4)再次输入命令“ls -1”,确认两个目录和一个文件是否成功创建。
(5)输入命令“mv–f dir2 dir1”,将dir2目录移动到dirl目录;输入命令“mv–f cs.txt dir1”,将cs.txt目录移动到dirl目录。
(6)输入命令“cd dirl”,切换到dirl目录,再输入“ls”命令,查看到dir2目录。
13、分屏显示文件内容:more例子:ls | more /说明:每次分屏地查看由ls命令显示的/下子目录清单。
14、磁盘操作工具:du例子:du -sh .说明:列出当前目录下的所有子目录和文件占用的空间。
15、查找文件所在目录命令:which例子:which rm说明:查找rm命令保存在哪个目录。
(7)删除dir2目录,输入命令“rmdir dir2。”
2.文件操作
1.创建命令: touch例子: touch skxiao.xml说明:创建文件skxiao.xml
2.删除命令: rm例子: rm -r /home/shenkxiao/说明:删除/home/shenkxiao/下的所有文件
3.复制命令: cp例子: cp skxiao.xml /home/shenkxiao说明:将当前目录下的skxiao.xml文件拷贝到/home/shenkxiao目录下

实验文件权限管理

实验文件权限管理

实验文件权限管理 Document number【SA80SAB-SAA9SYT-SAATC-SA6UT-SA18】实训项目5文件权限管理一、实训目的●掌握利用chmod及chgrp等命令实现Linux文件权限管理。

●掌握磁盘限额的实现方法。

二、项目背景某公司有60个员工,分别在5个部门工作,每个人工作内容不同。

需要在服务器上为每个人创建不同的账号,把相同部门的用户放在一个组中,每个用户都有自己的工作目录。

并且需要根据工作性质给每个部门和每个用户在服务器上的可用空间进行限制。

假设有用户user1,请设置user1对/dev/sdb1分区的磁盘限额,将user1对blocks的soft设置为5000,hard设置为10000;inodes的soft设置为5000,hard设置为10000。

三、实训内容练习chmod、chgrp等命令的使用,练习在Linux下实现磁盘限额的方法。

四、实训步骤子项目1.设置文件权限●在用户user1主目录下创建目录test,进入test目录创建空文件file1。

并以长格形式显示文件信息,注意文件的权限和所属用户和组。

●对文件file1设置权限,使其他用户可以对此文件进行写操作。

并查看设置结果。

●取消同组用户对此文件的读取权限。

查看设置结果。

●用数字形式为文件file1设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行的权限。

设置完成后查看设置结果。

●用数字形式更改文件file1的权限,使所有者只能读取此文件,其他任何用户都没有权限。

查看设置结果。

●为其他用户添加写权限。

查看设置结果。

●回到上层目录,查看test的权限。

●为其他用户添加对此目录的写权限。

子项目2.改变文件的所有者●查看目录test及其中文件的所属用户和组。

●把目录test及其下的所有文件的所有者改成bin,所属组改成daemon。

查看设置结果。

Chown –R bin:daemon test如把所组改回:chgrp user1 test如把所主改回chgrp –R user1 test●删除目录test及其下的文件。

操作系统课内实验报告

操作系统课内实验报告

.. 西安交通大学实验报告操作系统实验报告2130505133计算机36班操作系统实验实验一:用户接口实验实验目的1)理解面向操作命令的接口Shell。

2)学会简单的shell编码。

3)理解操作系统调用的运行机制。

4)掌握创建系统调用的方法。

操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。

用户接口实验也因此而分为两大部分。

首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell 编程方法。

然后通过想Linux内核添加一个自己设计的系统调用,来理解系统调用的实现方法和运行机制。

在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。

实验内容1)控制台命令接口实验该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell编程。

➢查看bash版本。

在shell 提示符下输入:$echo $BASH_VERSION我们的版本是4.3.42(1)-release(2)建立bash 脚本,输出Hello word在编辑器中输入以下内容#!/bin/bashecho Hello World!执行脚本使用指令:$./script➢编写bash脚本,统计/my目录下c语言文件的个数通过bash 脚本,可以有多种方式实现这个功能,而使用函数是其中个一个选择。

在使用函数之前,必须先定义函数。

进入自己的工作目录,编写名为count 的文件脚本程序:#! /bin/bashfunction count{echo –n " Number of matches for $1: " #接收程序的第一个参数ls $1|wc –l #对子程序的第一个参数所在的目录进行操作}将count 文件复制到当前目录下,然后在当前目录下建立文件夹,在my 目录下建立几个c 文件,以便用来进行测试2)系统调用实验该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。

操作系统实验5文件系统:Linux文件管理

操作系统实验5文件系统:Linux文件管理

(1)掌握Linux 提供的文件系统调用的使用方法;
(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。

(1) 利用Linux 有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********
0. 退出
1. 创建新文件
2. 写文件
3. 读文件
4. 复制文件
5. 修改文件权限
6. 查看文件权限
7. 创建子目录
8. 删除子目录
9. 改变当前目录到指定目录
10. 链接操作
通过这次实验掌握Linux 提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

LINUX操作系统实验报告..

LINUX操作系统实验报告..

实验一 LINUX操作基础实验目的:1、掌握字符界面下关机及重启的命令。

2、掌握LINUX下获取帮助信息的命令:man、help。

3、掌握LINUX中常用的简单命令:pwd、date、who、cal、uname、wc、clear等实验内容:1、使用shutdown命令设定在30分钟之后关闭计算机。

2、使用init命令实现图形界面到字符界面及字符界面到图形界面的切换。

3、分别使用命令man和help查看ls命令的帮助文档。

4、使用命令将当前计算机的主机名显示为IT。

5、使用命令显示公元2008年8月的月历。

6、显示当前计算机上的日期和时间。

7、统计文件/etc/passwd的行数、字符数和单词数。

实验步骤及结果:1、2、3、4、5、6、7、实验二 LINUX系统的文件操作命令实验目的:1、掌握LINUX下文件和目录操作命令:cd、ls、mkdir、rmdir、rm。

2、掌握LINUX下文件信息显示命令:cat、more。

3、掌握LINUX下文件复制、删除及移动命令:cp、mv。

4、掌握LINUX的文件检索、排序命令:grep、sort。

实验内容:1、使用命令切换到/etc目录,并显示当前工作目录路径。

2、使用命令显示/root目录下所有文件目录的详细信息,包括隐藏文件。

3、使用命令创建目录/root/linux,然后删除该目录。

4、使用命令cat用输出重定向在/root目录下创建文件abc,文件内容为“Hello,Linux!”,并查看该文件的内容。

5、使用命令创建具有默认权限为744的目录/root/ak,然后将/root/abc文件复制到该目录中,最后将该目录及其目录下的文件一起删除。

6、查看文件/etc/passwd的前3行内容。

7、创建文件file1,文件内容有3行,分别为a、c、b,排序该文件数据,显示在屏幕上。

8、使用命令显示/etc/passwd文件的文件类型。

9、在文件/etc/passwd中搜索匹配字符“root”。

国开电大 操作系统 实验4:文件管理实验报告

国开电大 操作系统 实验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的目录结构,了解各目录存放与系统相关的文件。

4.使用cat、more、head、tail等命令显示/etc/inittab文件内容。

5.使用grep命令在/etc/inittab文件中查询“initdefault”字符串。

6.使用find命令查找/目录下所有以main开头的文件。

7.使用cp命令将/etc目录下的inittab文件拷贝到/root目录下。

8.使用sort和uniq命令对/root目录下的inittab文件排序后输出其结果。

9.统计inittab文件的字节数、行数、字数。

10.用mkdir命令在/root目录下创建一个test目录。

11.用cp命令将/etc目录及其下所有内容复制到test目录下。

12.使用cd和ls查看/root/test/etc下的内容。

13.将test目录改名为test2.14.删除test2.实验总结:通过本次实验,我深入了解了文件管理命令的使用,掌握了Linux文件系统的目录结构和常用命令,同时也了解了文件的安全性方面的知识。

linux操作系统实验报告

linux操作系统实验报告

linux操作系统实验报告Linux操作系统实验报告一、引言在计算机科学领域,操作系统是一种非常重要的软件,它负责管理计算机硬件和软件资源,提供用户与计算机之间的接口。

Linux操作系统是一种开源的、免费的操作系统,它具有高度的可定制性和稳定性,因此在科研、教育和商业领域都得到广泛应用。

本实验报告将介绍我们在课程中对Linux操作系统的实验内容和实验结果。

二、实验目的本次实验的目的是让我们学生通过亲自操作和实践,深入了解Linux操作系统的特点、功能和使用方法。

通过实验,我们将学会如何安装Linux操作系统、使用Linux命令行界面、管理文件和目录、配置网络和安全等。

三、实验环境我们使用的实验环境是一台配置较高的个人计算机,该计算机上安装了虚拟机软件。

我们选择了一款常用的虚拟机软件VirtualBox,并在其上安装了Ubuntu Linux操作系统。

四、实验内容1. Linux操作系统安装我们首先学习了如何在虚拟机上安装Linux操作系统。

通过下载Ubuntu的镜像文件,并创建虚拟机实例,我们成功地完成了Linux操作系统的安装。

在安装过程中,我们需要设置用户名、密码和网络配置等信息。

2. Linux命令行界面Linux操作系统的命令行界面是其最基本的用户接口。

我们学习了一些常用的Linux命令,如cd、ls、mkdir、rm等,用于管理文件和目录。

我们还学习了如何使用管道和重定向符号来处理命令的输入和输出。

3. 文件和目录管理Linux操作系统以文件和目录的形式来组织和管理数据。

我们学习了如何创建、复制、移动和删除文件和目录。

我们还学习了如何修改文件和目录的权限和所有权。

4. 网络配置在现代计算机网络中,网络配置是非常重要的一部分。

我们学习了如何配置Linux操作系统的网络设置,包括IP地址、子网掩码、网关等。

我们还学习了如何使用ping命令测试网络连通性。

5. 安全配置在网络环境中,安全性是一个重要的考虑因素。

实验5 Linux文件管理

实验5 Linux文件管理

实验5 Linux文件管理一、实验目的1. 掌握Linux文件系统的基本原理、结构和实现方法2. 掌握Linux文件系统中文件的建立、打开、读/写、执行、属性等系统调用的使用3. 学会设计简单的文件系统并实现一组操作4. 通过实验学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握二、实验内容设计并实现一个一级文件系统程序,要求实现以下功能:1. 提供文件创建/删除接口命令create / delete、目录创建/删除接口命令mkdir / rmdir、显示目录内容命令ls等。

2. 创建的文件不要求格式和内容。

三、实验结果1. 程序源代码main.cpp#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#include "structure.h"#include "creat.h"#include "access.h"#include "ballfre.h"#include "close.h"#include "delete.h"#include "dir.h"#include "format.h"#include "halt.h"#include "iallfre.h"#include "install.h"#include "log.h"#include "name.h"#include "open.h"#include "rdwt.h"#include "igetput.h"struct hinode hinode[NHINO];struct dir dir;struct file sys_ofile[SYSOPENFILE];struct filsys filsys;struct pwd pwd[PWDNUM];struct user user[USERNUM];FILE *fd;struct inode *cur_path_inode;int user_id;/*kkkkk*/unsigned short usr_id;char usr_p[12];char sel;char temp_dir[12];main(){unsigned short ab_fd1,ab_fd2,ab_fd3,ab_fd4,i,j;char *buf;int done=1;printf("\nDo you want to format the disk(y or n)?\n");if(getchar()=='y'){printf("\nFormat will erase all context on the disk \n");printf("Formating...\n");format();printf("\nNow will install the fillsystem,please wait...\n");install();printf("\n----Login----\nPlease input your userid:");scanf("%u",&usr_id);printf("\nPlease input your password:");scanf("%s",&usr_p);/* printf("\nsuccess\n");*/if(!login(usr_id,usr_p))return;while(done){printf("\n Please Select Your Operating\n");printf(" -1----ls\n -2----mkdir\n -3----change dir\n -4----create file\n -0----Logout\n");/* зЂвт*/sel=getchar();sel=getchar();switch(sel){case '1':_dir();break;case '2':printf("please input dir name:");scanf("%s",temp_dir);mkdir(temp_dir);break;case '3':printf("please input dir name:");scanf("%s",temp_dir);chdir(temp_dir);break;case '4':printf("please input file name:");scanf("%s",temp_dir);ab_fd1=creat(2118,temp_dir,01777);buf=(char *)malloc(BLOCKSIZ*6+5);write(ab_fd1,buf,BLOCKSIZ*6+5);close(0,ab_fd1);free(buf);break;case '0':logout(usr_id);halt();done = 0;default:printf("error!\nNo such command,please try again.\nOr you can ask your teacher for help.\n");break;}}}elseprintf("User canseled\nGood Bye\n");}structure.h#ifndef _STRUCTURE_H#define _STRUCTURE_H#define MAX 32767#define BLOCKSIZ 512#define SYSOPENFILE 40#define DIRNUM 128#define DIRSIZ 14#define PWDSIZ 12#define PWDNUM 32#define NOFILE 20#define NADDR 10#define NHINO 128#define USERNUM 10#define DINODESIZ 72#define DINODEBLK 32#define FILEBLK 512#define NICFREE 50#define NICINOD 50#define DINODESTART 1024#define DATASTART (2+DINODEBLK)*BLOCKSIZ#define DIEMPTY 00000#define DIFILE 01000#define DIDIR 02000#define UDIREAD 00001#define UDIWRITE 00002#define UDIEXICUTE 00004#define GDIREAD 00010#define GDIWRITE 00020#define GDIEXICUTE 00040#define ODIREAD 00100#define ODIWRITE 00200#define ODIEXICUTE 00400#define READ 1#define WRITE 2#define EXICUTE 3#define DEFAULTMODE 00777#define IUPDATE 00002#define SUPDATE 00001#define FREAD 00001#define FWRITE 00002#define FAPPEND 00004#define DISKFULL 65535#define SEEK_SET 0struct inode{struct inode *i_forw;struct inode *i_back;char i_flag;unsigned int i_ino;unsigned int i_count;unsigned int di_addr[NADDR];unsigned short di_number;unsigned short di_mode;unsigned short di_uid;unsigned short di_gid;unsigned short di_size;};struct dinode{unsigned short di_number;unsigned short di_mode;unsigned short di_uid;unsigned short di_gid;unsigned long di_size;unsigned int di_addr[NADDR]; };struct direct{char d_name[DIRSIZ];unsigned int d_ino;};struct filsys{unsigned short s_isize;unsigned long s_fsize;unsigned int s_nfree;unsigned short s_pfree;unsigned int s_free[NICFREE];unsigned int s_ninode;unsigned short s_pinode;unsigned int s_inode[NICINOD];unsigned int s_rinode;char s_fmod;};struct pwd{unsigned short p_uid;unsigned short p_gid;char password[PWDSIZ];};struct dir{struct direct direct[DIRNUM];int size;};struct hinode{struct inode *i_forw;};struct file{char f_flag;unsigned int f_count;struct inode *f_inode;unsigned long f_off;};struct user{unsigned short u_default_mode;unsigned short u_uid;unsigned short u_gid;unsigned short u_ofile[NOFILE]; };extern struct inode* aaa;extern struct hinode hinode[NHINO]; extern struct dir dir;extern struct file sys_ofile[SYSOPENFILE]; extern struct filsys filsys;extern struct pwd pwd[PWDNUM];extern struct user user[USERNUM];extern struct inode *cur_path_inode;extern FILE *fd;extern int user_id;extern struct inode *iget();extern iput();extern unsigned int balloc();extern bfree();extern struct inode *ialloc();extern ifree();extern int namei();extern short iname();extern unsigned int access();extern _dir();extern mkdir();extern chdir();extern unsigned short open();extern create();extern unsigned int read();extern unsigned int write();extern int login();extern logout();extern install();extern format();extern close();extern halt();#endifaccess.h#include <stdio.h>#include "structure.h"unsigned int access(user_id,inode,mode) unsigned int user_id;struct inode *inode;unsigned short mode;{switch(mode){case READ:if(inode->di_mode&ODIREAD) return 1;if((inode->di_mode&GDIREAD)&&(user[user_id].u_gid==inode->di_gid)) return 1;if((inode->di_mode&UDIREAD)&&(user[user_id].u_uid==inode->di_uid)) return 1;return 0;case WRITE:if(inode->di_mode&ODIWRITE) return 1;if((inode->di_mode&GDIWRITE)&&(user[user_id].u_gid==inode->di_gid)) return 1;if((inode->di_mode&UDIWRITE)&&(user[user_id].u_uid==inode->di_uid)) return 1;return 0;case EXICUTE:if(inode->di_mode&ODIEXICUTE) return 1;if((inode->di_mode&GDIEXICUTE)&&(user[user_id].u_gid==inode->di_gid)) return 1;if((inode->di_mode&UDIEXICUTE)&&(user[user_id].u_uid==inode->di_uid)) return 1;return 0;default:return 1;}}ballfre.h#include <stdio.h>#include "structure.h"static unsigned int block_buf[BLOCKSIZ/sizeof(int)];unsigned int balloc(){unsigned int free_block;int i,flag;if(filsys.s_nfree==0){printf("\nDisk Full!!\n");return DISKFULL;}i=filsys.s_pfree;flag=(i==0);if(flag) //该BLOCK组全部用了{fseek(fd,DATASTART+BLOCKSIZ*(filsys.s_free[NICFREE-1]+1),SEEK_SET);//filsys.s_free[NICFREE-1]+1指向下一个block组的地址块fread(block_buf,1,BLOCKSIZ,fd);for(i=0; i<NICFREE; i++){filsys.s_free[i]=block_buf[i];}//将待用block组的地址读入超级块filsys.s_pfree=NICFREE-1;free_block=filsys.s_free[filsys.s_pfree];}else{free_block=filsys.s_free[filsys.s_pfree];filsys.s_pfree--;}filsys.s_nfree--;filsys.s_fmod=SUPDATE;return free_block;}bfree (unsigned int block_num){int i;if(filsys.s_pfree==NICFREE-1)//表示回收的block已经可以组成一个block组了{for(i=0; i<NICFREE; i++){block_buf[i]=filsys.s_free[NICFREE-1-i];}filsys.s_pfree=0;fseek(fd,DATASTART+BLOCKSIZ*(filsys.s_free[0]),SEEK_SET);//filsys.s_free[0]为当前BLOCK组的地址块fwrite(block_buf,1,BLOCKSIZ,fd);}else filsys.s_pfree++;filsys.s_nfree++;filsys.s_fmod=SUPDATE;}close.h#include <stdio.h>#include "structure.h"close(user_id,cfd)unsigned int user_id;unsigned short cfd;{struct inode *inode;inode=sys_ofile[user[user_id].u_ofile[cfd]].f_inode;iput(inode);sys_ofile[user[user_id].u_ofile[cfd]].f_count--;user[user_id].u_ofile[cfd]=SYSOPENFILE+1;}creat.hcreat(uid,filename,mode)unsigned int uid;char *filename;unsigned short mode;{int di_ith,di_ino;struct inode *inode;int i,j;i=0;while(i<USERNUM)//user[]的值由函数login()注册,参看文件log.h {if(user[i].u_uid==uid){user_id=i;break;}i++;}if(i==USERNUM){printf("the user id is wrong.\n");exit(1);}di_ino=namei(filename);if(di_ino!=-1)//文件已经存在{inode=iget(di_ino);if(access(user_id,inode,mode)==0){iput(inode);printf("\ncreat access not allowed\n");return 0;}for(i=0; i<inode->di_size/BLOCKSIZ+1; i++){bfree(inode->di_addr[i]);}for(i=0; i<SYSOPENFILE; i++)if(sys_ofile[i].f_inode==inode){sys_ofile[i].f_off=0;}for(i=0; i<NOFILE; i++)if(user[user_id].u_ofile[i]==SYSOPENFILE+1){user[user_id].u_uid=inode->di_uid;user[user_id].u_gid=inode->di_gid;for(j=0; j<SYSOPENFILE; i++)if(sys_ofile[j].f_count==0){user[user_id].u_ofile[i]=j;sys_ofile[j].f_flag=(char)mode;}return i;}}else{inode=ialloc();di_ith=iname(filename);dir.size++;dir.direct[di_ith].d_ino=inode->i_ino;inode->di_mode=user[user_id].u_default_mode;inode->di_uid=user[user_id].u_uid;inode->di_gid=user[user_id].u_gid;inode->di_size=0;inode->di_number=0;for(i=0; i<SYSOPENFILE; i++)if(sys_ofile[i].f_count==0){break;}for(j=0; j<NOFILE; i++)if(user[user_id].u_ofile[j]==SYSOPENFILE+1){break;}user[user_id].u_ofile[j]=i;sys_ofile[i].f_flag=(char)mode;sys_ofile[i].f_count=0;sys_ofile[i].f_off=0;sys_ofile[i].f_inode=inode;return j;}return 0;}delete.h#include <stdio.h>#include "structure.h"delete(char *filename){unsigned int dinodeid;struct inode *inode;dinodeid=namei(filename);if(dinodeid!=(int)NULL)inode=iget(dinodeid);inode->di_number--;iput(inode);}dir.h_dir(){unsigned int di_mode;int i,j,one;struct inode *temp_inode;printf("CURRENT DIRECTORY:\n");for(i=0;i<dir.size;i++){if(dir.direct[i].d_ino!=DIEMPTY){printf("%sDIRSIZ",dir.direct[i].d_name);temp_inode=iget(dir.direct[i].d_ino);di_mode=temp_inode->di_mode;for(j=0;j<9;j++){one=di_mode%2;di_mode=di_mode/2;if(one) printf("x");else printf("-");}if(temp_inode->di_mode&&DIFILE==1){printf("%ld\n",temp_inode->di_size);printf("block chain:");for(i=0;i<temp_inode->di_size/BLOCKSIZ+1;i++)printf("%4d",temp_inode->di_addr[i]);printf("\n");}else printf("<dir>\n");iput(temp_inode);}}}mkdir(char *dirname){int dirid,dirpos;struct inode *inode;struct direct buf[BLOCKSIZ/(DIRSIZ+2)];unsigned int block;dirid=namei(dirname);if(dirid!=-1)//dirid==-1表示没有该目录名存在;{inode=iget(dirid);if(inode->di_mode&DIDIR)printf("\n%s directory already existed!!\n");elseprintf("\n%s is a file name&can not creat a dir the same name",dirname);iput(inode);return 0;}dirpos=iname(dirname);inode=ialloc();inode->i_ino=dirpos;dir.direct[dirpos].d_ino=inode->i_ino;dir.size++;strcpy(buf[0].d_name,".");buf[0].d_ino=dirid;strcpy(buf[1].d_name,"..");buf[1].d_ino=cur_path_inode->i_ino;block=balloc();fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET);fwrite(buf,1,BLOCKSIZ,fd);inode->di_size=2*(DIRSIZ+2);inode->di_number=1;inode->di_mode=user[user_id].u_default_mode;inode->di_uid=user[user_id].u_uid;inode->di_gid=user[user_id].u_gid;inode->di_addr[0]=block;iput(inode);return 0;}chdir(char *dirname){int dirid;int temp;struct inode *inode;short block;int i,j,low=0,high=0;dirid=namei(dirname);if(dirid=#include <stdio.h>#include "structure.h"delete(char *filename){unsigned int dinodeid;struct inode *inode;dinodeid=namei(filename);if(dinodeid!=(int)NULL)inode=iget(dinodeid);inode->di_number--;iput(inode);}=-1){printf("\n%s does not existed\n",dirname);return 0;}inode=iget(dirid);if(!access(user_id,inode,user[user_id].u_default_mode)){printf("\nhas not access to the directory %s",dirname);iput(inode);return 0;}for(i=0;i<dir.size;i++){for(j=0;j<DIRNUM;j++){temp=dir.direct[j].d_ino;if(dir.direct[j].d_ino==0||dir.direct[j].d_ino>MAX) break;}dir.direct[j].d_ino=0;}for(i=0;i<cur_path_inode->di_size/BLOCKSIZ+1;i++){bfree(cur_path_inode->di_addr[i]);}i=dir.size;for(i=0;i<dir.size;i+=BLOCKSIZ/(DIRSIZ+2)){block=balloc();cur_path_inode->di_addr[i]=block;fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET);fwrite(&dir.direct[i],1,BLOCKSIZ,fd);}cur_path_inode->di_size=dir.size*(DIRSIZ+2);iput(cur_path_inode);cur_path_inode=inode;i=inode->di_size/BLOCKSIZ+1;j=0;for(i=0;i<inode->di_size/BLOCKSIZ+1;i++){fseek(fd,DATASTART+inode->di_addr[i]*BLOCKSIZ,SEEK_SET);fread(&dir.direct[j],1,BLOCKSIZ,fd);j+=BLOCKSIZ/(DIRSIZ+2);}return 0;}format.hformat(){struct inode *inode;struct direct dir_buf[BLOCKSIZ/(DIRSIZ+2)];struct pwd passwd[BLOCKSIZ/(PWDSIZ+4)];struct filsys filsys;unsigned int block_buf[BLOCKSIZ/sizeof(int)];char *buf;char *empty;int i,j,k;fd=fopen("filesystem","w+b");buf=(char*)malloc((DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char));if(fd==NULL){printf("\nfile system file creat failed!!\n");exit(0);}fseek(fd,0,SEEK_SET);fwrite(buf,1,(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char),fd);free(buf);passwd[0].p_uid=2116;passwd[0].p_gid=03;strcpy(passwd[0].password,"don1"); passwd[1].p_uid=2117;passwd[1].p_gid=03;strcpy(passwd[1].password,"don2"); passwd[2].p_uid=2118;passwd[2].p_gid=04;strcpy(passwd[2].password,"abcd"); passwd[3].p_uid=2119;passwd[3].p_gid=04;strcpy(passwd[3].password,"don4"); passwd[4].p_uid=2220;passwd[4].p_gid=05;strcpy(passwd[4].password,"don5");inode=iget(0);inode->di_mode=DIEMPTY;iput(inode);inode=iget(1);inode->di_number=1;inode->di_mode=DEFAULTMODE|DIDIR; inode->di_size=3*(DIRSIZ+2);inode->di_addr[0]=0;strcpy(dir_buf[0].d_name,"..");dir_buf[0].d_ino=1;strcpy(dir_buf[1].d_name,".");dir_buf[1].d_ino=1;strcpy(dir_buf[2].d_name,"etc");dir_buf[2].d_ino=2;fseek(fd,DATASTART,SEEK_SET);fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);fseek(fd,1056,SEEK_SET);fread(inode,DINODESIZ,1,fd);inode=iget(1);iput(inode);inode=iget(2);inode->di_number=1;inode->di_mode=DEFAULTMODE|DIDIR;inode->di_size=3*(DIRSIZ+2);inode->di_addr[0]=1;strcpy(dir_buf[0].d_name,"..");dir_buf[0].d_ino=1;strcpy(dir_buf[1].d_name,".");dir_buf[1].d_ino=2;strcpy(dir_buf[2].d_name,"password");dir_buf[2].d_ino=3;fseek(fd,DATASTART+BLOCKSIZ*1,SEEK_SET);fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);inode=iget(3);inode->di_number=1;inode->di_mode=DEFAULTMODE|DIFILE;inode->di_size=BLOCKSIZ;inode->di_addr[0]=2;for(i=5;i<PWDNUM;i++){passwd[i].p_uid=0;passwd[i].p_gid=0;strcpy(passwd[i].password," ");}fseek(fd,DATASTART+2*BLOCKSIZ,SEEK_SET);fwrite(passwd,1,BLOCKSIZ,fd);iput(inode);filsys.s_isize=DINODEBLK;filsys.s_fsize=FILEBLK;filsys.s_ninode=DINODEBLK*BLOCKSIZ/DINODESIZ-4;filsys.s_nfree=FILEBLK-3;for(i=0;i<NICINOD;i++){filsys.s_inode[i]=4+i;}filsys.s_pinode=0;filsys.s_rinode=NICINOD+4;for(i=NICFREE+2;i<FILEBLK;i+=50)//为何要加2,参看149行的注释{for(j=0;j<NICFREE;j++){block_buf[NICFREE-1-j]=i-j;}fseek(fd,DATASTART+BLOCKSIZ*(i-49),SEEK_SET);fwrite(block_buf,1,BLOCKSIZ,fd);}//当i=502之后,完成文件块502~453的写入;//之后文件块512~503不能进行,需要特殊处理for(i=503;i<512;i++)block_buf[i-503]=i;fseek(fd,DATASTART+BLOCKSIZ*503,SEEK_SET);fwrite(block_buf,1,BLOCKSIZ,fd);//至此,才完成512块文件块的定位for(i=0;i<NICFREE;i++){filsys.s_free[i]=i+3;//从DATASTART的第一个BLOCK作为MAIN DIRECTORY//第二个BLOCK作为etc目录//第三个BLOCK作为password文件//故此i要加3}//每50个BLOCK成组,在每个BLOCK组当中的第一个BLOCK(称为地址块)放有整个BLOCK//组的地址。

实验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内核支持从个人电脑到大型主机甚至包括嵌入式系统在内的各种硬件设备。

linux操作系统实验报告

linux操作系统实验报告

linux操作系统实验报告Linux 操作系统实验报告一、实验目的本次实验的主要目的是深入了解和熟悉Linux 操作系统的基本操作、命令行使用、文件系统管理以及进程管理等方面的知识和技能。

通过实际操作和实践,提高对 Linux 操作系统的掌握程度,为今后在相关领域的学习和工作打下坚实的基础。

二、实验环境本次实验使用的是虚拟机软件 VirtualBox 安装的 Ubuntu 2004 LTS操作系统。

虚拟机配置为 2GB 内存,20GB 硬盘空间。

实验在Windows 10 操作系统的主机上进行。

三、实验内容及步骤(一)用户和权限管理1、创建新用户使用`sudo adduser <username>`命令创建新用户,例如创建用户名为`testuser` 的新用户。

2、设置用户密码使用`sudo passwd <username>`命令为新用户设置密码。

3、切换用户使用`su <username>`命令切换到新用户。

4、用户权限管理修改`/etc/sudoers` 文件,为新用户赋予特定的权限,例如允许执行特定的管理员命令。

(二)文件和目录操作1、查看文件和目录使用`ls` 命令查看当前目录下的文件和目录,使用`ls l` 命令查看详细信息,包括文件权限、所有者、大小和修改时间等。

2、创建、删除文件和目录使用`touch <filename>`命令创建新文件,使用`mkdir <directoryname>`命令创建新目录。

使用`rm <filename>`命令删除文件,使用`rmdir <directoryname>`命令删除空目录,使用`rm r <directoryname>`命令删除非空目录。

3、复制、移动文件和目录使用`cp <source> <destination>`命令复制文件或目录,使用`mv <source> <destination>`命令移动文件或目录。

实验五Linux磁盘与文件系统管理

实验五Linux磁盘与文件系统管理
实验五 Linux磁盘与文件系统
刘飞
实验内容
练习ln命令,创建两种符号链接 练习磁盘分区、格式化、检验、挂载、卸载 练习挂载光驱、U盘和iso镜像 练习df,du, dumpe2fs, e2label,dd 练习文件系统的自动挂载 练习swap分区创建、挂载和关闭 练习使用tar进行压缩和打包 完成《鸟哥的linux私房菜》第八章“linux磁盘与文件系 统管理”情境模拟题一和情境模拟题二。 9. 将本次实验依照“输入命令”和“输出结果”制作两个 文件,打包成一个压缩文件,使用“学号+姓名”命名, 发给教师机。 1. 2. 3. 4. 5. 6. 7. 8.
ቤተ መጻሕፍቲ ባይዱ
实验要求
1. 尽量通过man解决问题 2. 撰写实验报告 3. 课代表收齐实验报告,下次课前交到西4419。

操作系统实验---文件系统

操作系统实验---文件系统

实验报告实验题目:文件系统姓名:学号:课程名称:操作系统所在学院:信息科学与工程学院专业班级:计算机任课教师:实验项目名称文件系统一、实验目的与要求:1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。

2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。

3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。

4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

二、实验设备及软件:一台PC(Linux系统)三、实验方法(原理、流程图)试验方法(1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

(2)用户创建文件,可以编号存储于磁盘上。

如file0,file1,file2…并以编号作为物理地址,在目录中登记。

文件系统功能流程图图1.文件系统总体命令分析图 2.登录流程图图 3. ialloc流程图图4.balloc流程图图5.密码修改流程图图6.初始化磁盘图 7.显示所有子目录 dir/ls 操作流程图图8.创建文件 creatfile 、创建目录 mkdir 流程图图9.改变当前路径 cd 操作流程图实验原理1.文件操作◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。

在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。

具体流程图查看第二节,系统流程图设计部分。

◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。

在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。

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

操作系统实验5文件系统:Linux 文件管理制度————————————————————————————————作者:————————————————————————————————日期:实验5 文件系统:Linux文件管理1.实验目的(1)掌握Linux提供的文件系统调用的使用方法;(2)熟悉文件和目录操作的系统调用用户接口;(3)了解操作系统文件系统的工作原理和工作方式。

2.实验内容(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********0. 退出1. 创建新文件2. 写文件3. 读文件4. 复制文件5. 修改文件权限6. 查看文件权限7. 创建子目录8. 删除子目录9. 改变当前目录到指定目录10. 链接操作***********代码:#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>void menu(void);void openfile(void);void writefile(void);void readfile(void);void copyfile(void);void chmd(void);void ckqx(void);void cjml(void);void scml(void);void ggml(void);void ylj(void);int main(){int choose;int suliangjin=1;menu();scanf("%d",&choose);while(choose!=0){switch(choose){case 1:openfile();break;case 2:writefile();break;case 3:readfile();break;case 4:copyfile();break;case 5:chmd();break;case 6:ckqx();break;case 7:cjml();break;case 8:scml();break;case 9:ggml();break;case 10:ylj();break;}menu();scanf("%d",&choose);}return 0;}void menu(void){printf("文件系统\n");printf("1.创建新文件\n");printf("2.写文件\n");printf("3.读文件\n");printf("4.复制文件\n");printf("5.修改文件权限\n");printf("6.查看文件权限\n");printf("7.创建子目录\n");printf("8.删除子目录\n");printf("9.改变目前目录到指定目录\n");printf("10.链接操作\n");printf("0.退出\n");printf("请输入您的选择...\n");}void openfile(void){int fd;if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");elseprintf("open file:hileo.c %d\n",fd);if(close(fd)<0)perror("close");elseprintf("Close hello.c\n");}void writefile(void){int fd,size,len;char *buf="Hello!I'm writing to this file!";len=strlen(buf);if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");elseprintf("open file:hileo.c %d\n",fd);if((size=write(fd,buf,len))<0)perror("write");elseprintf("Write:%s\n",buf);if(close(fd)<0)perror("close");elseprintf("Close hello.c \n");}void readfile(void){int fd,size;char b[10];if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");elseprintf("open file:hileo.c %d\n",fd);lseek(fd,0,SEEK_SET);if((size=read(fd,b,10))<0)perror("read");elseprintf("read from file:%s\n",b);if(close(fd)<0)perror("close");elseprintf("Close hello.c\n");}void copyfile(void){if(fork()==0)execlp("/bin/cp","cp","/tmp/hello.c","/tmp/he.c",NULL);elsewait(0);printf("将hello.c复制he.c");}void chmd(void){int a;printf("1.文件主可读可写可执行\n");printf("2.文件主可读\n");printf("3.文件主可写\n");printf("4.文件主可执行\n");printf("请输入您的选项\n");scanf("%d",&a);switch(a){case 1:chmod("/tmp/hello.c",S_IRWXU);printf("ok!\n");break;case 2:chmod("/tmp/hello.c",S_IRUSR);printf("ok!\n");break;case 3:chmod("/tmp/hello.c",S_IWUSR);printf("ok!\n");break;case 4:chmod("/tmp/hello.c",S_IXUSR);printf("ok!\n");break;default:printf("您选择有误\n");}}void ckqx(void){char *path="/bin/ls";char *argv[4]={"ls","-l",NULL};if(fork()==0)execv(path,argv);elsewait(0);}void cjml(void){if(mkdir("/tmp/a",S_IRWXU)<0)perror("Mkdir");elseprintf("创建成功\n");}void scml(void){if(rmdir("/tmp/a")<0)perror("Rmdir");elseprintf("删除成功\n");}void ggml(void){if(chdir("/tmp/bc")<0)perror("chdir");elseprintf("更改目录成功\n"); }void ylj(void){if(link("hello.c","h.c")<0)perror("Link");elseprintf("建立硬连接\n"); }打开文件:写文件:读文件:复制文件:修改权限:查看权限:创建目录:删除目录:更改目录:硬连接:问题解决方案:1.在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。

后来我在execlp前面加if(fork)()==0)就可以咯2.硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错3.到现在还不知道为什么我读出来的是乱码情解决实验心得体会:通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

相关文档
最新文档