福建工程学院实验5 linux文件系统

合集下载

《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 常用命令

福建工程学院Linux 常用命令

Linux的快捷键和主要命令作者:幻影快递Linux小组5.1 Linux基本的键盘输入快捷键和一些常用命令5.2 帮助命令5.3 系统信息5.4 基本操作5.5 文件管理5.6 查看和编辑文件5.7 查找文件5.8 X-windows基础5.9 网络应用程序5.10 文件压缩和解压缩5.11 进程控制5.12 一些管理命令5.13 硬盘和软盘实用工具5.14 用户帐户和文件权限管理5.15 程序安装5.16 访问磁盘驱动器/分区5.17 网络管理工具5.18 与音乐有关的命令5.19 与图形相关的命令5.20 几个小游戏简介:这是包含在Linux软件包里(RedHat或者Mandrake),我们比较经常使用和比较有用的一些命令集合。

在你当前路径的命令提示行下按<TAB>键,就可以看到有效的命令一览。

在我的小型家用系统上,在我的当前路径下有3786个可执行命令。

这些命令的大部分可以在图形用户界面下使用鼠标的左键或者右键来访问,全部都可以使用命令行来运行(除非你没有安装对应的软件包,在我的CD里都可以运行)。

那些要求图形用户界面的程序必须在图形用户下才能运行,比如,你可以通过在KDE或者GNOME的终端输入命令来运行这些程序。

一些更高级(对新手没有用处?)的命令工具可以参考第七部分的相关内容。

以下给那些对Linux没有概念的新手:1. Linux是大小写敏感的系统,举个例子,Mozilla, MOZILLA, mOzilla和mozilla是四个不同的命令(但是只有第四个mozilla是真正有效的命令)。

还有,my_filE, my_file,和my_FILE是三个不同的文件。

用户的登录名和秘密也是大小写敏感的(这是因为UNIX系统和C语言的传统一向是大小写敏感所致)。

2. 文件名最多可以有256个字符,可以包含数字,点号”.”,下划线”_”,横杆”-”,加上其他一些不被建议使用的字符。

实验五-文件系统实验

实验五-文件系统实验

实验五 EXT4文件系统结构分析一、实验目的:掌握文件系统的工作机理;理解文件系统的主要数据结构;学习较为复杂的Linux下的编程;了解EXT4文件系统的结构。

二、实验平台:虚拟机:VMWare9操作系统:Ubuntu12.04文件系统:EXT4编辑器:Gedit | Vi三、实验内容:(1)该实验要求编写程序,完成以下功能(注意保存截图):1、查看主硬盘设备名、挂载目录及文件系统信息2、程序编译进入check_ext4fs目录,输入 make clean; make编译程序,生成check_ext4fs程序:获取ext4文件系统超级块,并显示超级块数据结构ext4_super_block的字段信息;获取块组描述符表,并能根据输入的块组号显示该块组描述符ext4_group_desc的字段信息;先获取组块描述表info groups [1, 33]获取索引节点表,并能根据输入的索引节点号(比如根目录文件的索引节点号是2),显示其索引节点数据结构ext4_inode的字段信息。

(2)分析上述实验代码,回答下列问题:大小(单位用字节):逻辑块、超级块ext4_super_block、组描述符ext4_group_desc、索引节点ext4_inode;逻辑块大小4096、超级块大小、组描述符ext4_group_desc大小512块、索引节点大小256字节个数及位置:块组0中组描述符占用的块数708及所占块号1057-1568、inode个数及inode表占用的块数1057、块位图block bitmap占用块数1025及所在块号1025、索引节点位图inode bitmap占用块数1041及所在块号1041;验证:执行sudo dumpe2fs /dev/sda1 | more命令,验证上述分析是否正确。

实验总结这次实验中,我了解了文件系统的基本工作原理,也明白了文件系统的主要数据结构,了解了EXT4文件系统的结构。

福大--Linux实验内容

福大--Linux实验内容

