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

合集下载

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

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

操作系统文件管理实验报告电大教师评语教师签字日期成绩学生姓名学号实验名称操作系统文件管理实验实验报告一、实验目的1、加深对文件、目录、文件系统等概念的理角2、掌握 Llnu_ 文件系统的目录结构3、掌握有关 Llnu_ 文件系统操作的常用命令4、了解有关文件案例性方面的知识二、实验要求:1、正确使用文件管理命令,能熟练地对文件进行浏览、拷贝、移动和删除。

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

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

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

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

三、实验步骤( 一) 浏览文件系统 1、运行 pwd 命令。

确定当前的工作目录。

2、文件列表。

使用 ls 命令显示当前工作目录的内容。

使用 ls-l 命令显示文件列表,对照屏幕上的显示信息,理解各字段的含义。

使用 ls-ai 命令显示文件列表,观察显示的信息。

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

看一下,是否还有其他隐藏的文件? 运行不带-a 选项的 ls 命令。

注意,文件的 I 节点号不再出现。

运行不带-i 选项的 ls 命令,注意,怎么不再显示隐藏文件了。

3、目录操作。

使用 mkdir 命令建立一个子目录。

执行带 ls-d 命令,观察有关子目录的信息。

执行 cd/命令,将工作目录改到根目录(/)上。

使用绝对路径和相对路径两种方式,并执行 pwd 命令确认当前工作目录。

执行 ls/命令列出根目录的内容,再分别列出各子目录的内容。

体会各子目录的作用以及访问权限。

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

执行不带参数的命令 cd,然后用 pwd 命令确认当前的工作目录是什么。

执行命令 cd../...工作目录移到什么地方了? ( 二) 查看文件执行 cd 命令,将工作目录改到主目录上。

linux操作系统管理文件和权限的实训总结

linux操作系统管理文件和权限的实训总结

linux操作系统管理文件和权限的实训总结1. 引言1.1 概述Linux操作系统是一款广泛应用于服务器和个人计算机的开源操作系统。

其强大的文件管理和权限设置功能使得用户能够更好地控制和保护文件的安全性。

本篇长文将总结在实训中所学到的Linux操作系统管理文件和权限的相关知识和技巧。

1.2 文章结构本文分为四个部分:引言、Linux操作系统管理文件和权限的实训总结、实训心得与体会以及结论。

在本部分(引言)中,将对文章进行简要介绍,并概括说明后续内容。

1.3 目的本文旨在通过对Linux操作系统管理文件和权限的实际操作实训进行总结,加深对文件管理和权限设置的理解,提高对Linux命令行工具使用技巧的掌握,并探讨在实际应用中遇到的问题及其解决方案。

最终目标是能够提供有价值且实用性强的思考和建议,以便读者能够更好地理解和运用Linux操作系统中关于文件管理和权限设置方面的知识。

2. linux操作系统管理文件和权限的实训总结2.1 实训背景:在Linux操作系统中,文件的管理和权限设置是非常重要的操作。

正确地管理文件可以提高工作效率和数据安全性。

本次实训旨在通过学习Linux命令行工具,并运用所学知识进行实践来掌握文件管理和权限设置的方法和技巧。

2.2 文件管理:2.2.1 创建和删除文件:创建文件是日常工作中常见的任务。

我们可以使用touch命令来创建空白文件,例如:touch file.txt。

而删除文件则可以使用rm命令,如:rm file.txt。

- 在实践过程中,我学会了如何快速地创建空白文件,并且了解到rm命令可以搭配一些参数来批量删除不需要的文件。

2.2.2 复制和移动文件:复制或移动文件是进行整理与备份时常见的操作。

cp命令用于复制文件,例如:cp file.txt newfile.txt 将file.txt复制为newfile.txt。

而mv命令用于移动或重命名文件,例如:mv file.txt /path/to/newdirectory/ 或mv oldfile.txt newfile.txt。

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

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

《Linux系统管理》Linux文件管理实验报告一、实验目的:1.掌握Linux系统文件的操作命令2.掌握Linux系统权限的操作命令二、实验内容:1.用文件显示命令显示文件。

