中南大学Linux操作系统实验报告学生学院信息科学与工程学院指导老师胡小龙专业班级完成时间目录1.实验一Linux的安装 (3)1.1 实验目的 (3)1.2 实验设备 (3)1.3 实验原理 (3)1.4 实验步骤 (3)2. 实验二Linux基本操作 (5)2.1 实验目的 (5)2.2 实验设备 (5)2.3 实验原理 (6)2.4 实验步骤 (6)3. 实验三Linux系统管理 (10)3.1 实验目的 (10)3.2 实验设备 (10)3.3 实验原理 (10)3.4 实验步骤 (11)4. 实验四Linux Shell程序设计 (14)4.1 实验目的 (14)4.2 实验设备 (14)4.3 实验原理 (15)4.4 实验步骤 (17)5. 实验五Linux 高级程序设计 (20)5.1 实验目的 (20)5.2 实验设备 (21)5.3 实验原理 (21)5.4 实验步骤 (21)6. 实验六Linux核 (23)6.1 实验目的 (23)6.2 实验设备 (23)6.3 实验原理 (23)6.4 实验步骤 (23)Linux操作系统1.实验一Linux的安装1.1 实验目的(1)了解硬盘分区的概念和方法;(2)掌握硬盘的分区规划;(3)掌握Linux操作系统的安装和配置过程。
1.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
1.3 实验原理Linux可以以多种方式安装在PC机上:(1)独立分区安装、(2)DOS分区安装和(3)虚拟机VMWare下安装。
鉴于VMware下安装对原来系统影响较小且不影响本实验目的,因此采用VMWare下安装方式。
1.4 实验步骤(1)在Windows XP下安装VMware 5.5(2)配置虚拟机(3)启动虚拟机(4)启动Linux安装过程(5)安装过程配置(6)安装后配置(7)第1次启动VMWare下Linux操作系统2.实验二Linux基本操作2.1 实验目的(1)复习Linux基本命令;(2)掌握常用Linux命令。
2.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
2.3 实验原理(1)练习命令行模式下的常用命令:man:命令帮助ALT-Fx:虚终端切换常用命令:cat、Ls、ps、chmod、kill、ln、cp、mv、rm、cd、pwd、mkdir、chown、who、w、wc、whoami、date、uname等(2)编辑器vi的使用:使用vi建立并修改一个文本文件(3)档案管理rpm、gzip、tar等命令(4)网络命令telnet、ftp、talk2.4 实验步骤(1)常用命令1. 使用man man命令查询man命令的Manual:NAME章节指示了该命令的名字和简介;SYNOPSIS章节列出了该命令可用的使用方式及其符号;DESCRIPTION章节详细描述各使用方式及符号的作用;2. cat查看/etc/fstab可以看出系统挂载了3个文件系统,分别挂在/、/home、swap,它们都是通过UUID指定其物理分区来定位的。
3. ls列目录4. ps列进程5. vi编辑器6. tar解压缩7. telnet远程登录路由器ssh远程登录iPad(2)其他3.实验三Linux系统管理3.1 实验目的(1)掌握Linux基本系统管理命令;(2)掌握基本管理方法;(3)初步了解Linux中与系统管理相关的有关配置文件。
3.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
3.3 实验原理(1)用户管理adduser、useradd、passwd等观察:/etc/passwd文件(2)文件系统管理df、du命令使用mount、umount命令使用:安装usb盘或者光盘,查看分析/etc/fstab文件(3)存储器free:了解存储器使用情况(4)关机halt、shutdown –h、init 0reboot、shutdown -r now并比较它们之间的差别(5)网络配置netconfig的使用(6)启动配置/etc/inittab:查看、修改并观察其响应3.4 实验步骤(1)用户管理1. adduser:2. passwd命令(2)文件系统管理1. df、du:2. mount、umount:3. 查看fstab:(3)存储系统free命令查看存储器状态(4)网络配置ifconfig4.实验四Linux Shell程序设计4.1 实验目的(1)掌握Linux shell程序运行方法;(2)掌握Linux Shell程序基本语法;(3)了解Linux环境变量;(4)编写简单Linux shell程序。
4.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
4.3 实验原理(1)查看/etc/.profile文件:相当于DOS下autoexe.bat (2)通配符“*”、“?”、“[]”的使用$ls [a-c]* 和$ls [a,m,t]*命令(3)重定向和管道的使用ls | morecat > test.txt(4)变量$lookup=/usr/mydir$echo $lookup$export lookup:让进程使用(5)编辑并运行以下程序(shell程序控制结构)1 fortest#!/bin/bashfor a in x y zdoecho now a=$adone2 fortest1#!/bin/bashfor adoecho now a=$adone3 functest#!/bin/bashsetup(){echo setup…}do_date(){date}chgdir(){cd $1}do_datesetupchgdir4 paramtest#!/bin/bashecho filename:$0echo arguments:$*echo number arg:$#echo arg2:$2shiftecho number arg:$#echo arg2:$2set hello,everoneecho args:$*echo arg2:$25 untiltest#!/bin/bashnumber=0until (test $number –gt 5) doecho “$number”number=`expr $number + 1` done4.4 实验步骤(1)查看文件屏幕上的容定向到text中。
(2)输入输出重定向在Linux命令行模式中,如果命令所需的输入不是来自键盘,而是来自指定的文件,这就是输入重定向。
同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。
command>file:将命令的输出结果重定向到一个文件。
command>&file:将命令的标准错误输出一起重定向到一个文件。
command>>file:将标准输出的结果追加到文件中。
command>>&file:将标准输出和标准错误输出的结构都追加到文件中。
如 #ls –l > list.txt(3)管道pipe将某一个程序的输出送到另一个程序的输入command1| command2 [| command3...]也可以连同标准错误输出一起送入管道:command1| &command2 [|& command3...](5) $lookup=/usr/mydir该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,$echo $lookup结果显示:/usr/mydir为了使变量能被子进程使用,可用exprot命令,例如:$lookup=/usr/mydir(6)运行shell程序Shell程序1:Shell程序2:Shell程序3:Shell程序4:Shell程序55.实验五Linux 高级程序设计5.1 实验目的(1)了解Linux操作系统下应用程序开发流程(2)掌握gun工具链的使用(3)了解Linux高级编程技巧(例如IPC机制、系统调用等)5.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
5.3 实验原理(1)编写一个简单的C语言程序,编写Makefile文件。
了解编译过程,并用gdb进行调试。
(2)以下任选其一:1.编写一个多进程通信程序,采用Message Queue或shared Memory或者Maped File机制进行通信2.编写一个多线程程序(pthread),实现2程同步互斥5.4 实验步骤(1)写出源程序,并编译运行C编程:6.实验六Linux核6.1 实验目的(1)了解Linux操作系核(2)掌握核编译和核升级方法(3)了解有关核编程6.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
6.3 实验原理(1)核配置和编译(课后完成)(2)察看/proc存文件系统下的文件,写出每个目录容(3)编写一个简单的字符虚拟设备程序(以模块方式编译、加载、使用)6.4 实验步骤struct file_ operations status_ fops = {NULL, /* seek */read_ status,write_ status,NULL, /* readdir */NULL, /* poll */NULL, /* ioctl */NULL, /* mmap */open_ status,NULL, /* flush */close_ status,NULL, /* fsync */NULL, /* fasync */NULL, /* check_ media_ change */NULL, /* revalidate */NULL, /* lock */};创建这个设备:mknod /dev/status c <major_num> 0static int major_ number = 0; /* pass a major of 0 toregister_ chrdev* for dynamic allocation*/int init_ module( void){major_ number = register_ chrdev( 0, "status", &status_ fops);if (major_ number < 0) {printk( KERN_ WARNING "Dynamic allocation of major failed");return major_ number; /* return error code */}printk( KERN_ INFO "Assigned major number %i.\ n", major_ umber);return 0;}int cleanup_ module( void){ printk( KERN_ INFO "Unregistering major number %i.\ n", major_ number); unregister_ chrdev( major_ number, "status"); /* give back our number */return 0;}static ssize_ t write_ status( struct file *file, const char *buffer, size_ t count, loff_ t *ppos) {return -EINVAL;/* we’ve decided not to support writes for now */}static int open_ status( struct inode *inode, struct file *file){MOD_ INC_ USE_ COUNT; /* ensures that currently used modules aren’t unloaded*/ return 0;}static int close_ status( struct inode *inode, struct file *file){MOD_ DEC_ USE_ COUNT; /* rmmod won’t run unless USE_ COUNT is 0 */return 0;}static char *message = "All your base are belong to us.";static ssize_ t read_ status( struct file *file, char *buffer,size_ t count, loff_ t *ppos){int char_ count = 0;int count_ to_ copy = 0;while (message[ char_ count] != '\ 0')char_ count ++; count_ to_ copy = (char_ count > count) ? count : char_ count;copy_ to_ user( buffer, message, count_ to_ copy); /* write to the user- space buffer */ return char_ count;}。