福州大学
7
实验4 Linux中的 编辑器和C程序 实验 中的vi编辑器和 程序 中的 编辑器和
1、掌握linux中获取各种帮助的主要方法 、掌握 中获取各种帮助的主要方法 which, whereis, info, --help, man等命令 等命令 2、熟悉vi编辑器的使用,主要掌握各种命令 、熟悉 编辑器的使用, 编辑器的使用 a. 三种使用模式的切换 b. 命令模式下的光标移动、删除、复制、粘贴、撤销 命令模式下的光标移动、删除、复制、粘贴、 c. 扩展命令模式的保存、退出、替换、移动复制、执 扩展命令模式的保存、退出、替换、移动复制、 行命令、缩写替换、 行命令、缩写替换、查找等 要求:编辑一个文本文件 要求:编辑一个文本文件linux.txt, 含20行,每行均为 行 I_LOVE_Linxx_ayy_C 替换成ux, 将yy替换成 将_替换成空格 替换成nd,将 替换成空格 将xx替换成 替换成 替换成 福州大学
8
实验4 C程序和 实验 程序和gdb调试 调试 程序和
要求:写一个C程序完成将命令行输入的所有参数逐行显 要求:写一个 程序完成将命令行输入的所有参数逐行显 示到屏幕上,程序名为arg.c 示到屏幕上,程序名为 #include <stdio.h> main(int argc,char *argv[]) { int i; for(i=0;i<=argc;i++) printf(“%s\n”,argv[i]); } 1. 用vi来写,直接在 中编译程序成 来写, 中编译程序成arg.exe,运行确定问 来写 直接在vi中编译程序成 , 题所在。 题所在。 2. 搜索gdb使用技巧,调试arg.exe,直到找出问题为止。 搜索 使用技巧,调试 ,直到找出问题为止。 使用技巧

实验五 Linux文件系统和权限管理

实验五 Linux文件系统和权限管理

实验5 Linux文件系统和权限管理1 实验目的1、掌握Linux文件系统的控制机制及权限的表示方法。

2、掌握权限管理常用的命令。

2 实验环境VMware中已经安装好CentOS5.4版本。

3 实验原理1、Linux文件系统权限及管理机制可参见教材P83~P84。

2、Linux常用文件权限管理命令主要有:chmod、chown两个,这些命令的使用可参见教材P86~P104或者帮助手册。

4 实验任务1、使用chm od、chown命令完成文件权限的设置、修改等操作。

5 实验步骤1、使用命令查看/etc/hosts文件的权限,其权限是。

2、使用命令可以复制文件/etc/hosts到目录/tmp 下,然后使用命令或设置其读写权限为:文件所有者可以读、写和执行,同组用户可以读和执行,其他用户只可以执行。

(要求使用两种方法实现)3、修改题目2中复制的文件的所有者:所有者为用户test(需要事先创建),组所有者为m ail,使用的命令是。

4、查看系统当前的um ask值,并设置umask值为033,创建文件word,其权限是。

(自己验证。

想一想,为什么?)5、将系统的时间设置为22:10的命令是,将日期和时间按照格式:mm/dd/yy hh:mm:ss显示输出的命令是。

6、保存2009年全年的日历在文件cal2009中的命令是。

7、将2009年1月的日历导出保存到文件cal.1中的命令是,将2009年2月的日历追加到2009年1月的日历后面的命令是。

8、假定需要显示信息:host: 主机名。

使用hostnam e命令替换显示主机的名称的操作是echo “host: “或echo “host: “。

9、假定需要在屏幕上显示** 00000 **,则可以使用命令echo 完成。

福建工程学院国脉信息学院《Linux内核主要是由进程调度

福建工程学院国脉信息学院《Linux内核主要是由进程调度

1.Linux内核主要由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信组成2.从Linux的调度来看,支持非实时(普通)和实时两种进程。

3.考虑到中断处理的效率,Linux的中断处理程序分为两个部分:上半部(top half)和下半部(bottom half)。

由外部设备引发的中断叫外部中断,处理器响应中断请求而执行的程序模块叫中断服务例程4.交换机制:将不用或暂不用的页框中的页移出,装上新的页面;linux三级分页结构5.进程的通信与同步机制有管道、信号、消息队列、共享内存和信号量集等Linux的管道有:匿名管道和命名管道;从信号的可靠性方面可以分为:可靠信号和不可靠信号。

6.linux设备驱动注册的基本参数有设备名称,设备驱动的数据结构、设备号和次设备号。

lsmod 把现在kernel 中已经安装的modules 列出来;insmod 把某个module 安装到kernel.7.Linux五种进程状态就绪可中断等待不可中断等待停止状态、僵尸状态中止状态8.Linux改造后代表有:Kurt-Linux,RED-Linux,RT-Linux、RTAI和Xenomai等。

9.Buddy算法-伙伴算法把内存中所有页面按照2n划分,其中n=0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。