(1)以root身份进入系统命令符界面,查看当前目录下的文件及目录信息,请使用常见的选项进行显示并观察结果;查看/etc目录下的文件及目录信息,并查看/etc目录自己的信息,简述两种显示结果是否有区别?(2)显示/etc/passwd文件中的信息同时含有行号,并用more、less、head及tail命令进行不同的查看方式对该文件的部分内容进行显示;(3)在/tmp目录下创建/lianxi/first目录路径;在/tmp/lianxi目录下同时创建名为second和third的两个目录;生成 test目录作为lianxi的子目录,并将其权限设置为(744)(要求创建后查看是否存在);(4)利用cat及重定向命令在/tmp/lianxi/first目录中建立小型文件m1,输入以下信息:echo “Hello! Linux”echo ‘date’并显示m1文件的内容;(5)将当前日期重定向至/tmp/lianxi/first/目录的m2文件中,并显示其文件内容;(6)并利用cat命令将m1和m2文件合并至/tmp/lianxi/first/目录的m3文件中,并显示文件内容。

2.用查找、排序、显示内容命令操作文件。

(1)检索/etc/passwd文件中名为root的字符串,且显示其所在文件中的行号,同时利用管导线再次完成此功能;利用cat和管道线查看配置文件/etc/logrotate.conf中过滤掉空格及‘#’注释的文件内容。

(2)重新编辑/tmp/lianxi/first/m1文件中的内容,使得最终m1文件中的内容显示为:Study 30 independentlyHardly 95 finishLinux 85 task●查看m1文件中的内容;●对m1文件按每行第一个字符进行排序输出;●对m1文件按每行第一个字符进行方向排序;●对m1文件按每行第一个字段进行数值排序;●对m1文件按每行以第三个字段为关键字进行排序;●把root目录下的所有文件按文件由大到小进行排序。

(完整版)linux文件系统管理-权限管理实验4报告

(完整版)linux文件系统管理-权限管理实验4报告

实验报告课程Linux系统应用与开发教程实验名称linux文件系统管理-权限管理(高级设置)一、实验目的1、掌握Linux文件系统权限的设置2、掌握linux用户帐号与组管理3、掌握linux 文件共享的设置方法4、掌握linux 文件共享的权限设置方法二、实验内容1、使用root帐号通过系统提供的6个虚拟控制台登陆到linux,或在x-windows开启一个终端。

2、完成以下的实验内容(1)、假设你是系统管理员:现要在公司linux服务器系统中新增一些用户与一个用户组。