划分后形成了大小不等的存储块,称为页面块,简称页块。

包含1个页面的页块称为1页块,包含2个页面的称为2页块,依此类推。

每种页块按前后顺序两两结合成一对Buddy“伙伴”系统按照Buddy关系把具有相同大小的空闲页面块组成页块组,即1页块组、2页块组……32页块组。

每个页块组用一个双向循环链表进行管理,共有6个链表,分别为1、2、4、8、16、32页块链表。

分别挂到free_area[] 数组上。

内存分配时,系统按照Buddy算法,根据请求的页面数在free_area[]对应的空闲页块组中搜索。

实验 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操作系统》
09 级系
专业班
学号:
姓名:
指导教师:陈婧
2012—2013学年第 2 学期
一、实验项目: linux操作系统的安装(red hat)
二、实验日期:20 年月日
三、实验原理:
在PC机上安装linux操作系统,包括系统分区、时区设置、系统根用户口令设置;
四、实验仪器:
PC机
Redhat网络操作系统
五、实验步骤(纸张不够写可另外加纸并应装订):
1.安装虚拟机
3.创建裸机
4.
5.设置裸机参数
7.安装red hat 系统
9.设置系统分区
10.
11.
12.
13.
15.设定系统根用户口令
16.
17.
18.
19.
20.设定时间
21.选择相关安装包
22.进入安装
23.
24.初始化设定
25.重启
26.linux相关命令的使用
27.man命令的使用
28.
29.mkdidr命令的使用(请创建/home/XXX/example目录)
30.
31.
32.cd命令的使用(请进入到/home/XXX/example)
34.ls命令的使用(显示/目录内容)
36.pwd命令的使用
38.cp命令的使用。

(将/home/XXX/example复制到/目录下)
40.rm命令的使用(删除/exa mple目录)
41.
六、指导教师评语:
实验成绩_______________ 指导教师_______________。

Lniux文件系统实验报告

Lniux文件系统实验报告

实验五文件系统
一、实验目的
1.掌握Linux系统下fdisk命令的用法。

2.掌握Linux系统下文件系统的创建、挂载与卸载。

3.掌握Linux系统下利用RAID技术实现磁盘冗余阵列的方法。

二、实验内容
1.磁盘分区管理
2.动态磁盘管理
三、实验指导
1.服务器现需要新建一块20GB的硬盘,需要对新增的硬盘进行分区管理、分区方案为/user目录所在分区10GB,/backup目录所在分区5GB,/home目录所在分区5GB。

步骤一,添加新硬盘
点击“编辑虚拟机设置”按钮,如下图
选择添加硬盘,如下图
下一步选择“SCSI(S)推荐”,如下图
下一步创建“新虚拟磁盘”,设置磁盘空间大小为“20GB”,如下图所示
单击完成,即完成了新硬盘的添加,如下图所示
通过fdisk -l命令查看新硬盘是否添加成功
步骤二,利用fdisk命令对/dev/sdb/进行分区
步骤三,格式化新建分区,在各分区上建立ext3类型的文件的系统,建立时要求检查磁盘坏块并显示详细信息。

步骤四,将/dev/sdb1挂载到/user目录,/dev/sdb2挂载到
/backup目录,/dev/sdb3挂载到/home目录
2、某公司的Linux服务器新增两块硬盘,硬盘大小为40GB。

为了实现数据保护功能,现需利用2块硬盘创建RAID1卷。

要求创建的RAID设备名为/dev/md110,并利用mkfs命令创建ext3文件系统。

最后将文件系统挂载到系统上。

四、实验总结
通过本次实验,我学习到fdisk 的一些命令和在Linux 系统下利用RAID 技术实现磁盘冗余阵列的方法。

基于Linux内核编程的实验报告(Linux内核分析实验报告)

基于Linux内核编程的实验报告(Linux内核分析实验报告)
Linux内核分析实验报告
实验题目:文件系统实验
实验目的:linux文件系统使用虚拟文件系统VFS作为内核文件子系统。可以安装多种不同形式的文件系统在其中共存并协同工作。VFS对用户提供了统一的文件访问接口。本实验的要求是
(1)编写一个get_FAT_boot函数,通过系统调用或动态模块调用它可以提取和显示出FAT文件系统盘的引导扇区信息。这些信息的格式定义在内核文件<include/linux/msdos_fs.h>的fat_boot_sector结构体中。函数可通过系统调用或动态模块调用。
fine name is---------
fine name is------��^---
fine name is---------
fine name is---------
fine name is------ L�---
fine name is------��J��J��J��Jp�J---
fine name is------&---
return -EFAULT;
}
//鏁版嵁宸茬粡瀛樺湪mydata缁撴瀯褰撲腑浜? mydatap->value[len-1] = '\0';
return len;
}
int get_file_info(char * filesystem_type, unsigned long blk_size)
{
return 0;
int len ;
struct my_proc_data *mydatap = (struct my_proc_data *) data;
if(count>MYDATA_LEN)
len = MYDATA_LEN;

W5 实验五 文件系统制作实验

W5 实验五 文件系统制作实验

实验五 嵌入式文件系统的构建【实验目的】1、了解嵌入式操作系统中文件系统的类型和作用 2、了解 JFFS2 文件系统的优点及其在嵌入式系统中的作用 3、掌握利用 BusyBox 软件制作嵌入式文件系统的方法 4、掌握嵌入式 Linux 文件系统的的挂载过程【实验原理】1、Linux 文件系统的类型 (1) 、EXT 文件系统 Ext2fs 是 Linux 的标准文件系统,它已经取代了扩展文件系统(或 Extfs) 。

扩展文件系 统 Extfs 支持的文件大小最大为 2 GB, 支持的最大文件名称大小为 255 个字符, 而且它不支 持索引节点(包括数据修改时间标记) 。

Ext2fs 取代 Extfs 具有一些优点:  Ext2fs 支持达 4 TB 的内存。

 Ext2fs 文件名称最长可以到 1012 个字符。

 在创建文件系统时,管理员可以根据需要选择存储逻辑块的大小(通常大小可选择 1024、2048 和 4096 字节) 。

 Ext2fs 可以实现快速符号链接(相当 windows 文件系统的快捷方式) ,不需为符号链接 分配数据块,并且可将目标名称直接存储在索引节点(inode)表中。

这使文件系统的 性能有所提高,特别在访问速度上。

由于 Ext2fs 文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于 Linux 的系统 (包括台式机、服务器和工作站,并且甚至一些嵌入式设备)上都使用 Ext2fs 文件系统。

(2) 、NFS 文件系统 NFS 是一个 RPC service ,它是由 SUN 公司开发,并于 1984 年推出。

NFS 文件系统能 够使文件实现共享,它的设计是为了在不同的系统之间使用,所以 NFS 文件系统的通信协 议设计与作业系统无关。

当使用者想使用远端文件时只要用“mount”命令就可以把远端文 件系统挂载在自己的文件系统上,使远端的文件在使用上和本地机器的文件没有区别。

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 文件系统

实验五职业与继续教育学院学生网络操作系统上机实验报告专业:学号:姓名:
1.2.1 Linux 文件系统
【实验目的】
熟悉Linux系统环境下文件管理相关操作命令
掌握Linux操作系统中文件管理相关的安全配置方法
【实验原理】
Linux文件系统的安全主要是通过设置文件的权限来实现的。

每一个Linux的文件或目录都有3 组属性,分别定义文件或目录的所有者、用户组号、其它人的使用权限(只读、可写、可执行、允许SUID、允许SGID等)。

特别值得注意的是,权限为SUID 和SGID的可执行文件,在程序运行过程中会给进程赋予所有者的权限,如果被黑客发现并利用,就会给系统造成危害。

【实验环境】
Linux实验台
【实验内容】
通过chown命令修改文件所有权
去掉文件的SUID 和SGID属性
通过chattr命令修改文件系统属性
实验思考题:(1.2.1 “Linux文件系统实验”思考第二题)
1、叙述常用Linux 文件系统操作,详细观察并分析设置前后系统的变化,给出分析报告。

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内核的操作系统实验体系

⑹ 将用到的pagecontrol置入使用队列(这里的队列
当 然 是 一 种 先 进 先1 出d的isef数fect 据结100构% 了 , 而 不 是 泛
指),返回⑵;
total_ instruction
12
– 最 近 最 少 使 用 的 算 法 。 LRU ( Least Recently Used)
• 编写一个模块,将它作为Linux OS内核 空间的扩展来执行,并通过insmod命令 来手工加载,通过命令rmmod来手工卸 载。
20
准备知识
• 模块的组织结构 • 模块的编译 • 模块的装载:insmod • 模块的卸载:rmmod • 模块程序中管理模块的几个文件操作
21
实验内容
• 编写一个简单的内核模块,该模块至少需要有两 个函数:一个是init_module()函数,在把模块装载 到内核时被调用,它为内核的某些东西注册一个 处理程序,或是用自身的代码取代某个内核函数; 另一个是cleanup_module()函数,在卸载模块时被 调用,其任务是清除init_module()函数所做的一切 操作。编写完成后进行该模块的编译、装载和卸 载操作。
35
一、实验目的
• 了解一个操作系统的基本组成部件 • 掌握Linux操作系统的基本操作 • 构造一个微型Linux操作系统。
36
二、实验要求
通过make工具重新配置新内核。 制作一张启动盘(Boot Disk)。 制作一张根文件系统盘(Root
Filesystem Disk)。 使用启动盘和根文件系统盘启动操作系
统。
37
三、准备知识
• 关于Linux 操作系统
• Linux 的基本组成
– Shell程序和实用程序–源自用户程序用户程序实 用

Linux12345实训(福大06网管)

Linux12345实训(福大06网管)

2007~2008学年第一学期《Linux用户基础与系统管理》实训任务书、指导书(编写:张传立)福州大学北京软件人材培养基地2007年12月目录一、实训简介---------------------------------1二、实训考核办法-----------------------------3三、有关表格格式-----------------------------3四、实训项目---------------------------------5 实验1 熟悉Linux操作系统的环境--------------5 实验2 编辑器 vi 的使用----------------------7 实验3 在Bash中操作-------------------------9 实验4 Linux 文件系统-----------------------11 实验5 管理启动-----------------------------12 实验6 用户和组管理-------------------------13 实验7 静态网络设置-------------------------15 实验8 调度任务工具-------------------------15 实验9 逻辑卷和RAID阵列--------------------16 实验10 X window 系统-----------------------18 实验11 BASH编程---------------------------18任务书根据福州大学北京软件人材培养基地2006级网络管理专业《Linux用户基础与系统管理》教学计划和教学大纲要求,经软件办和计算机系教研室研究,定于第16-18周实施《Linux用户基础与系统管理》实习,具体安排如下:一、实训简介1.组织实习领导小组:组长:张玉华副组长:张涛实习项目小组:组长:张传立成员:张传立 (讲师)2.实习目的:通过《Linux用户基础与系统管理》的实习,使学生在完成《Linux用户基础与系统管理》课程的基础上,进一步综合应用所学知识更加熟悉Linux的操作,以提高学生的综合应用能力,将所学知识实用化,以总结、拓宽原有的操作系统知识、提高实际动手能力,以使理论和实际更好的结合起来,为后续课程的学习奠定坚实的基础。

实验(五)Linux系统调用的编程技术 - 副本

实验(五)Linux系统调用的编程技术 - 副本

南京工程学院实验报告书课程名称Linux系统分析实验名称Linux系统调用的编程技术院系专业班级学生姓名学生学号指导教师成绩实验目的和要求:1、了解Linux系统调用2、仔细分析汇编代码调用系统调用的工作过程,特别是参数的传递方式等。

3、总结部分需要阐明自己对“系统调用的工作机制”的理解。

实验条件:1、装有Linux操作系统的微型计算机;实验过程:系统调用的库函数就是读者使用的操作系统提供的 API(应用程序编程接口), API 只是函数定义。

系统调用是通过软中断向内核发出了中断请求, int 指令的执行就会触发一个中断请求。

libc 函数库定义的一些 API 内部使用了系统调用的封装例程,其主要目的是发布系统调用,使程序员在写代码时不需要用汇编指令和寄存器传递参数来触发系统调用。

一般每个系统调用对应一个系统调用的封装例程,函数库再用这些封装例程定义出给程序员调用的 API,这样把系统调用最终封装成方便程序员使用的库函数。

libc 提供的 API 可能直接提供一些用户态的服务,并不需要通过系统调用与内核打交道,比如一些数学函数等,但涉及与内核空间进行交互的 API 内部会封装系统调用。

一个 API 可能只对应一个系统调用,也可能内部由多个系统调用实现,一个系统调用也可能被多个 API调用。

不涉及与内核进行交互的 API 内部不会封装系统调用,比如用于求绝对值的数学函数abs()。

对于返回值,大部分系统调用的封装例程返回一个整数,其值的含义依赖于对应的系统调用,返回值−1 在多数情况下表示内核不能满足进程的请求, libc 中进一步定义的errno 变量包含特定的出错码。

下面调用系统库函数 time()来获取系统的时间,即使用库函数 API time() 来获取系统当前时间作为一个范例,通过代码和实践来进一步理解和体会系统调用。

接下来我们会通过系统库函数和直接使用嵌入式汇编代码两种方式,来触发同一个系统调用获取当前系统时间。

(实验五)

(实验五)

《嵌入式系统案例分析与设计》课程实验报告班级:学号:姓名:指导老师:成绩:实验五构建Linux根文件系统一、目的与任务目的:掌握构建Linux根文件系统的方法。

任务:构建基本的Linux根文件系统。

二、内容、要求与安排方式1、实验内容与要求:1)编译安装Busybox;2)安装glibc库;3)构建etc目录;4)构建dev目录;5)制作文件系统映象文件。