•使用groupadd account 添加一个名为account的组•使用useradd -G account acc-user1,(该命令将添加一个用户名为acc-user1的用户, 同时会建立一个与用户名同名的私有组(该私有组为用户的默认组,这个组中只有一个用户名),并把该用户将加入account的标准组,同时,按同样的方法建立acc-user2、acc-user3、acc-user4。

•建立用户后,请使用x-window中的用户与组管理工具查看用户与组建立情况,检查用户与组的归属情况。

(2)、开启多个控制台,分别使用acc-user1、acc-user2、acc-user3登陆系统(可以在控制台分别登陆,也可以在X-windows中多开几个终端程序,默认使用root登陆,然后使用su命令通过切换用户的方式登陆,其语法为“su - user-name”,提示可以在登陆成功后运行命令“id”查看当前登陆的用户属于哪些组,当前的默认组是什么?)(3)、为account组建立一个公共共享目录/home/account-share,满足以下的权限设定要求,以及设置何种的umask:•该目录的拥有者为acc-user1,所属组为account。

•在该目录下建立一个/home/account-share/full-share的子目录,修改该目录的权限,使得account组的成员均能在对该目录有完全控制权限,account组外的其他用户没有任何权限,即account组的成员都可以在该目录下建立文件,同时在该子目录full-share下建立的文件,只有文件建立者有权限删除,并且每个用户在该子目录full-share下建立的文件也能自动与该account组成员可读共享。

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

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

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

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

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

目录和文件管理班级:学院(系):【操作步骤】输入命令:1S,查看Linux系统常见的目录,截图如下:【操作要求2】显示当前目录下文件类型。

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

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

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

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

(4)输入命令:1s -1,确认两个目录创建成功。

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

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

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

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

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

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

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

操作系统原理及应用(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文件系统管理实验

auto:自动挂载。 nouser:使一般用户无法挂载。 async:以非同步方式执行文件系统的输入 输出操作。 可见,该列表中光驱和软驱是不自动挂载 的,参数设置为noauto。 注意:如果非要设成自动挂载,则要确保 每次开机时光驱和软驱里都要有盘。
四、实验内容和步骤
1.挂载文件系统 (1)手工挂载文件系统
-o<选项>,指定挂载文件系统时的选项, 有些也可用在/etc/fstab中,常用的有如下几 种。 codepage=XXX:代码页。cp936 iocharset=XXX:字符集。gb2312 ro:以只读方式挂载。 rw:以读写方式挂载。 nouser:使一般用户无法挂载。 user:可以让一般用户挂载设备。
以下是一个/etc/fstab文件的实例: /dev/had3 / ext3 defaults 11 LABEL=/boot /boot ext3 defaults 1 2 /dev/had1 /dosc vfat defaults 0 0 /dev/had2 /dosd vfat defaults 0 0 /dev/had4 swap swap defaults 0 0 /dev/fd0 /mnt/floppy msdos noauto,user 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,user 0 0 None /proc proc defaults 00
此时,可以进入/mnt/cdorm等目录这些文件系 统。 注意:要保证命令不出错,确保光驱里有盘。 如果挂载的是在windows下的文件系统,并且 有中文文件名,用以上命令挂载后,显示一堆乱码。 这时,需要用-o 参数中的codepage iocharset选项。 其中,codepage指定文件系统的代码页,简体中文代 码是936;iocharset指定字符集,简体中文一般用 cp936或gb2312。 当挂载的文件系统linux不支持时,mount一定 出错(如Windows 2000的NTFS)。这时,可以重新 编译linux内核,以获得对该文件系统的支持。

linux实验文件系统与文件管理

linux实验文件系统与文件管理

学生课程实验报告书课程:《Linux操作系统》10 级系专业班学号:姓名:指导教师:李光炀2013—2014学年第 2 学期一、实验项目:文件系统与文件管理二、实验日期:2013年04月07日三、实验原理:掌握文件系统的挂载与卸载;磁盘配额管理;文件的权限修改;文件的归档与压缩;四、实验仪器:PC机Redhat网络操作系统五、实验步骤(纸张不够写可另外加纸并应装订):1.对/文件系统实施用户级配额管理,对普通用户hellen与jerry进行配额管理,磁盘空间软配额为300M,硬配额为350M,文件数量配额为:软配额12个,硬配额为15个。

写出配额的具体步骤,并测试用户级配额是否成功。

普通用户hellen:普通用户jerry2.在桌面环境下,选中有个文件或文件夹进行相应权限的修改。

3.用chmod命令分别用数字模式和功能模式修改/root/install.log文件属性。

4.用chgrp命令修改/root/install.log的所属组群为hellen。

5.用chown命令修改/root/install.log的文件所有者为hellen。

6.用mkdir命令创建/chf/chen目录。

7.用cp命令将/root/install.log文件拷贝到/chf/chen目录下。

8.用mv命令将/chf文件夹(包括子文件夹的内容)全部移到/chen目录下。

9.用rm命令删除/chen文件夹。

10.在/root文件夹下创建ts.txt文件,用ln命令创建ts.txt硬链接为ts1.lnk,符号链接为ts2.lnk,尝试在ts.txt、ts1.lnk、ts2.lnk 三个文件中修改内容,观察另外两个文件的变化情况。

11.删除ts.txt文件,分别打开ts1.lnk、ts2.lnk文件看看是否能顺利打开。

12.用find命令查找/root文件夹下文件所有者为root,文件大于10k的文件。

13.用grep命令查找/root/install.log文件中包含kde字符的行,并显示行号。

实验Linux文件和目录操作

实验Linux文件和目录操作

实验Linux文件和目录操作实验Linux文件和目录操作(1)一、实验内容练习Linux文件和目录操作命令。

二、实验目的掌握文件与目录管理命令掌握文件内容查阅命令三、实验题目1. 文件与目录管理(1) 查看CentOS根目录下有哪些内容?(2)进入/tmp目录,以自己的学号建一个目录,并进入该目录。

(3)显示目前所在的目录。

(4)在当前目录下,建立权限为741的目录test1,查看是否创建成功。

(5)在目录test1下建立目录test2/teat3/test4。

(6)进入test2,删除目录test3/test4。

(7)将root用户家目录下的.bashrc复制到/tmp下,并更名为bashrc (8)重复步骤6,要求在覆盖前询问是否覆盖。

(9)复制目录/etc/下的内容到/tmp下。

(10)在当前目录下建立文件aaa。

(11)查看该文件的权限、大小及时间(12)强制删除该文件。

(13) 将/tmp下的bashrc移到/tmp/test1/test2中。

(14) 将/test1目录及其下面包含的所有文件删除。

2. 文件内容查阅、权限与文件查找(1) 使用cat命令加行号显示文件/etc/issue的内容。

(2) 反向显示/etc/issue中的内容。

(3) 用nl列出/etc/issue中的内容。

(4) 使用more命令查看文件/etc/man.config(5) 使用less命令前后翻看文件/etc/man.config中的内容(6) 使用head命令查看文件/etc/man.config前20行(7) 使用less 命令查看文件/etc/man.config后5行(8) 查看文件/etc/man.config前20行中后5行的内容(9) 将/usr/bin/passwd 中的内容使用ASCII方式输出(10) 进入/tmp目录,将/root/.bashrc复制成bashrc,复制完全的属性,检查其日期(11) 修改文件bashrc的时间为当前时间四、实验指导1. 文件与目录管理(1)查看CentOS根目录下有哪些内容?ls /(2)进入/tmp目录,以自己的学号建一个目录,并进入该目录。

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文件是否相同。

操作系统实验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”。

linux-实验报告-文件系统与文件管理

linux-实验报告-文件系统与文件管理

学生课程实验报告书课程:《linux网络操作系统》级系专业班学号:姓名:指导教师:一、实验项目:用户与组群管理二、实验日期:三、实验原理:1.熟悉Linux下常用的操作指令。

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

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

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

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

四、实验仪器:PC机Redhat网络操作系统五、实验步骤(纸张不够写可另外加纸并应装订):进入虚拟机,并在此平台上练习文件管理有关命令.一般在[root @ localhost xxxx]$提示符下键入有关命令。

1.浏览文件系统〈1〉运行pwd命令,确定你当前的工作目录。

〈2〉利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。

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

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

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

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

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

〈7〉使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。

〈8〉使用ls-l命令列出/dev的内容。

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

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

〈10〉使用命令cd ../..,你将工作目录移到什麽地方2.查看你的文件〈1〉利用cd命令,将工作目录改到你的主目录上。

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

实验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//组的地址。

Linux文件系统实验报告

Linux文件系统实验报告
return 1;
}
temp=temp->child;
while(temp)
{
if(temp->isdir)
{cout<<" <DIR> "<<temp->filename<<endl;i++;}
else
{cout<<" <FILE> "<<temp->filename<<endl;j++;}
temp=temp->next;
关闭文件:可通过选择关闭文件的功能选项,来关闭系统中所有打开的文件,如果没有文件被打开,则系统会显示没有文件打开。
删除用户、文件、文件夹:用户可通过选择删除的功能选项来删除不想再保存的文件和文件夹,删除后,用户会自动注销;当选择删除用户的功能选项时,系统会删除该用户,以及该用户所创建的所有文件和文件夹。
node->child=NULL;
node->prev=NULL;
node->next=NULL;
return node;
}
//创建文件存储结点
void createroot ()
{
recent=root=initfile("/",1);
root->parent=NULL;
root->child=NULL;
root->prev=root->next=NULL;
strcpy(para,"/");
}
int mkdir()
{
temp=initfile(" ",1);

Linux文件管理

Linux文件管理

第5章Linux文件管理●每种操作系统都有自己独特的文件系统,如MS-DOS文件系统、UNIX文件系统等。

●文件系统包括了文件的组织结构、处理文件的数据结构、操作文件的方法等。

●Linux自行设计开发的的文件系统称为EXT2。

●Linux还支持多种其它操作系统的文件系统,例如minix、ext2、hpfs、msdos、umsdos、iso、nfs、sysv、affs、ufs、efs等达二十几种。

●Linux的虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。

§5.1 Linux文件系统概论一.Linux文件系统的树型结构●Linux文件系统采用了多级目录的树型层次结构管理文件。

●树型结构的最上层是根目录,用/表示。

在根目录之下是各层目录和文件。

●在每层目录中可以包含多个文件或下一级目录。

●每个目录和文件都有由多个字符组成的目录名或文件名。

●系统在运行中通过使用命令或系统调用进入任何一层目录,这时系统所处的目录称为当前目录●Linux使用两种方法来表示文件或目录的位置,绝对路径和相对路径。

●绝对路径是从根目录开始依次指出各层目录的名字,它们之间用”/”分隔,如/usr/include。

●相对路径是从当前目录开始,指定其下层各个文件及目录的方法,如系统当前目录为/usr,bin/cc。

●Linux的一个目录是一个驻留在磁盘上的文件,称为目录文件。

系统对目录文件的处理方法与一般文件相同。

●目录由若干目录项组成,每个目录项对应目录中的一个文件。

●在一般操作系统的文件系统中,目录项由文件名和属性、位置、大小、建立或修改时间、访问权限等文件控制信息组成。

●Linux继承了UINX,把文件名和文件控制信息分开管理,●文件控制信息单独组成一个称为i节点(inode)的结构体。

inode实质上是一个由系统管理的“目录项”。

●每个文件对应一个inode,它们有唯一的编号,称为inode号。

Linux 文件系统及文件管理

Linux 文件系统及文件管理

Linux 文件系统及文件管理Linux文件系统与Windows文件系统有什么不同?●linux文件系统采用的是ext格式;Windows文件系统采用的是fat32或ntfs格式。

●linux文件系统中的所有东西都处于一个称为根的目录中;Windows文件系统以计算机系统中挂载硬盘的分区数量设置多个盘符,每个盘符都可以看做一个独立的文件系统。

●linux操作系统中的硬盘分区可以挂载到某个目录中,但是从文件系统表面上,用户无法区分系统中有多少个硬盘分区,并且只要没有将硬盘分区挂载到文件系统中,linux操作系统根本不会知道该硬盘分区的存在。

●Windows操作系统在启动后,会将所有系统中其能够识别的硬盘分区全部识别并加载,并以从C开始的字符设置其名称,称之为盘符。

Linux的磁盘分区windows的磁盘分区linux的文件系统目录结构Linux文件管理基本操作启动Linux操作系统,用户登录系统之后,打开一个终端窗口,可以获得类似下图所示的窗口:在终端窗口打开了一个当前登录用户的默认shell进程。

“whpuser@whpuser:~$”,是当前用户shell的命令提示符。

●最前面的“whpuser”表示的是当前用户名;●“@”字符后的“whpuser”表示的是当前计算机名;●“:”字符后的“~”表示当前目录为当前用户的家目录,即/home/whpuser/;●最后的“$”字符表示打开本shell的用户是一个普通用户;在上述窗口shell命令提示符后面输入“su”或“su root”切换到超级管理员用户,可以获得类似如下图所示的内容:“root@whpuser:/home/whpuser#”是当前切换到的root用户的shell进程中,这里请注意切换前的whpuser用户的shell进程并没有退出,而只是打开了另外一个shell进程以供root用户使用而已。

在命令提示符的最后面的“#”符号表示该shell的用户为root用户,即超级管理员用户。

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

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

2.实验内容(1)利用Linux有关系统调用函数编写一个文件工具,要求具有下列功能:***********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 open);void write);void read);void copy);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 open){int fd;if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");printf("open %d\n",fd);if(close(fd)<0)perror("close");elseprintf("Close hello.c\n");}void write){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 %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 read){int fd,size;char b[10];if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");elseprintf("open %d\n",fd);lseek(fd,0,SEEK_SET);if((size=read(fd,b,10))<0)perror("read");elseprintf("read from \n",b);if(close(fd)<0)perror("close");elseprintf("Close hello.c\n");}{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提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

相关文档
最新文档