2、实验安排方式:采用1人1组,上机在Linux系统与嵌入式开发板或试验箱上进行编程实验。

三、实验设备1、所用设备:PC机一台与嵌入式开发板或试验箱。

四、实验过程1、编译安装Busybox;(1)解压在源码所在位置右键在此打开终端,输入解压命令,文件名与自己所下载版本文件对应解压命令:tar -jxvf busybox-1.27.2.tar.bz2解压后当前文件夹生成一个文件夹,进入到解压后的文件夹进入文件夹命令:cd busybox-1.27.2/配置BusyBox:make menuconfig执行命令之后如下图:很快就会弹出一个蓝色配置窗口选择Busybox Settings—>Build Options—>,选择[] Build Busybox as a static binary(no shared libs)按Y选中ESC退出(2)编译命令:make安装命令:make install安装完成后源代码目录下会生成一个_install目录,切换到此目录查看所有文件2、安装glibc库;(1)编译安装glibc下载glibc[root@localhost test]# pwd/test[root@localhost test]# wget /gnu/glibc/glibc-2.9.tar.bz2下载glibc-linuxthreads[root@localhost test]# wget /gnu/glibc/glibc-linuxthreads-2.5.tar.bz2 解压[root@localhost test]# tar -jvxf glibc-2.9.tar.bz2[root@localhost test]# cd glibc-2.9[root@localhost glibc-2.9]# tar -jvxf ../glibc-linuxthreads-2.5.tar.bz2(2)配置[root@localhost glibc-2.9]# cd ..[root@localhost test]# export CFLAGS="-g -O2 -march=i486"[root@localhost test]# mkdir glibc-build[root@localhost test]# cd glibc-build[root@localhost glibc-build]# ../glibc-2.9/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin安装[root@localhost glibc-build]# make[root@localhost glibc-build]# make install3、构建etc目录;执行命令:mkdir etc 创建一个etc目录执行命令:cd etc 进入该目录执行命令:vim mdev.conf 创建mdev.conf执行命令:vim inittab 创建inittab文件内容如下:#/etc/inittab::sysinit:/etc/init.d/rcSs3c2410_serial0::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r4、构建dev目录;使用静态方法构建,就是根据预先知道要挂载的驱动,用mknod命令逐一构建各种设备节点。

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

实验五(1) Linux文件系统实验
实验目的
学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。

实验内容
1.学习文件链接的概念和使用(步骤一、步骤二)
2.学习文件权限的概念和管理机制,并学会使用(步骤三)
3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至少完成两例)
实验步骤
一、文件链接与复制(hard link)
1.使用vi a创建一个文件a
Vi a
2.使用ln a b命令创建一个链接
使用cp a c创建一个复制版本
观察3个文件的大小、时间、属主(owner)等属性
3.修改文件a
4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性
5.
6.使用ls –li命令,观察文件a, b, c的inode编号
7.使用rm a删除文件a
8.观察文件b, c是否仍然存在,内容如何
b、c依然存在,b为a改变的内容,c内容不变
9.使用rm b删除文件b,再观察文件b, c是否存在
b不存在,c存在
二、符号链接(软链接)symbolic link / soft link
1.创建文件a
2.使用ln –s a b创建符号一个链接
3.执行上述步骤3-8,观察有什么异同
三、不同用户之间的硬链接和符号链接
1.在用户stu下创建文件a
注意使用chmod命令,将主目录(~stu)权限改为所有其它用户可访问(r-x)(如果不知道chmod命令的用法,可以使用man chmod来查阅)
chmod o+rx ~
2.在另一个登录窗口内(使用Alt+F2切换到另一个登录窗口,使用Alt+F1切换回原登录窗口),以用户stu2登录,分别使用ln ~stu/a ha和
ln –s ~stu/a sa命令创建硬链接ha和符号链接sa
观察3个文件的大小、时间、属主(owner)等属性
3.在用户stu下,修改文件a;在用户stu2下分别观察文件ha和sa的内容
4.在用户stu下,修改文件a的访问权限;在用户stu2下,用ls –l命令观察ha和sa的访问权限、用户属主等信息,并使用cat命令、cp命令、vi命令验证访问控制权限的作用
5.两个用户下,分别使用ls –li命令检查文件a, ha, sa的inode编号,想一下为什么6.在用户stu2下删除ha;观察sa存在与否?用户stu下文件a存在与否?
7.在用户stu下可以删除文件a吗?删除后,用户stu2下的文件sa还存在吗?内容是什么?
四、Linux中与文件系统相关的系统调用
1.通过使用man命令,查阅以下的系统调用的使用手册。

1)文件操作
open, close, read, write, seek
creat, truncate, mknod, dup, dup2
link, unlink, rename, symlink
chmod, chown, umask
fcntl, flock, fstat, lstat, stat, utime
fsync, fdatasync
2)目录操作
mkdir, chdir, rmdir
readdir, getdents
3)库函数
fopen, fclose, fread, fwrite, fscanf, fprintf, fseek ,ftell, feof等
2.文件系统的系统调用的编程练习
利用上面的系统调用,试写出自己的命令程序,完成以下功能(要求:1)-7)至少完成5例,8)-10)至少完成2例):
1)如何创建一个文件?
2)如何删除一个文件? (rm 命令)
3)如何将一个文件拷贝到另一个文件? (cp 命令)
4)如何重命名一个文件? (mv file命令)
5)如何截断一个文件(或使其长度为零)?How to truncate a file (or make it be of length
zero)?
6)如何向一个文件中追加内容?
7)如何锁定一个文件? (read lock, write lock)
8)如何创建一个目录? (mkdir 命令)
9)如何删除一个目录? (rmdir 命令)
10)如何遍历一个目录(或称浏览该目录下所有文件?)?(ls –lR 命令)
实验五(2) Linux文件系统实验
实验内容:
1.仔细阅读以下代码;
2.画出系统功能框图
3.程序注释
4.截屏程序运行结果,分析说明结果。

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<syslog.h>
#include<string.h>
#include<stdlib.h>
#define MAX 128
int chmd();
int chmd ()
{
int c;
mode_t mode=S_IWUSR;
printf(" 0. 0700\n 1. 0400\n 2. 0200 \n 3. 0100\n "); //还可以增加其它权限printf("Please input your choice(0-3):");
scanf("%d",&c);
switch(c)
{
case 0: chmod("file1",S_IRWXU);break;
case 1: chmod("file1",S_IRUSR);break;
case 2: chmod("file1",S_IWUSR);break;
case 3: chmod("file1",S_IXUSR);break;
default:printf("You have a wrong choice!\n");
}
return(0);
}
main()
{
int fd;
int num;
int choice;
char buffer[MAX];
struct stat buf;
char* path="/bin/ls";
char* argv[4]={"ls","-l","file1",NULL};
while(1)
{
printf("********************************\n");
printf("0. 退出\n");
printf("1. 创建新文件\n");
printf("2. 写文件\n");
printf("3. 读文件\n");
printf("4. 修改文件权限\n");
printf("5. 查看当前文件的权限修改文件权限\n");
printf("********************************\n");
printf("Please input your choice(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 0:close(fd); //关闭file1文件
exit(0);
case 1:
fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750); /*创建file1*/ if(fd==-1)
printf("File Create Failed!\n");
else
printf("fd = %d\n",fd); /*显示file1*/
break;
case 2:
num=read(0,buffer,MAX); //从键盘里面读取最多128个字符
write(fd,buffer,num); //把读入的信息送到file1里面去
break;
case 3:
/* 把file1文件的内容在屏幕上输出*/
read(fd,buffer,MAX);
write(1,buffer,num);
break;
case 4:
chmd ();
printf("Change mode success!\n");
break;
case 5:
execv(path,argv); //执行ls –l file1
break;
default:
printf("You have a wrong choice!\n");
}
}
}。

相关文档
最新文档