linux操作系统实验指导书新

发布时间:2021-09-26 07:49:19

Linux 操作系统
实 验 指 导 书
网络工程教研室 二零一三年五月制

实验一: Red Hat Linux 9.0 系统的安装
一、实验目的 1.掌握安装 Linux 系统时收集计算机硬件信息的方法 2.掌握 Linux 硬盘的分区方法和硬盘分区的大小 3.掌握 Linux 系统安装的过程和在安装过程中各选项的设置
二、实验环境 微型计算机一台,Red Hat Linux9.0 系统盘一套 VMware Workstation v9.0
sn:8UX0R-686FT-Z054V-4PDQPORLCT4T-24GFE-A816V-4MTQQ
三、实验内容及步骤 1.安装前的准备工作
步骤一:关闭 BIOS 中的病毒报警功能,如果硬盘大于 8G 设置硬盘为 LBA 模式。 步骤二:备份硬盘上的所有重要数据! 步骤三:为 Linux 系统准备足够的硬盘空间。
2.安装 Red Hat Linux 9.0 将 Red Hat Linux 9.0 安装光盘插入光驱,然后启动计算机,即可从 CD-ROM 启动 Linux 安装程序。
步骤 1:boot: 提示。
机器启动之后,显示 boot: 提示屏幕,其中包括了几个不同的引导选项,每个引导选项 还有一个或多个与之关联的帮助屏幕。要访问帮助屏幕,可按在屏幕底部列出的恰当的功能 键。
提示:请留意两个问题: · 当看到了 boot: 提示后,如果在一分钟内不采取任何行动,安装程序会自动开始 (默认 单击回车键) 。要禁用这项功能,可按帮助屏幕上的功能键之一。 · 如果按了帮助屏幕上的功能键,则从引导介质中读取帮助信息时会出现稍微的延迟。 正常情况下,只需按回车键来引导。请留意引导消息以便查看 Linux 内核是否检测到了你 的硬件。如果硬件被正确地检测到,可继续到下一个部分。如果没有能正确地检测硬件,可能 会需要在专家模式下重新开始安装。
为以图形方式从光盘中安装 Red Hat Linux,单击回车键。
步骤 2:安装程序检测用户系统并试图识别光驱。如果找到了,会进入安装进程的下一
阶段。 这时若要中止安装进程,应取出引导磁盘或光盘,重新引导机器。在“即将安装”屏幕
(步骤 19) 之前的任何时候,都可以安全地中止安装。
步骤 3:欢迎使用 Red Hat Linux。
“欢迎”屏幕并不提示做任何输入。可阅读左侧面板内的帮助文字来获得附加的说明, 以及关于如何注册 Red Hat Linux 产品的信息。

注意屏幕左下角的“隐藏帮助”按钮。帮助屏幕是默认打开的。如果不想查看帮助信息, 可单击“隐藏帮助”把屏幕上的帮助部分最小化。
单击 Next 继续。 步骤 4:语言选择。 使用鼠标选择想在安装中使用的语言。选择恰当的语言会在稍后的安装中帮助定位时区 配置。安装程序将会试图根据这个屏幕上所指定的信息来定义恰当的时区。
选定恰当的语言 (例如简体中文) 后,单击 Next 继续。 步骤 5:键盘配置。 使用鼠标选择要在本次安装中和今后用作系统默认的键盘布局类型 (如 U.S.English) , 选定后,单击“下一步”继续。
如果要在安装结束后改变键盘类型,可使用键盘配置工具,即:在 shell 提示下键入 redhat –config -keyboard 命令。如果不是根用户,系统会提示输入根口令后再继续。
步骤 6:鼠标配置。

为系统选择正确的鼠标类型。如果找不到确切的匹配,可选择确定与系统兼容的鼠标类 型。
· 如果找不到一个能确定与你的系统兼容的鼠标,可根据鼠标的键数和它的接口,选 择“通用”项目中的一个。
· 如果有一个带滑轮的鼠标,可选择“通用-带滑轮鼠标”项目作为兼容的鼠标类型。 · 如果有一个 PS/2、USB 或总线鼠标,则不必挑选端口或设备。而如果有一个串口鼠 标,则应该选择该鼠标所在的正确端口和设备。 · 如果要在安装结束后改变鼠标配置,可使用鼠标配置工具,即:在 shell 提示下键入 redhat –config -mouse 命令。如果不是根用户,它会提示输入根口令后再继续。 要把鼠标配置成左手用鼠标,可重设鼠标按钮的顺序。方法是:重新引导系统后,在 shell 提示下键入 gpm –B 321。 选定鼠标型号后,单击“下一步”继续。 步骤 7:选择安装还是升级。 如果安装程序在系统中检测到从前安装的 Red Hat Linux 版本,则“升级检查”屏幕就 会自动出现。
这里,我们考虑在系统上执行 Red Hat Linux 的新安装,选择“执行 Red Hat Linux 的新

安装”,然后单击“下一步”继续。 步骤 8:安装类型。 选择要执行的安装类型。Red Hat Linux 的安装类型选项有“个人桌面”、“工作站”、“服
务器”、“定制”和“升级”。
选择“个人桌面”,单击“下一步”继续。 步骤 9:磁盘分区设置。 分区允许将硬盘驱动器分隔成独立的区域,每个区域都如同是一个单独的硬盘驱动器。 如果在机器上运行多个操作系统,分区将特别有用。
可以选择自动分区或者使用 Disk Druid 来手工分区。这里,建议选择安装程序自动分区, 单击“下一步”继续。
步骤 10:自动分区允许用户选择删除哪些数据:

· “删除系统内所有的 Linux 分区”: 只删除从前安装 Linux 时创建的分区。这将不 会影响硬盘驱动器上可能会有的其它分区。
· “删除系统内的所有分区”: 选择这一选项将删除硬盘驱动器上的所有分区 (包括 由其它操作系统如 Windows 所创建的分区或 NTFS 分区) 。
· “保存系统内的所有分区”: 保留当前的数据和分区 (假设当前硬盘驱动器上有足 够的可用空间的话) 。
使用鼠标选择想安装 Red Hat Linux 的硬盘驱动器。如果有两个或以上硬盘驱动器,应 该选择包含本次安装的硬盘驱动器。没有被选择的硬盘驱动器及其中的数据将不会受到影 响。
要评审并对自动分区创建的分区做一些必要的改变,可选择“评审”选项,然后单击“下 一步”来向前移动,将会看到在 Disk Druid 中创建的分区。如果它们没有满足你的需要,还 能够对这些分区进行修改。
选择接受目前的分区设置,单击“下一步”继续。 步骤 11:引导装载程序配置。 为了在启动机器的时候直接引导系统 (而不是使用引导盘) ,通常需要安装一个引导装 载程序。引导装载程序是计算机启动时所运行的第一个软件,它的责任是载入操作系统内核 软件并把控制转交给它,然后,内核软件再初始化剩余的操作系统。 安装程序提供了两个引导装载程序:GRUB 和 LILO。
· GRUB 是一个默*沧暗墓δ芮看蟮囊甲霸爻绦颉

· LILO 是用于 Linux 的灵活多用的引导装载程序。 这里,选择 GRUB 为引导装载程序。 如果安装引导装载程序,应该创建一个口令来保护系统。因为若没有引导装载程序口令, 能够访问该系统的用户将可以向内核传递选项,从而减弱系统安全性;若使用了引导装载程 序口令,用户必须先输入口令才能选择非标准的引导选项。 为此,确定选择“使用引导装载程序口令”的复选框,输入口令和确认并继续。 步骤 12:网络配置。 安装程序会自动检测到机器中拥有的任何网络设备,并把它们显示在“网络设备”列表 中。
选定网络设备后,单击“编辑”,从弹出的“编辑接口”屏幕上,可以选择通过 DHCP (动 态主机配置协议) 来配置网络设备的 IP 地址和子网掩码 (否则手工配置) 。可以选择在引导 时激活该设备。
如果有关问题不能确定的话,请和网络管理员联系以寻求协助。 如果网络设备有一个主权名 (全限定域名) ,可以选择要 DHCP 自动检测它,或者在提 供的字段中手工输入主机名。 最后,如果手工输入了 IP 和子网掩码信息,可能还得输入网关、主要、次要、和第三 DNS 地址。 即便你的计算机不属于任何网络,也可以为系统定义一个主机名。如果你输入一个名称, 则你的系统就被称为 localhost 。 要在安装结束后改变网络配置,可使用网络管理工具,即:在 shell 提示下键入 redhat –config -network 命令。如果不是根用户,系统会提示输入根口令后再继续。 网络配置完毕,单击“下一步”继续。 步骤 13:防火墙配置。 Red Hat Linux 为增加系统安全性提供了防火墙保护。防火墙存在于你的计算机和网络 之间,用来判定网络中的远程用户是否有权访问你的计算机上的哪些资源。正确配置的防火 墙可以极大地增加系统的安全性。 为系统选择恰当的安全级别。

· “高级”:系统不会接受那些没有被具体指定的连接 (除了默认设置,例如 DNS 回 应、DHCP 之外) 。如果要把系统连接到互联网上,但是并不打算运行服务器,这是最安全 的选择。如果需要额外的服务,可以选择“定制”来具体指定允许通过防火墙的服务。
· “中级”:防火墙将不准系统访问某些资源。可以选择“定制”来允许具体指定的服 务穿过防火墙。
· 无防火墙:给予完全访问权并不做任何安全检查。建议只有在一个可信任的网络 (非 互联网) 中运行时才选此项。可选择“定制”来添加信任的设备或允许其它的接入接口。
· “信任的设备”:选择“信任的设备”中的任何一个将会允许系统接受来自这一设备 的全部交通而不受防火墙规则的限制。建议不要将连接到互联网之类的公共网络上的设备定 为“信任的设备”。
· “允许进入”:启用这些选项将允许具体指定的服务穿过防火墙。注意:在工作站类 型安装中,大多数这类服务在系统内没有被安装。
要在安装完毕后改变安全级别配置,可使用安全级别配置工具,即:在 shell 提示下键 入 redhat –config -securitylevel 命令。如果不是根用户,系统会提示输入根口令后再继续。
防火墙配置完毕,单击“下一步”继续。 步骤 14:语言支持的选择。 可以安装并支持多种语言。安装中必须选择一种语言作为默认语言。当安装结束后,系 统中将会使用默认语言。如果选择安装了其它语言,则可以在安装后改变你的默认语言。
只打算在系统上使用一种语言时,则仅选择该种语言将会节省大量磁盘空间。默认语言

是在安装中选择要使用的语言。 要在安装结束后改变语言配置,可使用语言配置工具,即:在 shell 提示下键入 redhat
–config -language 命令。如果不是根用户,系统会提示输入根口令后再继续。 接受系统默认语言 Chinese (P. R. of China) ,单击“下一步”继续。 步骤 15:选择时区。 可以通过选择计算机的物理位置,或者指定时区和通用协调时间 (UTC) 间的偏移来设
置时区。
要在安装完成后改变时区配置,可使用时间和日期属性工具,即:在 shell 提示下键入 redhat –config -date 命令来启动时间和日期属性工具。如果不是根用户,系统会提示输入根 口令后再继续。
时区选定后,单击“下一步”继续。 步骤 16:设置根口令。 设置根帐号 (即系统管理员帐号) 及其口令是安装过程中最重要的步骤之一。根帐号用 来安装软件包,升级 RPM,以及执行多数系统维护工作。作为根用户登录可获得对系统的 完全控制权。
由于根用户 (又称超级用户) 对整个系统有完全的存取权,所以最好只在执行系统维护 或管理时才登录为根用户,而创建一个非根帐号来做日常工作。若需要快速修复某项事务时,

可以用 su - 命令暂时登录为根用户。遵循这个最基本的原则将会减少因键入错误或不正确 的命令而损害系统。
安装程序会提示为系统设置一个根口令。如果根口令没有输入,安装程序将不允许继续。 根口令必须至少包括六个字符;所键入的口令不会在屏幕上显示。如果输入两次的根口 令不匹配,安装程序将会要求重新输入口令。口令是区分大小写的。 要在安装后改变根口令,可以使用根口令配置工具,即:在 shell 提示下键入 redhat –config -rootpassword 命令。如果不是根用户,系统会提示输入根口令后再继续。 根口令设置完毕,单击“下一步”继续。 步骤 17:个人桌面的默认设置。 当分区被选定并按配置格式化后,便可以选择要安装的软件包了。除非选择定制安装, 安装程序将会自动选择多数软件包。
单击“下一步”继续。 步骤 18:选择软件包组。 在“其它”栏 (组件列表的结尾处) 选择“全部”以安装包括在 Red Hat Linux 中的所 有软件包。
也可以在选择想安装的软件包组后,用鼠标选择或取消选择单个软件包。要了解某一指 定软件包的详情,可单击该软件包的名称,关于它的信息将会在屏幕底部出现。

某些软件包 (如内核和某些库) 是每个系统所必须的,被系统默认选定,它们不能被选 择或被取消选择。
软件包组设置完毕,单击“下一步”继续。 步骤 19:即将安装。 至此,应该可以看到一个为安装 Red Hat Linux 而准备好的屏幕。 当你重新引导系统后,一份完整的安装日志可在 /root/install.log 中找到,以备今后参考。 如果由于某种原因希望中*沧敖蹋虼舜κ强梢园踩∠⒅匦乱枷低车淖詈蠡 会。一旦按下了“下一步”按钮,分区将会被写入,软件包将会被安装。 因此,请注意:如果想中止安装,应该在任何信息被写入硬盘驱动器之前重新引导。 继续安装,单击“下一步”继续。 步骤 20:安装软件包。 在所有软件包安装完成之前,将不能进行任何其他操作。安装的快慢取决于所选择软件 包的数量和计算机的运行速度。
步骤 21:依据安装程序的提示,依次插入第 2、第 3 张 Red Hat Linux 系统光盘。 步骤 22:创建引导盘。 要创建一张引导盘,可在软盘驱动器中插入一张空白的、格式化了的磁盘,然后单击“下 一步”继续。

强烈建议你创建一张引导盘。如果由于某种原因,系统无法正确引导时,引导盘将能够 正确引导 Red Hat Linux 系统。
引导盘创建完成后,从磁盘驱动器中取出并给它注以明确标签。 也可以在安装结束后再创建引导盘,即在 shell 提示后键入 man mkbootdisk。 步骤 23:视频卡配置。 安装程序给出一个视频卡列表供选择。选定后 (或者接受系统的默认选择) ,单击“下 一步”继续。
步骤 24:显示器配置。 安装程序给出一个显示器列表供选择。选定后 (或者接受系统的默认选择) ,单击“下 一步”继续。

步骤 25:定制图形化配置。 设置屏幕“色彩深度”和“屏幕分辨率” (或者接受系统的默认选择) ,单击“下一步” 继续。
步骤 26:安装完成。 至此,安装完成。屏幕将显示祝贺信息,并提示做好重新引导系统的准备。注意移去用 于安装的在软驱中的软盘或在光盘驱动器中的光盘。 单击“退出”按钮来重新引导系统。 四、实验报告要求 1.观察安装过程中各项配置的设置方法和设置的值,并做好记录 2.根据实验记录,写出实验报告

实验二:Linux 的桌面应用
一、实验目的 1.掌握 X Window 的体系结构 2.掌握 GNOME 环境下文件操作和系统设置 3.掌握 KDE 环境下的有关文件的相应操作和系统是设置
二、实验环境 安装了 Red Hat Linux9.0 系统的计算机一台
三、实验内容和操作步骤 相关知识回顾 X Window(简称为 X)是麻省理工学院 1984 年开发的一种窗口化的图形应用 环境,这种环境既可以在单个计算机上运行,也可以在客户/服务器模式下在 X 协议 的支持下工作。具体的讲,X 系统由 X 服务程序(X Server)和 X 客户程序(X Client) 构成:X 服务程序提供控制显示和输入设备的底层操作,比如在屏幕上画线,以生 成窗口,监视用户的键盘和鼠标操作;X 客户程序是实际的窗口应用程序,只不过

屏幕图形输出和用户鼠标、键盘输入的部分需要通过 X 协议,使用 X 服务程序控制 硬件完成;X 协议是建立在网络协议之上的通信协议。总之,用户通过 X 服务程序 与 X 客户程序进行通信,以完成鼠标对客户程序的操作(比如打开、关闭、移动窗 口、双击、单击等),以及窗口在屏幕上的显示,因此,在某些情况下,用户在一台 计算机上启动 X 服务程序,X 客户程序在远程另外一台计算机上,所有客户程序的 计算工作在那台计算机完成,而用户所在的计算机只完成绘图和操作鼠标的工作。 目前使用的 X 的版本是 X11R6,即第 11 版第 6 次发行,常用的 X 服务程序有两个: XFree86 和 X.org。
X 服务程序只提供基本的图形输出的功能,窗口管理器提供包括窗口位置、背 景设置、目录、菜单等调用 X 服务程序实现窗口控制的元素,除此,窗口管理器是 用户实际“操作”的 X 客户程序,它以窗口为单位,管理了桌面的外观。比较著名 的窗口管理器包括:GNOME, KDE 等,如图分别显示
典型的 GNOME 桌面

典型的 KDE 桌面 1、启动本地方式的 X 系统 如果 Linux 启动后没有进入窗口方式的用户登录界面,则需要登录字符界面,再使用命 令 startx。打开 X 系统后,如果还需要访问命令行界面,则使用组合键 Ctrl-Alt-Fn,n 为数 字 1-6,例如,使用组合键 Ctrl-Alt-F1 就返回到默认的命令行界面;而使用组合键 Ctrl-Alt-F7 则又返回到图形界面。 2、GNOME 桌面结构 下图展示了窗口管理器 GNOME 的桌面结构。
GNOME 桌面的结构 要求学生使用 GNOME 的文件管理器,拷贝/etc/resolve.conf 到用户主目录下。

3、GNOME 桌面下使用 Mozilla 浏览万维网 方法:单击横贯桌面底部的面板图标,如下图中 面板 单击此图标 将出现下图画面
4、在/home 目录下建立一个子目录 date,进入 date 目录新建一个文本文件 a.txt,添加一定 内容后复制到/tmp 文件夹中,最后删除/home/date 及其包含的文件

5、注销 退出 GNOME 时,会看到一个对话框(如下图所示),它给以下几种选择:注销 GNOME(保持系统运行);重新启动机器;或完全关机。
6、切换桌面: 注销后,返回登录画面,选择屏幕下方的“会话”选项,选择 KDE
7、改变桌面背景 分别为默认的四个虚拟桌面设置不同的背景图片
四、实验报告要求 1.仔细观察实验过程中各种提示信息,记录实验中出现的问题和实验结果 2.了解各命令的作用及参数的作用 3.根据实验记录,写出实验报告

实验三:常用命令的使用(一)
一、实验目的 1. 掌握 Linux 系统启动和退出方法 2. 掌握 Linux 系统命令获得帮助的方法 3. 掌握 Linux 系统命令格式及命令使用的方法 4. 掌握 Linux 系统中常用命令的作用和命令中各选项的作用
二、实验环境 安装了 Red Hat Linux9.0 系统的计算机一台
三、实验内容及步骤 1.登录进入系统 在开机后选择启动菜单中 Linux 对应项,等待出现如图画面
在用户名对话框中输入:user(登录用户名) 回车确认后在相同位置出现口令对话框:123456(登录密码) 2.退出系统 在桌面上依次单击“主菜单→注销”命令,打开如下图
在打开的对话框,选择“关机”或“重新启动”选项,然后点击“确定”按钮,即可

完成关机或重新启动操作。 3.命令的使用方式
在 Linux 系统中打开终端的方式有以下两种: 一种是在桌面上依次单击“主菜单→系统工具→终端”可打开如图的终端窗口;另一 种是在 Linux 桌面上单击鼠标右键,从弹出的快捷菜单中选择“终端”命令,也可打 开终端窗口。

4.获取命令帮助

命令 man

语法:man (command)

功能:查阅指定命令或资源的联机手册。

说明:man 命令后直接跟需要帮助的命令所需参数,显示过程中按 q 退出。

例 man ps

PS(1)

Linux User’s Manual

PS(1)

NAME ps - report a snapshot of the current processes.

SYNOPSIS ps [options]

DESCRIPTION

ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1) instead.

This version of ps accepts several kinds of options: 1 UNIX options, which may be grouped and must be preceded by a dash. 2 BSD options, which may be grouped and must not be used with a dash. 3 GNU long options, which are preceded by two dashes.

Options of different types may be freely mixed, but conflicts can appear. There are some synonymous options, which are functionally identical, due to the many standards and ps implementations that this ps is compatible with.

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards :

5.--help 获取命令参数说明 语法:(command) --help 命令 功能:查阅指定命令使用参数。 说明:命令后直接跟获取该命令所需参数 例 $cp --help Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.

-a, --archive

same as -dpR

--backup[=CONTROL]

make a backup of each existing destination

file

-b

like --backup but does not accept an argument

--copy-contents

copy contents of special files when recursive

-d

same as --no-dereference --preserve=link

-f, --force

if an existing destination file cannot be

opened, remove it and try again

-i, --interactive

prompt before overwrite

-H

follow command-line symbolic links

-l, --link

link files instead of copying

-L, --dereference

always follow symbolic links

-P, --no-dereference

never follow symbolic links

-p

same as

--preserve=mode,ownership,timestamps

--preserve[=ATTR_LIST] preserve the specified attributes (default:

mode,ownership,timestamps), if possible

additional attributes: context, links, all

-c

same as --preserve=context

--no-preserve=ATTR_LIST don't preserve the specified attributes

--parents

use full source file name under DIRECTORY

-R, -r, --recursive

copy directories recursively

--remove-destination remove each existing destination file before

attempting to open it (contrast with

--force)

--sparse=WHEN

control creation of sparse files

--strip-trailing-slashes remove any trailing slashes from each SOURCE

argument

-s, --symbolic-link

make symbolic links instead of copying

-S, --suffix=SUFFIX

override the usual backup suffix

-t, --target-directory=DIRECTORY copy all SOURCE arguments into DIRECTORY

-T, --no-target-directory treat DEST as a normal file

-u, --update

copy only when the SOURCE file is newer

than the destination file or when the

destination file is missing

-v, --verbose

explain what is being done

-x, --one-file-system

stay on this file system

-Z, --context=CONTEXT

set security context of copy to CONTEXT

--help display this help and exit

--version output version information and exit

By default, sparse SOURCE files are detected by a crude heuristic and the corresponding DEST file is made sparse as well. That is the behavior selected by --sparse=auto. Specify --sparse=always to create a sparse DEST file whenever the SOURCE file contains a long enough sequence of zero bytes. Use --sparse=never to inhibit creation of sparse files.

The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. The version control method may be selected via the --backup option or through the VERSION_CONTROL environment variable. Here are the values:

none, off numbered, t existing, nil simple, never

never make backups (even if --backup is given) make numbered backups numbered if numbered backups exist, simple otherwise always make simple backups

As a special case, cp makes a backup of SOURCE when the force and backup options are given and SOURCE and DEST are the same name for an existing, regular file.

Report bugs to <bug-coreutils@gnu.org>. [root@localhost ~]#

6.常用的文件操作命令包括: (1) pwd 功能说明:显示工作目录。

语 法:pwd [--help][--version]

补充说明:执行 pwd 指令可得知工作目录的绝对路径名称。

参 数:

[root@localhost ~]# cd /usr/src/redhat/

[root@localhost redhat]#

--help

在线帮助。/root /usr/src/redhat

--version 显示版本信息。

(2) cd

功能说明:切换目录。

语 法:cd [目的目录]

补充说明:cd 指令可让用户在不同的目录间切换,但该用户必须拥有足够的权限进入目

的目录。[root@localhost ~]# cd /usr/src/

[root@localhost src]#

(3) ls

功能说明:列出目录内容。

语 法:ls [-1aAcdlrR]

补充说明:执行 ls 指令可列出目录的内容,包括文件和子目录的名称。

参 数:

-1

每列仅显示一个文件或目录名称。

[root@localhost ~]# ls -l

total 56

-rw------- 1 root root 878 Sep 6 10:53 anaconda-ks.cfg

drwxr-xr-x 2 root root 4096 Nov 17 16:10 Desktop

-rw-r--r-- 1 root root 28206 Sep 6 10:53 install.log

-rw-r--r-- 1 root root 3498 Sep 6 10:52 install.log.syslog

-a

显示下所有文件和目录。

[root@localhost ~]# ls -a

.

Desktop .gnome2_private .metacity

..

.dmrc .gstreamer-0.10 .nautilus

anaconda-ks.cfg .eggcups .gtkrc-1.2-gnome2 .redhat

.bash_logout .gconf .ICEauthority

.tcshrc

.bash_profile .bashrc .cshrc

.gconfd .gnome .gnome2

install.log

.Trash

install.log.syslog .xsession-errors

.lesshst

-A

显示所有文件和目录,但不显示现行目录和上层目录。

[root@localhost ~]# ls -A

anaconda-ks.cfg .dmrc

.gstreamer-0.10 .nautilus

.bash_history .eggcups

.gtkrc-1.2-gnome2 .redhat

.bash_logout .gconf

.ICEauthority

.tcshrc

.bash_profile .gconfd

install.log

.Trash

.bashrc

.gnome

install.log.syslog .xsession-errors

.cshrc

.gnome2

.lesshst

Desktop

.gnome2_private .metacity

-c

以更改时间排序,显示文件和目录。

[root@localhost ~]# ls -c

Desktop anaconda-ks.cfg install.log install.log.syslog

-d

显示目录名称而非其内容。

-l

使用详细格式列表。

-r

反向排序。

-R

递归处理,将指定目录下的所有文件及子目录一并处理。

--help

在线帮助。

[root@localhost ~]# ls --help

Usage: ls [OPTION]... [FILE]...

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.

-a, --all

do not ignore entries starting with .

-A, --almost-all

do not list implied . and ..

--author

with -l, print the author of each file

-b, --escape

print octal escapes for nongraphic characters

--block-size=SIZE

use SIZE-byte blocks

-B, --ignore-backups

do not list implied entries ending with ~

-c

with -lt: sort by, and show, ctime (time of last

modification of file status information)

with -l: show ctime and sort by name

otherwise: sort by ctime

-C

list entries by columns

--color[=WHEN]

control whether color is used to distinguish file

types. WHEN may be `never', `always', or `auto'

-d, --directory

list directory entries instead of contents,

and do not dereference symbolic links

-D, --dired

generate output designed for Emacs' dired mode

-f

do not sort, enable -aU, disable -lst

-F, --classify

append indicator (one of */=>@|) to entries

--file-type

likewise, except do not append `*'

--format=WORD

across -x, commas -m, horizontal -x, long -l,

single-column -1, verbose -l, vertical -C

--full-time

like -l --time-style=full-iso

-g

like -l, but do not list owner

-G, --no-group

like -l, but do not list group

-h, --human-readable

with -l, print sizes in human readable format

(e.g., 1K 234M 2G)

--si

likewise, but use powers of 1000 not 1024

-H, --dereference-command-line

follow symbolic links listed on the command line

--dereference-command-line-symlink-to-dir

follow each command line symbolic link

that points to a directory

--hide=PATTERN

do not list implied entries matching shell PATTERN

(overridden by -a or -A)

--indicator-style=WORD append indicator with style WORD to entry names:

none (default), slash (-p),

file-type (--file-type), classify (-F)

-i, --inode

with -l

--version 显示版本信息。

[root@localhost ~]# ls --version

ls (GNU coreutils) 5.97

Copyright (C) 2006 Free Software Foundation, Inc.

This is free software. You may redistribute copies of it under the terms of

the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.

There is NO WARRANTY, to the extent permitted by law.

Written by Richard Stallman and David MacKenzie.

(4) mkdir

功能说明:建立目录

语 法:mkdir [-p][--help][--version][-m <目录属性>][目录名称]

补充说明:mkdir 可建立目录并同时设置目录的权限。

参 数:

-m<目录属性>或--mode<目录属性> 建立目录时同时设置目录的权限。

-p 若所要建立目录的上层目录目前尚未建立,则一并建立上层目录。

--help

显示帮助。

--verbose 执行时显示详细的信息。

--version 显示版本信息。

[root@localhost ~]# mkdir -p -m 700 ./inin/mail/

[root@localhost usr]# ls -a

. bin games inin kerberos libexec sbin src X11R6

.. etc include kam lib

local share tmp

[root@localhost usr]# ls -l inin/

total 8

drwx------ 2 root root 4096 Nov 17 16:53 mail

(5) rmdir

功能说明:删除目录。

[root@localhost usr]# rmdir -p inin/mail/

[root@localhost usr]# ls -l

total 176

drwxr-xr-x 2 root root 36864 Sep 6 10:58 bin

drwxr-xr-x 2 root root 4096 Aug 8 2008 etc

drwxr-xr-x 2 root root 4096 Aug 8 2008 games

drwxr-xr-x 38 root root 4096 Sep 6 10:53 include

-rw-r--r-- 1 root root 0 Nov 17 16:47 kam

drwxr-xr-x 6 root root 4096 Sep 6 10:50 kerberos

drwxr-xr-x 81 root root 36864 Sep 6 10:58 lib

drwxr-xr-x 11 root root 4096 Sep 6 10:53 libexec

drwxr-xr-x 11 root root 4096 Sep 6 10:42 local

drwxr-xr-x 2 root root 12288 Sep 6 10:58 sbin

drwxr-xr-x 170 root root 4096 Sep 6 10:53 share

drwxr-xr-x 4 root root 4096 Sep 6 10:52 src

lrwxrwxrwx 1 root root 10 Sep 6 10:42 tmp -> ../var/tmp

drwxr-xr-x 3 root root 4096 Sep 6 10:47 X11R6

语 法:rmdir [-p][--help][--verbose][--version][目录...]

补充说明:当有空目录要删除时,可使用 rmdir 指令。

参 数:

-p 或--parents 删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删

除。

--help

在线帮助。

--verbose

显示指令执行过程。

--version

显示版本信息。

(6) cp

[root@localhost ~]# cp -a kam /usr/

[root@localhost ~]# cd /usr/

[root@localhost usr]# ls -a

. bin games kam

lib

local share tmp

.. etc include kerberos libexec sbin src X11R6

功能说明:复制文件或目录。

语 法:cp [-adfilpPrRsv] [--help] [--version][源文件或目录][目标文件或目录]

[目的目录]

补充说明:cp 指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的

目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同

时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。

参 数:

-a

此参数的效果和同时指定"-dpR"参数相同。

-d

当复制符号连接时,把目标文件或目录也建立为符号连接,并指

向与源文件或目录连接的原始文件或目录。

-f

强行复制文件或目录,不论目标文件或目录是否已存在。

-I

覆盖文件之前先询问用户。

-l

对源文件建立硬连接,而非复制文件。

-p

保留源文件或目录的属性。

-P

保留源文件或目录的路径。

-r

递归处理,将指定目录下的文件与子目录一并处理。

[root@localhost usr]# cp -f kam /usr/

cp: `kam' and `/usr/kam' are the same file

-R

递归处理,将指定目录下的所有文件与子目录一并处理。

-s

对源文件建立符号连接,而非复制文件。

-v

显示指令执行过程。

--help 在线帮助。

--version 显示版本信息。

(7) rm(remove)

功能说明:删除文件或目录。

语 法:rm [-dfirv][--help][--version][文件或目录...]

补充说明:执行 rm 指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预

设仅会删除文件。

参 数:

-d

直接把欲删除的目录的硬连接数据删成 0,删除该目录。

-f

强制删除文件或目录。

[root@localhost usr]# rm -f kam

[root@localhost usr]# ls -l /usr

total 172

drwxr-xr-x 2 root root 36864 Sep 6 10:58 bin

drwxr-xr-x 2 root root 4096 Aug 8 2008 etc

drwxr-xr-x 2 root root 4096 Aug 8 2008 games

drwxr-xr-x 38 root root 4096 Sep 6 10:53 include

drwxr-xr-x 6 root root 4096 Sep 6 10:50 kerberos

drwxr-xr-x 81 root root 36864 Sep 6 10:58 lib

drwxr-xr-x 11 root root 4096 Sep 6 10:53 libexec

drwxr-xr-x 11 root root 4096 Sep 6 10:42 local

drwxr-xr-x 2 root root 12288 Sep 6 10:58 sbin

drwxr-xr-x 170 root root 4096 Sep 6 10:53 share

drwxr-xr-x 4 root root 4096 Sep 6 10:52 src

lrwxrwxrwx 1 root root 10 Sep 6 10:42 tmp -> ../var/tmp

drwxr-xr-x 3 root root 4096 Sep 6 10:47 X11R6

-i

删除既有文件或目录之前先询问用户。

-r 或-R 递归处理,将指定目录下的所有文件及子目录一并处理。

-v

显示指令执行过程。

--help

在线帮助。

--version 显示版本信息。

(8) mv

功能说明:移动或更名现有的文件或目录。

语 法:mv [-bfiv][--help] [源文件或目录][目标文件或目录]

补充说明:mv 可移动文件或目录,或是更改文件或目录的名称。

参 数:

-b

若需覆盖文件,则覆盖前先行备份。

-f

若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或

目录。

-i

覆盖前先行询问用户。

-v

执行时显示详细的信息。

--help

显示帮助。

--version 显示版本信息。

[root@localhost ~]# mv kam /home/chu/ 或者

[root@localhost ~]# mv /root/kam /home/chu/

[root@localhost ~]# ls -l /home/chu

total 12

drwxr-xr-x 2 chu chu 4096 Sep 6 02:59 Desktop

-rw-r--r-- 1 root root 0 Nov 17 16:47 kam

(9) touch

功能说明:建立文件或更新文件的修改日期

语 法:touch (file)

例 $ touch NEWfile

//建立文件

$ touch -t 122510099 newfile

//更新文件的修改日期

[root@localhost ~]# touch yk

[root@localhost ~]# touch -t 12210103 yk

[root@localhost ~]# ls -l yk

-rw-r--r-- 1 root root 0 Dec 21 2013 yk

(10)locate

功能说明:查找指定文件或命令

语 法:locate( file)

补充说明:该命令自动检索一个指定文件或命令及其位置的数据库,但首先要用

updatedb 创建这个数据库。另外,与 whereis 使用的数据库一样,需要定期更新它们,

以跟踪记录新安装的程序。

[root@localhost ~]# locate yk

/usr/share/control-center-2.0/pixmaps/accessibility-keyboard-stickykey.png

/usr/share/ghostscript/8.15/lib/viewcmyk.ps

/usr/share/swig/1.3.29/ruby/rubykw.swg

/usr/share/zoneinfo/Atlantic/Reykjavik

/usr/share/zoneinfo/posix/Atlantic/Reykjavik

/usr/share/zoneinfo/right/Atlantic/Reykjavik

四、实验报告要求

1.整理实验结果,使其分别与相应的命令对应 2.了解各命令的作用及参数的作用 3.根据实验记录,写出实验报告

实验四:常用命令的使用(二)
一、实验目的 掌握 Linux 系统中常用命令的作用和命令中各选项的作用
二、实验环境 安装了 Red Hat Linux9.0 系统的计算机一台
三、实验内容和操作步骤

(1)cat 功能说明:查看文件内容,合并文件 语 法:cat 文件名 1 文件名 2 … > 新文件
cat 文件名 补充说明:cat 命令在显示多页文件缺陷明显,默认时只能显示最后一屏幕的信息

参 数:

-n

从 1 开始对所有输出行编号

-b

从 1 开始对所有非空输出行编号

-s

将多个相邻的空行合并成一个空行

例: cat a.txt b.txt > new.txt

cat -n life.txt

[root@localhost ~]# cat ykk

lkjserhkqewhtfrhuwegry

(2)more

功能说明:分页显示文件内容

语 法:more [选项] 文件名

补充说明:进入 more 状态,用 Enter 键可以向后移动一行;用空

一页;用 Q 键可以退出;用 B 键显示上一屏内容

格键可以向下移动

参 数:

-num

指定一个整数,表示一个屏幕显示的行

-p

不滚屏,在显示下以屏之前先清屏

例: more -10 clear.txt (3)less 功能说明:分页显示文件内容 语 法:less [选项] 文件名

参 数:

-num

指定一个整数,表示一个屏幕显示的行

-r

显示控制字符

例: less -21 clear.txt (4)ln 功能说明:建立链接 语 法:ln [选项] <源文件或目录> <链接名> 补充说明:给源文件 a.txt 建立硬连接 b.txt,这时 b.txt 可以看做是 a.txt 的别名,
它和 a.txt 不分主次.它们在指向硬盘上相同的位置.硬链接的局限在于不

能建立目录的硬链接. 给源文件 telno.txt 建立软连接 telno2.txt,这时 telno2.txt 可以看做是 telno.txt 的快捷方式,改变 telno.txt 的权限,在 telno2.txt 上得不到反映,但是改变 telno.txt 的内容,在 telno2.txt 上 却可以得到反映

参 数:

-s

建立符号链接(即软链接),不加该选项时建立的是硬链接

例: ln a.txt b.txt

ln -s telno.txt telno2.txt (5)find 功能说明:在目录中搜索满足查询条件的文件 语 法:find [路径] [表达式]

参 数:

-type [fdbcl] 按文件类型查找

f —普通文件 d —目录文件

b —块设备文件 c —字符设备文件

l --符号链接文件

-name 按文件名查找

操作如下:

-exec 命令 {}

-ok 命令 {}

例: find /root -name ‘test.txt’-exec cat {} \;

find /root -name ‘test.txt’ -ok cat {} \;

find /usr –name spell – print >myfile

//在/usr 目录中查找 spell,并把查找结果记录到 myfile 文件中。

find /usr /bin –type f -atime +100 – print

//在/usr/bin 目录中查找最* 100 天没有使用过的文件。 (6)grep 功能说明:查找文件中包含有指定字符串的行 语 法:grep [选项] <文件名>

参 数:

-i

匹配比较时不区分大小写

-n

在输出包含匹配模式行之前,加上该行的行号

-F

将查找模式看成是单纯的字符串

-E

将查找模式看成是可扩展的表达式(支持通配符 * ? [ ] 的使用 )

(7)chmod 功能说明:改变文件或目录的许可权限 语 法:chmod [who] [ + - =] [mode] 文件名

参 数:

操作对象 who 可是下述字母中的任一个或者它们的组合:

u 表示“用户(user)”,即文件或目录的所有者。

g 表示“同组(group)用户”,即与文件属主有相同

组 ID 的所有用户。

o 表示“其他(others)用户”。

a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:

+ 添加某个权限。

- 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)

例: chmod a–x mm.txt

chmod ugo–x mm.txt

chmod 644 mm.txt (8)alias 功能说明:该命令用于设置别名或显示已有的别名命令 语 法:alias 命令别名=‘命令行’ 例:alias mydir=‘ls -l /mnt/u’ (9)wc 功能说明:统计文件内容 语 法:wc [选项] 文件列表 补充说明:wc 命令输出列的顺序不受选项顺序影响,输出格式
行数 字数 字节数 文件名

参 数:

-c

统计字节数

-l

统计行数

-w

统计字数

例: wc -lcw m1 m2 (10)sort 功能说明:对文本文件的各行进行排序 语 法:sort [选项] 文件列表 补充说明:默认排序标准是从每行的第一个字符开始在 ASCII 码 的顺序排序

参 数:

-r

逆序排序

-o

文件排序结果输出到该文件所指定的文件中

注意位置 (sort a.txt -o b.txt)

-n

按数值大小排序

(11)su

功能说明:使一个普通的使用者拥有超级用户或其他使用者的权限。

语 法:su 用户名(如果没有输入用户名则预设为 root)

补充说明:使用这个命令必须具有超级用户或其他使用者的口令

(12)tar

功能说明:用来归档、备份、压缩和解压缩

语 法:tar [主选项+辅选项] 文件或者目录

参 数:

f

使用档案文件或设备,这个选项通常是必选的。

c

创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这

个选项。

r

把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又

发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘

记的目录或文件追加到备份文件中。

t

列出档案文件的内容,查看已经备份了哪些文件

u

更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找

不到要更新的文件,则把它追加到备份文件的最后。

x

从档案文件中释放文件。

v

详细报告 tar 处理的文件信息。如无此选项,tar 不报告文件信息。

(13)gzip

功能说明:压缩、解压缩文件

语 法:gzip [选项] 压缩(解压缩)的文件名

补充说明:压缩成文件名为 .gz 的压缩文件

参 数:

-r

递归式地查找指定目录并压缩其中的所有文件或者是解压缩。

-t

测试,检查压缩文件是否完整。

-v

对每一个压缩和解压的文件,显示文件名和压缩比。

-d

将压缩文件解压(相当于命令 gunzip)。

-l

详细列出每个压缩文件的相关信息

(14)bzip2

功能说明:压缩、解压缩文件

语 法:bzip2 [选项] 文件名 补充说明:生成.bz2 压缩文件

参 数:

-d

解压缩的参数

(15)mount

功能说明:挂上文件系统

语 法:mount -t 设备类型 存放目录

mount IP 地址:/所提供的目录 存放目录

参 数:

例: 光盘:#mount -t iso9660 /dev/cdrom /mnt/cdrom

软盘:#mount -t vfat

/dev/fd0

/mnt/floopy

U 盘: #mount -t vfat

/dev/sda1 /mnt/usb

(16)ps

功能说明:报告程序状况。

语 法:ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名称>][-g <群组名

称>][-G <群组识别码>][-p <程序识别码>][p <程序识别码>][-s <阶段作

业>][-t <终端机编号>][t <终端机编号>][-u <用户识别码>][-U <用户识别

码>][U <用户名称>][-<程序识别码>][--cols <每列字符数>][--columns <每列

字符数>][--cumulative][--deselect][--forest][--headers][--help][--info][--lines <

显示列数>][--no-headers][--group <群组名称>][-Group <群组识别码>][--pid <

程序识别码>][--rows <显示列数>][--sid <阶段作业>][--tty <终端机编

号>][--user <用户名称>][--User <用户识别码>][--version][--width <每列字符

数>]

补充说明:ps 是用来报告程序执行状况的指令,您可以搭配 kill 指令随时中断,删除不

必要的程序的运行。

参 数:

-a

显示所有终端机下执行的程序,除了阶段作业领导者之外。

-A

显示所有程序。

-d

显示所有程序,但不包括阶段作业领导者的程序。

-e

此参数的效果和指定"A"参数相同。

e

列出程序时,显示每个程序所使用的环境变量。

-f

显示 UID,PPIP,C 与 STIME 栏位。

-g<群组名称>

此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的

名称来指定。

-G<群组识别码> 列出属于该群组的程序的状况,也可使用群组名称来指定。

h

不显示标题列。

-H

显示树状结构,表示程序间的相互关系。

-j 或 j

采用工作控制的格式显示程序状况。

-l 或 l

采用详细的格式来显示程序状况。

L

列出栏位的相关信息。

-m 或 m

显示所有的执行绪。

n -N -p<程序识别码> p<程序识别码> r -t<终端机编号> t<终端机编号> -T

以数字来表示 USER 和 WCHAN 栏位。 显示所有的程序,除了执行 ps 指令终端机下的程序之外。 指定程序识别码,并列出该程序的状况。 此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。 只列出现行终端机正在执行中的程序。 指定终端机编号,并列出属于该终端机的程序的状况。 此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。 显示现行终端机下的所有程序。

-u<用户识别码> (17)kill 功能说明: 语 法: 补充说明:

此参数的效果和指定"-U"参数相同。
删除执行中的程序或工作。 kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指 定程序终止。若仍无法终止该程序,可使用 SIGKILL(9)信息尝试强 制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。

参 数: -l <信息编号> 若不加<信息编号>选项,则-l 参数会列出全部的信息名称。 -s <信息名称或编号> 指定要送出的信息。

四、实验报告要求 1.整理实验结果,使其分别与相应的命令对应 2.了解各命令的作用及参数的作用 3.根据实验记录,写出实验报告

一、实验目的

实验五 Linux 系统管理与配置

1.了解作为系统管理员如何为新用户建立帐户。

2.如何增加新用户。

3.如何修改选中的用户帐户或组。

4.如何设置或修改用户口令。 二、实验内容

1.增加用户帐户。

2.增加新的用户组。

3.设置和修改用户口令。

4.修改选中的用户帐户和用户组。 三、实验要求

1.在你的系统中成功的为一个新用户建立帐户。

2.为新用户设置口令,退出系统,重新注册,然后改变口令,重新注册。

3.熟悉在图形界面方式下对鼠标、菜单、图标、窗口的操作。 四、实验步骤 (一)、命令行管理
1、帐号系统的管理 1)添加、删除用户和组 添加用户帐号: useradd [-c comment] [-d home_dir][-e expire_date] [-f inactive_time][-g initial_group] [-G group[,...]][-m [-k skeleton_dir] | -M] [-n] [-o] [-p passwd] [-r][-s shell] [-u uid] name 删除用户帐号: userdel [-r] name 添加用户组: groupadd [-g gid [-o]] [-r] [-f] group 删除用户组: groupdel group 2)改变帐号信息 usermod [-u uid [-o]] [-g group] [-G group,...][-d home [-m]] [-s shell] [-c comment] [-l new_name][-f inactive] [-e expire ] [-p passwd] [-L|-U] name 通过 man page 深入学*上述命令的使用,并使用上述命令在个人主机的虚拟机的 Linux 系 统中添加一个用户 test,修改该用户帐号信息,使其不能登录系统(不是因为密码问题)。 3)修改帐号密码 passwd [name] 为用户 name 设置密码,如果没有给出用户名称,则设置当前登录用户的密码。只有对新建

的用户设置了密码,该用户才能登录访问系统。 一般来讲,Linux 的帐号信息存放在 passwd 文件中。帐号信息的内容为:1)有效的用户名 和口令(出于安全考虑,实际上,口令存放在不同的文件中,见后描述);2)主目录;3)shell 访问。当用户试图登录时,Linux 会核对 passwd 文件,以确定是否允许登录。 passwd 文件存放在/etc 目录下,一个典型的 passwd 文件为:
root:x:0:0:administrator:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync user:x:502:503::/home/user:/bin/bash
此文件每一行就是一个帐号信息,由 7 个部分组成,每个部分由“:”分隔: 用户名:加密的口令或口令符:用户 ID:组 ID:真实姓名:用户主目录:用户 shell 例如:
root:x:0:0:administrator:/root:/bin/bash 表示 root 用户的 ID 号码为 0,所属组 ID 号码为 0,真实姓名为 administrator,主目录位 于/root。shell 程序是/bin/bash,密码为口令符 x,该口令符意味着口令是加密存放的, 该加密后的密码存放在/etc/shadow 文件中。
(二)图形界面管理 1、增加用户帐户。
A.在图形界面方式下,你作为系统管理员以 root 注册,并输入相应的口令,进入 root 窗口。
B.在 root 窗口中,单击“启动程序”——>“系统设置”——>“用户和组群”——>“用 户管理器”,弹出用户管理器窗口。
C.在弹出的用户管理器窗口中,选中“用户”选项卡,单击菜单"文件"的子菜单"添加用 户"或"添加用户"按钮,弹出创建新用户窗口。 窗口中包括:用户名、全称、口令、确认口 令、主目录、用户 ID 等信息。其中:“为该用户创建私人组群”可选可不选,不选默认为 组群名为“user”,选中组群名则被设置为帐户的用户名。“手工指定用户 ID”不选时系 统自动生成一 UID,否则用户可以单击增加按钮设置 UID。
D.确定无误后单击“确定”按钮。如果想取消此次建立新帐户工作,则单击取消按钮。回 到用户管理器窗口如图示,建立的新帐户即显示出来。 2、增加新用户组。
A.如上述步骤启动用户管理器,选中“组群”选项卡:

B.在弹出的用户管理器窗口中,选中“用户”选项卡,单击菜单"文件"的子菜单"添加组 群"或"添加组群"按钮,弹出创建新组群窗口,设置如图所示。窗口中包括:组群名和手工 指定组群 ID。其中“手工指定组群 ID”不选时系统自动生成一 ID,否则用户可以单击增加 按钮设置 UID。
C.确定无误后单击“确定”按钮。如果想取消此次建立新帐户工作,则单击取消按钮。回 到用户管理器窗口,建立的新组群即显示出来。 3、设置和修改用户口令
A.在用户管理器中选中要修改的用户; B.单击菜单“文件”的子菜单“属性”或“属性”按钮,弹出用户属性窗口。 C.修改口令:在“用户数据”选项卡中直接修改“口令”和“确认口令”,确认无误后单 击“确定”按钮即修改完成。 D.设置口令:单击“口令信息” 选项卡:选中“启用口令过期”,可以设置口令的允许 更换前的天数、需要更换的天数、更换前警告的天数和帐号不活跃的天数。 E.退出系统,然后以新用户和新口令重新注册进入系统。 4、修改选中的用户帐户和用户组。 --修改选中的用户帐户:步骤同 3 修改用户口令一样,选中帐号用户的帐号和组群选项卡
分别进行设置。 --修改用户组: A.选中要修改的用户组。 B.单击菜单“文件”的子菜单“属性”或“属性”按钮,弹出组群属性窗口。 选中组群 数据选项卡可以修改组群名。选中组群用户选项卡,选择要加如该组群的用户,单击确定按 钮即可。
五、实验报告要求 1.整理实验结果,使其分别与相应的命令对应 2.记录程序设计的流程 3.根据实验步骤,写出实验报告
实验六:Vi 编辑器的使用

一、实验目的 1.掌握 vi 编辑器的启动和退出方法 2.掌握 vi 编辑器中录入文件内容的方法 3.掌握 vi 编辑器的各种编辑命令的使用 4.比对微软公司的 Word 编辑软件,了解 vi 的优缺点
二、实验环境 安装了 Red Hat Linux9.0 系统的计算机一台
三、实验内容和操作步骤 (1) vi 编辑器的启动和退出
首先启动 shell 终端,如下图
在 shell 提示符下输入 vim 或 vi,将启动 vi 编辑器

(2)

若要退出 Vi 在末行命令模式下输入:wq 或:q!即可 使用键在编辑命令模式和末行命令模式和插入模式之间进行切换
进入插入模式 a 追加,i 插入,o 当前行后插入一空行. 注意其他三个对应命令:A I O

(3) 复制正文 yy 复制当前行, nyy 复制 n 行. (4) 删除正文 x 删除一个字符, dd 删除当前行,ndd 删除 n 行, dw 删除一个
单词。删除内容均放在缓冲区。 (5) 替换正文 p 将缓冲区的内容粘贴到当前光标处。rn 用字符 n 替换当前字符。 (6) 查找定位 nH 将光标定位到第 n 行开头。 (7) 文件操作:w 写盘,:wq 写盘退出,:q!不存盘退出,:w filenam 写文 件名。 (8) 使用 vi 编辑生成三个 100 行字符,名字分别为 my1,my2 和 my3 的文本文件 (9) 在 vi 编辑 my1 状态下查看当前目录,使用搜索字符串、删除和粘贴功能,使用
替换命令及存盘退出、存盘不退出和不存盘退出命令。 (10) 从文件读取输入,并输出到显示器。 (11) 把标准输出定向到文件中,记录文件内容。 (12) 把 my1,my2 和 my3 合并为一个文本文件 my,并用命令 wc 显示其行数、单词
数和字符数。 (13) 使用管道将 my 中内容逐屏显示出来。 (14) 构造一个”>>”使用符号追加新内容的例子。 (15) 查找 my ,my1,my2 和 my3 中有没有包含 salary,ab、cd 的行,有几个文件
包含 ab.
四、实验报告要求 1. 整理实验结果,使其分别与相应的编辑命令对应 2. 了解 vi 编辑器中各个命令的作用 3. 根据实验记录,写出实验报告

实验七 Linux 磁盘管理
一、实验目的 了解常用的 Linux 支持的文件系统;熟悉磁盘分区的命名方式;学会使用 fdisk 命令进行磁 盘分区;学会创建不同类型的文件系统;学会挂载和卸载文件系统,学会在系统启动时自动 挂载文件系统;学会常用磁盘管理命令;了解磁盘配额的意义和基本方法。 二、实验内容 1. 在 VMware 中添加一块虚拟硬盘,执行以下操作: (1)使用 fdisk 命令进行磁盘分区,然后使用 fdisk –l 查看分区情况; (2)使用 mkfs 命令创建文件系统; (3)使用 mount 和 umount 命令实施挂载和卸载文件系统的操作; (4)修改配置文件/etc/fstab,在系统启动时自动挂装文件系统; 2.为用户或用户组设置磁盘限额
为某个分区设置用户或组的磁盘限额:为 home 分区分配磁盘限额,user1 用户分配 100M 磁盘的软限制,400M 的硬限制,文件数量软限制为 12800,硬限制为为 51200。 三、 实验指导 任务一:分区、格式化、挂载练* 1.在 VMware 中添加一块虚拟硬盘 (1)在虚拟机中点击下面的图标。
(2)此时在弹出的对话框中选项添加按钮。

(3)此时会弹出向导来帮助我们添加相应的设备,选择 Hard Disk,单击下一步。 (4)在出现的对话框中,选择第一项,单击第一步。

(5)选择硬盘类型(IDE 或 SCSI),单击下一步。 (6)指定文件名称。

(7)在下面的对话框中可以适当的调整添加硬盘的大小和与其相应的选项。
(8)单击完成,虚拟硬盘即添加成功。 2.使用 fdisk 命令创建分区 (1)进入 Linux 系统的命令行模式中使用 fdisk -l 命令来查看系统中的硬盘

(2)使用命令的方式来查看硬盘分区,下图是 fdisk 中的常用命令,m 表示显示菜单,p 查 看分区情况
(3)创建主分区分区: (4)创建扩展分区:

(5)创建逻辑分区:
(6)关于分区类型,可以键入 l 键来查看:
注意:如果想更改相应的文件类型可以使用“t”键来更改 (7) 如果对以上的分区没有什么异议,需要使用“w”键来进行保存:

3.格式化分区 使用 mkfs 命令来格式化硬盘,mkfs –t ext3 /dev/ sdb1 4.使用 mount 命令来挂载刚刚创建的分区 (1)创建挂载目录:mkdir /mnt/usrtfile; (2)使用 mount 命令来挂载刚刚创建的分区;
5.自动挂载 我们可以直接使用 mount 命令来挂载相应的分区和目录,如上图所示,
“mount + 分区名称 + 挂载目录”如:“mount /dev/sdb1 /mnt/userfile” 我们还可以修改相应的配置文件使用自动挂载的方法: 修改/etc/fstab 文件,在最后添加一行:

此后*艏扑慊竽柯冀远以亍 任务二:磁盘限额练* (1)启动 vi 来编辑/etc/fstab 文件。 (2)把/etc/fstab 文件中的 home 分区添加用户和组的磁盘限额。 (3)用 quotacheck 命令创建 aquota.user 和 aquota.group 文件:#quotacheck -amcug (4)给用户 user01 设置磁盘限额功能:#edquota -u user1。 (5)将其 blocks 的 soft 设置为 102400,hard 设置为 409600;inodes 的设置为 12800,hard 设置为 51200。编辑完成后保存并退出。 (6)重新启动系统。 (7)用 quotaon 命令启用 quota 功能:#quotaon /home。 (8)切换到用户 user1,查看自己的磁盘限额及使用情况。 (9)尝试复制大小分别超过磁盘限额软限制和硬限制的文件到用户的主目录下,检验一下 磁盘限额功能是否起作用。
四、 实验重点 1.使用文件系统遵循的一般过程:分区、格式化、挂载; 2.了解磁盘配额的意义和基本方法。

实验六 进程管理
一、实验目的 理解进程和守护进程的概念;掌握启动进程的命令;学会查看进程状态的命令和杀死进
程的命令;掌握作业控制命令 fg、bg、jobs 等;学会用 at 和 cron 执行计划任务掌握 PROC 文件系统的作用以及如何使用 PROC 文件系统来获得进程的信息;学会使用 free 命令监视 内存使用情况,学会使用 vmstat 命令监视虚拟内存情况;了解设备文件的分类,使用设备 编号的方式来标识每个设备,学会使用 mknod 命令创建设备文件。
二、实验内容 1.进程管理 (1)使用 ps 命令查看和控*
1) 显示本用户的进程:#ps。 2) 显示所有用户的进程:#ps -au。 3) 在后台运行 cat 命令:#cat &。 4) 查看进程 cat :# ps aux |grep cat。 5) 杀死进程 cat:#kill –9 cat。 6) 再次查看查看进程 cat,看看是否被杀死。 (2)使用 top 命令查看和控* 1) 用 top 命令动态显示当前的进程。 2) 只显示用户 user01 的进程(利用 u 键)。 3) 利用 k 键,杀死指定进程号的进程。 (3)挂起和恢复进程 1) 执行命令 cat。 2) 按 Ctrl+z 键,挂起进程 cat。 3) 输入 jobs 命令,查看作业。 4) 输入 bg,把 cat 切换到后台执行。 5) 输入 fg,把 cat 切换到前台执行。 6) 按 Ctrl+c 键,结束进程 cat。 (4)使用 at 命令定时执行某命令 下午 4 点,用户找出系统中所有的以.c 为后缀的文件,将结果保存到/etc/result 文件中, 然后向 user1 发邮件告知用户已经完成。 1) #at 4pm 2) 出现 at>提示符,输入; at> find / -name “*.c” >/etc/result at>echo “user1:All code file have been seached out.You can take them over.Bye”|mail –s “job done” user1 3) 按 Ctl+D 键结束 at 命令的输入 (5)安排计划任务 1) 查看 crontab 命令的帮助信息:#crontab -help。 2) 查看用户的计划任务列表:#crontab –l。 3) 建立一个 crontab 文件:#echo “45 11 22 7 * ls /etc” >cronfile。
7 月 22 日 11 点 45 分执行 ls /etc 4) 使用 crontab 命令安装 crontab 文件,安排计划任务:#crontab cronfile。 5) 查看计划任务表,看看计划任务是否已被安排:#crontab –l。

6) 删除计划任务列表,并进行确认。 (6)进程文件系统 PROC;
1) 查看/proc 目录下的内容; 2) 查看某进程的详细情况。
三、实验重点 1.进程概念和进程管理命令; 2.查看/proc 目录下的内容。

实验九 shell 编程(一)
一、实验目的 1、了解 shell 的概念 2、了解 shell 变量的种类及其使用 3、理解和掌握条件测试的原理和方法 4、掌握用 VI 创建 shell 脚本的方法 5、掌握 shell 脚本的执行方法
二、预备知识 (1)Linux 系统的 Shell 使用 Linux 系统时,用户多数时间是通过 Shell 与系统进行对话的。Shell 是一个接收
用户输入命令并将其转换成指令的程序,它是用户与 Linux 系统之间的界面之一。 Linux 系统中可以使用的 Shell 包括: bash:Bourne Again Shell。这是 Linux 系统上最常用的 Shell,它合乎 POSIX 标准且
相容于 Bourne Shell,提供了编辑命令行的功能。 csh:C Shell。由 Berkeley (伯克利大学) 开发,与 Bourne Shell 在交互式使用上很
多是相兼容的,但在程序设*缑嫔先从泻艽蟮牟煌K惶峁┍嗉钚械墓δ埽 类似的功能叫命令历史记录
ksh:Korn Shell。在 UNIX 系统下得到普遍使用,并最早将现代 Shell 技术 (包括取自 C Shell 的部分) 引入 Bourne Shell,提供了编辑命令行功能
sh:Bourne Shell。是原始的 Shell,不提供编辑命令行功能 tcsh:C Shell 的加强版,提供了编辑命令行的功能 zsh:Z Shell。最新的 Shell,与 Bourne Shell 兼容,提供编辑命令行的功能。 默认 shell—bash Shell 三、实验内容 1.Shell 变量的定义及其使用。 2.位置参数和环境变量。 3.Shell 中的特殊字符。 四、实验步骤 (一)Shell 变量

Shell 有两种变量:内部变量、环境变量和临时变量。在 Shell 脚本中临时变量又分为 两类:用户定义的变量和位置参数。 1 回值为 0 代表为真,其他非 0 值均为假。、常用的内部变量: # 传给 shell 程序位置参数的个数 ?存储上一个执行命令的返回值,返
0 存储 shell 程序的名称 * 存储 shell 程序的所有参数 例如: echo "Number of parameters is:"$# echo "Program name is:"$0 echo "Parameters as a single string is:"$* 2、常用的环境变量: HOME 用户的主目录 PATH 执行命令时所搜索的路径 PS1 shell 命令行的一级提示符 PS2 shell 命令行的二级提示符 用 printenv 命令查看当前起作用的环境变量列表 $printenv 列出的环境变量中最重要的是$PATH,它指定了查找可执行程序的路径顺序。如果运行 ifconfig 检查某个连接状态,而提示命令没找到,其原因是 shell 的环境变量里没有 设置这条路径名。解决办法是:
$whereis ifconfig $/sbin/ifconfig 在命令行中使用 export 命令把/sbin 目录加到$PATH 变量中: $PATH=$PATH:/sbin;export PATH $ifconfig 但这是暂时的,仅维持本次登陆执行了 export 有效。要长期有效必须修改/etc/profile 或主目录下.bash_profile 文件中的环境变量。 3、用户定义的变量

用户定义的变量是最普遍的 Shell 变量,变量名是以字母或下化线打头的字母、数字和 下线符序列,并且大小写字母意义不同。变量名的长度不受限制。定义变量并赋值的一 般形式是: 变量名=字符串 例如, myfile=/usr/meng/ff/m1.c 在程序中使用变量的值时,要在变量名前面加上一个符号“$”。这个符号告诉 Shell 要
读取该变量的值。 4、位置参数
执行 Shell 脚本时可以使用参数。由出现命令行上的位置确定的参数称做位置参数。 在 sh 中总共有十个位置参数,其对应的名称依次是$0,$1,$2,...$9。其中$0 始终表示命令 名或 Shell 脚本名,对于一个命令行,必然有命令名,也就必定有$0;而其它位置参数依据 实际需求,可有可无。 (二) SHELL 中的特殊字符
1、通配符 通常的通配符有三种: * 星号,它匹配任意字符的 0 次或多次出现。但注意,文件名前面的圆点(.)和 路径名中的斜线(/)必须显示匹配。 ? 问号,它匹配任意一个字符。 [] 一对方括号,其中有一个字符组。其作用是匹配该字符组所限定的任意一个字 符。 应该注意:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失 去通配符的能力了。 ! 叹号,若它紧跟在一对方括号的左方括号[之后,则表示不在一对方括号中所列 出的字符。
2、引号 在 SHELL 中引号分为三种:单引号、双引号、和倒引号。
(1)双引号 由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其功能外,其余字符通 常作为普通字符对待。
(2)单引号 由单引号括起来的字符都作为普通字符出现。

(3)倒引号 例如: $ today=`date` $echo Today is $ today Today is Thu May 04 10 :56 :20 CST 2000
(4)反斜线 转义字符,若想在字符串中使用反斜线本身,则必须采用(\\)的形式,其中第一个 反斜线作为转义字符,而把第二个反斜线变为普通字符。 (三)条件测试 1.字符串比较
= 比较两个字符串是否相等 != 比较两个字符串是否不相等 -n 判断字符长度是否大于零 -z 判断字符长度是否等于零 2.数字比较 -eq 比较两个数是否相等 -ge 比较一个数是否大于或是等于另一个数 -le 比较一个数是否大于或是等于另一个数 -ne 比较两个数是否不等 -gt 比较一个数是否大于另一个数 -lt 比较一个数是否小于另一个数 3.文件操作符
-d 确定文件是否为目录 -f 确定文件是否为普通文件 -r 确定是否对文件设置了读许可 -s 确定文件名是否具有大于零的长度 -w 确定文件是否设置了写许可 -x 确定文件是否设置了执行许可 测试语句:

有两种常用形式:一种是用 test 命令,如上所示。另一种是用一对方括号将测试条件括 起来。两种形式完全等价。例如,测试位置参数$1 是否是已存在的普通文件,可写成:test -f " $1",也完全可写成:[ -f $ l ]
在格式上应注意,如果在 test 语句中使用 shell 变量,为表示完整、避免造成歧异起见 最好用双引号将变量括起来。利用一对方括号表示条件测试时,在左方括号[之后、右方括 号]之前各应有空格。 (四)创建简单 shell 程序
1、进入 VI 编辑器 2、编写程序 例: #!/bin/bash hello() { echo "hello there today's date is:`date`" } echo "now going to the function hello" hello echo "back from the function" #end (五)执行 shell 程序的方法 方法一 : 加执行权后,程序完整路径引导。 方法二 : shell 解释器名称引导。 方法三: 点空格引导。 方法四 : 使用命令替换。 五、实验报告要求 1.整理实验结果,使其分别与相应的命令对应 2.记录程序设计的流程 3.根据实验步骤,写出实验报告

实验十 shell 编程(二)
一、实验目的 1、掌握 if、case 等条件语句的使用 2、掌握 for、while、until 等循环语句的使用方法 3、理解和掌握 shift 及其它语句的使用方法
二、实验准备 1、硬件:Intel Pentium 120 或以上级别的 CPU,大于 16MB 的内存; 2、软件:Linux RedHat9.0 操作系统。
三、相关知识 1. if 语句
if 语句通过判断逻辑表达式来作出选择,在 bash 中的条件语句有如下的格式: if [ expression ]; then
statements elif [ expression ]; then
statements else
statements fi if 条件是可以嵌套的, 2. case 语句 case 语句是用来执行依赖于离散值或是匹配指定变量值的范围的语句。 格式如下: case str in
str1 | str2) statements;; str3 | str4) statements;; *) statements;; esac 3.for 语句 for curvar in list do
statements

done 对 list 中的每个值需要执行一次 statements 时应利用这种格式。对每次循环,把 list 中的当前值赋给变量 vcurvar. List 可以使含有几个项的变量,或是用空格分隔的值表。 4. while 语句 在 pdksh 和 bash 中,利用的如下的格式:
while expression do
statements done 三、实验内容及步骤 1. 求前五个偶数的和 参考程序: #!/bin/bash loopcount=0 result=0 while [ $loopcount –lt 5 ] do loopcount=‘expr $loopcount +1’ increment=‘expr $loopcount \*2’ result= ‘$result + $increment’ done echo "result is $result“
2.设计一个 shell 程序,添加一个新组为 class1,然后添加属于这个组的 30 个用户,用 户名的形式为 stdxx,其中 xx 从 01 到 30。 参考程序: #!/bin/sh i=1 groupadd class1 while [ $i -le 30 ] do

if [ $i -le 9 ] ;then username=stu0${i}
else username=stu${i}
fi useradd $username mkdir /home/$username chown -r $username /home/$username chgrp -r class1 /home/$username i=$(($i+1)) done
3.编写 shell 程序,实现自动删除 50 个账号的功能。账号名为 stud1 至 stud50。 参考程序: #!/bin/sh i=1 while [ $i -le 50 ] do
userdel -r stud${i} i=$(($i+1 )) done
五、实验报告要求 1.记录实验中遇到的问题 2.提出程序的改进方法 3.根据实验步骤,写出实验报告

实验十一 Linux 下的 C 程序开发
一、实验目的 1、熟悉字符模式下的 C 程序编译和调试环境,基本掌握 Linux 字符模式下的编译工具
和调试工具的使用; 2、本实验需要综合使用 Linux 基本文件命令、编辑器的使用,练*在 Linux 的字符模
式下,编辑、编译及调试一个 C 程序的基本方法。

二、相关知识

GCC 是 GNU Compiler Collection 的缩写,它是世界上最为重要的开放源代码软件[18]。

因为所有其他的开放源代码项目都依赖于 GCC 进行编译。比如,没有 GCC,Linux 的产生就

不会成为可能。

GCC 能工作在很多*台上,这里所说的*台是指计算机硬件芯片和运行在其上的操作系

统的组合。下表 3-2 是 GCC 运行的*台。

表 3-2 GCC 运行的*台

硬件

操作系统

Alpha

Red Hat Linux 7.1

HPPA

HPUX 11.0

Intel x86

Debian Linux 2.2, Red Hat Linux 6.2,

FreeBSD 4.5

MIPS

IRIX 6.5

PowerPC

AIX4.3.3

Sparc

Solaris 2.7

GCC 可以编译多种语言:C,C++,对象 C(标准 C 的派生),Fortran,Java, Ada。正

如 GCC 缩写所代表的对象一样,GCC 实际上是多种编译器的统称,gcc 是所有编译器的统一

的程序接口,在本书中,并没有区分 GCC 和 gcc。GCC 的主页地址为文献[19]。

GDB 是 GNU Project Debugger 的缩写,用于调试 Ada, C, C++, Objective-C, Pascal 和

其他语言编写的程序[20],这些程序可以运行在本地计算机上,也可以运行在远程计算机上。

GDB 可以运行在几乎所有的 UNIX 和微软 Windows *台上。

GDB 主要能做下面 4 种事(以及由它们所支持的其他事情):

1)启动程序,指定可能影响程序运行的任何条件;

2)指定程序在一定条件下停止;

3)检查当程序停止时发生的事情;

4)通过改变程序中的某些条件,测试可能造成的软件错误,还可以由此学*其他的软

件错误。

GDB 可以做源代码级别的程序调试(需要在编译时指定相应条件),也可以做二进制级

别的程序调试。

三、实验内容及步骤

本次实验以一个简单的 C 程序为例,介绍 GCC 和 GDB 的编译、调试过程。

例子由两个文件组成:main.c, calc.c,其中,main.c 文件内容为:

#include <stdio.h> int calc(int); int main(int argc, char* argv[]) {

int iInput=0, iOutput=0; int i=0; scanf("%i",&iInput); while(iInput < 0) {
printf("Please input a positive integer!\n"); scanf("%i",&iInput); } iOutput = calc(iInput);
printf("Result is:%i\n", iOutput); return 0; }
calc.c 的文件内容为:
#include <stdio.h> int calc(int iIn) { int i = 0, iOut = 0; iOut = iIn; for(i = 0; i < iIn; i++) {
iOut += iOut * iIn; } return iOut; }
1、编译过程 有三种方式编译这两个源程序,一是直接使用如下命令行完成编译、链接过程:
$gcc main.c calc.c -o main
命令行中,main.c calc.c 的后缀名指明了调用 c 编译器,前面讲到了 gcc 是 GCC 的众 多编译器的统一入口,gcc 靠后缀名决定调用什么编译器,-o 参数指定了可执行文件的文 件名为 main。
第二种方法是编译 calc.c 为静态库,编译 main.c 时指定静态库的位置。 需要将 calc.c 编译成中间文件 calc.o,使用如下命令行:
$gcc -c calc.c
生成静态库文件,添加 calc.o 到静态库中,使用如下命令行:
$ar -r libcalc.a calc.o

命令行中,-r libcalc.a 参数表示建立静态库,名字为 libcalc.a。 接下来,使用如下命令行:
$gcc main.c libcalc.a -o main
上面这条命令也可以用下面的命令完成:
$gcc main.c -lcalc –o main
-l 参数可以指定库名称,这里 calc 表示使用库 libcalc.a,库名字前面的 lib 和后面 的.a 被省略掉了,遵从了命名法。
第三种方法是建立共享库,编译时指定共享库。 首先,编译 calc.c 为 calc.o,使用命令行:
$gcc -c -fpic calc.c
命令行中,-fpic 指定 calc.o 为可重分配地址属性,pic 是 position independence code 的缩写。
接下来使用 calc.o 生成共享库 calc.so:
$gcc -shared calc.o –o calc.so
这两条命令也可以缩减为一行:
$gcc -shared -fpic calc.c -o calc.so
最后编译 main.c,链接生成的共享库:
$gcc main.c calc.so -o main
学生需要按照上面的步骤编译 main.c 和 calc.c 两个文件以生成可执行文件 main。 2、调试过程 要完成源代码级别的调试,需要在编译时指定将调试信息添加到可执行文件中,也就 是说可以在调试时看到程序的函数名、变量名等,而不是内存地址。gcc 命令的-g 参数可 以完成这个功能。例如使用如下命令:
$gcc main.c calc.c -o main -g
另外,完成源代码级别的调试就不需要可执行文件在编译时指定-g 参数了。 1)启动 GDB 启动 GDB 一般有三种方式: gdb program 也就是执行文件。 gdb core 用 gdb 同时调试一个运行程序和 core 文件,core 是程序非法执行后 core

dump 后产生的文件。 gdb ID 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程 ID。gdb
会自动 attach 上去,并调试他。 GDB 启动时,可以加上一些 GDB 的启动开关,详细的开关可以用 gdb -help 查看。 下面只例举一些比较常用的参数: -s 从指定文件中读取符号表。 -se file 从指定文件中读取符号表信息,并把他用在可执行文件中。 -core -c 调试时 core dump 的 core 文件。 -d 加入一个源文件的搜索路径。默认搜索路径是环境变量中 PATH 所定义的路径。 启动 gdb 后,进入 gdb 的调试环境中,可以使用 gdb 的命令开始调试程序了,gdb 的命
令可以使用 help 命令来查看,如下所示:
/home/test> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux". (gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands obscure -- Obscure features running -- Running the program stack -- Examining the stack status -- Status inquiries support -- Support facilities tracepoints -- Tracing of program execution without stopping the program user-defined -- User-defined commands Type "help" followed by a class name for a list of commands in that class. Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous. (gdb)

gdb 的命令很多,gdb 把之分成许多个种类。help 命令只是例出 gdb 的命令种类,如果 要看种类中的命令,可以使用 help 命令,如:help breakpoints,查看设置断点的所有命 令。也可以直接 help 来查看命令的帮助。
gdb 中,输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了,当然, 命令的前几个字符应该要标志着一个唯一的命令,在 Linux 下,可以敲击两次 TAB 键来补齐 命令的全称,如果有重复的,那么 gdb 会把其例出来。
示例一:在进入函数 func 时,设置一个断点。可以敲入 break func,或是直接就是 b func
(gdb) b func Breakpoint 1 at 0x8048458: file hello.c, line 10. 示例二:敲入 b 按两次 TAB 键,会看到所有 b 打头的命令: (gdb) b backtrace break bt (gdb) 示例三:只记得函数的前缀,可以这样: (gdb) b make_ <按 TAB 键> (再按下一次 TAB 键,会看到:) make_a_section_from_file make_environ make_abs_section make_function_type make_blockvector make_pointer_type make_cleanup make_reference_type make_command make_symbol_completion_list (gdb) b make_ GDB 把所有 make 开头的函数全部例出来给查看。 示例四:调试 C++的程序时,可以同样看到函数名。如: (gdb) b 'bubble( M-? bubble(double,double) bubble(int,int) (gdb) b 'bubble( 可以查看到 C++中的所有的重载函数及参数。(注:M-?和“按两次 TAB 键”是一个意 思) 要退出 gdb 时,只用发 quit 或命令简称 q 就行了。
2)GDB 中运行 Linux 的 shell 程序 在 gdb 环境中,可以执行 Linux 的 shell 的命令,使用 gdb 的 shell 命令来完成:
shell 调用 Linux 的 shell 来执行,环境变量 SHELL 中定义的 Linux 的 shell 将会被用来执 行,如果 SHELL 没有定义,那就使用 Linux 的标准 shell:/bin/sh。(在 Windows 中使用 Command.com 或 cmd.exe) 3)在 GDB 中运行程序 当以 gdb 方式启动 gdb 后,gdb 会在 PATH 路径和当前目录中搜索的源文件。如要确认 gdb 是否读到源文件,可使用 l 或 list 命令,看看 gdb 是否能列出源代码。 在 gdb 中,运行程序使用 r 或是 run 命令。程序的运行,有可能需要设置下面四方面的 事。 i) 程序运行参数。

set args 可指定运行时参数。(如:set args 10 20 30 40 50) show args 命令可以查看设置好的运行参数。 ii) 运行环境。 Path 可设定程序的运行路径。 show paths 查看程序的运行路径。 set environment varname [=value] 设置环境变量。如:set env USER=hchen show environment [varname] 查看环境变量。 iii) 工作目录。 cd 相当于 shell 的 cd 命令。 pwd 显示当前的所在目录。 iv) 程序的输入输出。 info terminal 显示程序用到的终端的模式。 使用重定向控制程序输出。如:run > outfile tty 命令可以指写输入输出的终端设备。如:tty /dev/ttyb
3)调试已运行的程序 两种方法: i) 在 Linux 下用 ps 查看正在运行的程序的 PID(进程 ID),然后用 gdb PID 格式挂接 正在运行的程序。 ii) 先用 gdb 关联上源代码,并进行 gdb,在 gdb 中用 attach 命令来挂接进程的 PID。 并用 detach 来取消挂接的进程。
4)暂停 / 恢复程序运行 调试程序中,暂停程序运行是必须的,GDB 可以方便地暂停程序的运行。可以设置程序 的在哪行停住,在什么条件下停住,在收到什么信号时停往等等。以便于查看运行时的变 量,以及运行时的流程。 当进程被 gdb 停住时,可以使用 info program 来查看程序的是否在运行,进程号,被 暂停的原因。 在 gdb 中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、 捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行, 可以使用 c 或是 continue 命令。 i) 设置断点(BreakPoint) 用 break 命令来设置断点,有几点设置断点的方法: break 在进入指定函数时停住。 break +offset,break –offset,在当前行号的前面或后面的 offset 行停住。offiset 为自然数。 break filename:linenum,在源文件 filename 的 linenum 行处停住。 break filename:function,在源文件 filename 的 function 函数的入口处停住。 break *address,在程序运行的内存地址处停住。 break 命令没有参数时,表示在下一条指令处停住。 break ... if condition,condition 表示条件,在条件成立时停住。比如在循环境体

中,可以设置 break if i=100,表示当 i 为 100 时停住程序。 查看断点时,可使用 info 命令,如下所示:(注:n 表示断点号) info breakpoints [n] info break [n] ii) 设置观察点(WatchPoint) 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,
马上停住程序。有下面的几种方法来设置观察点: watch expr,为表达式(变量)expr 设置一个观察点。一量表达式值有变化时,马上
停住程序。rwatch,当表达式(变量)expr 被读时,停住程序。 awatch,当表达式(变量)的值被读或被写时,停住程序。 info watchpoints,列出当前所设置了的所有观察点。 iii) 设置捕捉点(CatchPoint) 可设置捕捉点来捕捉程序运行时的一些事件。如:载入共享库(动态链接库)或是 C++
的异常。设置捕捉点的格式为: catch event,当 event 发生时,停住程序。event 可以是下面的内容: ? throw 一个 C++抛出的异常。(throw 为关键字) ? catch 一个 C++捕捉到的异常。(catch 为关键字) ? exec 调用系统调用 exec 时。(exec 为关键字,目前此功能只在 HP-UX 下有用) ? fork 调用系统调用 fork 时。(fork 为关键字,目前此功能只在 HP-UX 下有用) ? vfork 调用系统调用 vfork 时。(vfork 为关键字,目前此功能只在 HP-UX 下有用) ? load 或 load 载入共享库(动态链接库)时。(load 为关键字,目前此功能只在 HP-UX 下有用) ? unload 或 unload 卸载共享库(动态链接库)时。(unload 为关键字,目前此功 能只在 HP-UX 下有用) ? tcatch,只设置一次捕捉点,当程序停住以后,应点被自动删除。 iv) 维护停止点 上面说了如何设置程序的停止点,GDB 中的停止点也就是上述的三类。在 GDB 中,如果
觉得已定义好的停止点没有用了,可以使用 delete、clear、disable、enable 这几个命令 来进行维护。
clear 清除所有的已定义的停止点。 clear clear 清除所有设置在函数上的停止点。 clear clear 清除所有设置在指定行上的停止点。 delete [breakpoints] [range...] 删除指定的断点,breakpoints 为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为 d。 比删除更好的一种方法是 disable 停止点,disable 了的停止点,GDB 不会删除,当还需要 时,enable 即可,就好像回收站一样。 disable [breakpoints] [range...] disable 所指定的停止点,breakpoints 为停止点号。如果什么都不指定,表示 disable 所

有的停止点。简写命令是 dis. enable [breakpoints] [range...]
enable 所指定的停止点,breakpoints 为停止点号。 enable [breakpoints] once range... enable 所指定的停止点一次,当程序停止后,该停止点马上被 GDB 自动 disable。 enable [breakpoints] delete range... enable 所指定的停止点一次,当程序停止后,该停止点马上被 GDB 自动删除。 v) 停止条件维护 前面在说到设置断点时,我们提到过可以设置一个条件,当条件成立时,程序自动停止, 这是一个非常强大的功能。一般来说,为断点设置一个条件,我们使用 if 关键词,后 面跟其断点条件。并且,条件设置好后,我们可以用 condition 命令来修改断点的条件。 (只有 break 和 watch 命令支持 if,catch 目前暂不支持 if condition 修改断点号为 bnum 的停止条件为 expression。condition 清除断点号为 bnum 的停止条件。还有一个 比较特殊的维护命令 ignore,可以指定程序运行时,忽略停止条件几次。ignore 表示 忽略断点号为 bnum 的停止条件 count 次。 vi) 为停止点设定运行命令 可以使用 GDB 提供的 command 命令来设置停止点的运行命令。也就是说,当运行的程序 在被停止住时,我们可以让其自动运行一些别的命令,这很有利行自动化调试。对基于 GDB 的自动化调试是一个强大的支持。 commands [bnum] ... command-list ... end 为断点号 bnum 指写一个命令列表。当程序被该断点停住时,gdb 会依次运行命令列表 中的命令。例如: break foo if x>0 commands printf "x is %d\n",x continue end 断点设置在函数 foo 中,断点条件是 x>0,如果程序被断住后,也就是,一旦 x 的值在 foo 函数中大于 0,GDB 会自动打印出 x 的值,并继续运行程序。 如果要清除断点上的命令序列,那么只要简单的执行一下 commands 命令,并直接在打 个 end 就行了。 vii) 断点菜单 在 C++中,可能会重复出现同一个名字的函数若干次(函数重载),在这种情况下,break 不能告诉 GDB 要停在哪个函数的入口。当然,可以使用 break 也就是把函数的参数类型 告诉 GDB,以指定一个函数。否则的话,GDB 会列出一个断点菜单供选择所需要的断点。 只要输入菜单列表中的编号就可以了。如:
(gdb) b String::after [0] cancel [1] all [2] file:String.cc; line number:867 [3] file:String.cc; line number:860

[4] file:String.cc; line number:875 [5] file:String.cc; line number:853 [6] file:String.cc; line number:846 [7] file:String.cc; line number:735 >246 Breakpoint 1 at 0xb26c: file String.cc, line 867. Breakpoint 2 at 0xb344: file String.cc, line 875. Breakpoint 3 at 0xafcc: file String.cc, line 846. Multiple breakpoints were set. Use the "delete" command to delete unwanted breakpoints. (gdb)
可见,GDB 列出了所有 after 的重载函数,可以选一下列表编号就行了。0 表示放弃设 置断点,1 表示所有函数都设置断点。 viii) 恢复程序运行和单步调试 当程序被停住了,可以用 continue 命令恢复程序的运行直到程序结束,或下一个断点 到来。也可以使用 step 或 next 命令单步跟踪程序。 continue [ignore-count] c [ignore-count] fg [ignore-count] 恢复程序运行,直到程序结束,或是下一个断点到来。ignore-count 表示忽略其后的 断点次数。continue,c,fg 三个命令都是一样的意思。 step 单步跟踪,如果有函数调用,它会进入该函数。进入函数的前提是,此函数被编译有 debug 信息。很像 VC 等工具中的 step in。后面可以加 count 也可以不加,不加表示一 条条地执行,加表示执行后面的 count 条指令,然后再停住。 next 同样单步跟踪,如果有函数调用,它不会进入该函数。很像 VC 等工具中的 step over。 后面可以加 count 也可以不加,不加表示一条条地执行,加表示执行后面的 count 条指 令,然后再停住。 set step-mode set step-mode on 打开 step-mode 模式,于是,在进行单步跟踪时,程序不会因为没有 debug 信息而不停 住。这个参数有很利于查看机器码。 set step-mod off 关闭 step-mode 模式。 finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等 信息。 until 或 u 当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。 stepi 或 si nexti 或 ni

单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi 和 nexti 可 以单步执行机器指令。与之一样有相同功能的命令是 “display/i $pc” ,当运行完这 个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码) ix) 信号(Signals) 信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。 尤其是 LINUX,比较重要应用程序一般都会处理信号。LINUX 定义了许多信号,比如 SIGINT 表示中断字符信号,也就是 Ctrl+C 的信号,SIGBUS 表示硬件故障的信号;SIGCHLD 表示子 进程状态改变信号; SIGKILL 表示终止程序运行的信号,等等。信号量编程是 LINUX 下非 常重要的一种技术。 GDB 有能力在调试程序的时候处理任何一种信号,可以告诉 GDB 需要处理哪一种信号。 可以要求 GDB 收到所指定的信号时,马上停住正在运行的程序,以供进行调试。可以用 GDB 的 handle 命令来完成这一功能。 handle 在 GDB 中定义一个信号处理。信号可以以 SIG 开头或不以 SIG 开头,可以用定义一个要 处理信号的范围(如:SIGIO-SIGKILL,表示处理从 SIGIO 信号到 SIGKILL 的信号,其中包 括 SIGIO,SIGIOT,SIGKILL 三个信号),也可以使用关键字 all 来标明要处理所有的信号。 一旦被调试的程序接收到信号,运行程序马上会被 GDB 停住,以供调试。其可以是以下几种 关键字的一个或多个。 nostop 当被调试的程序收到信号时,GDB 不会停住程序的运行,但会打出消息告诉收到这种信号。 stop 当被调试的程序收到信号时,GDB 会停住的程序。 print 当被调试的程序收到信号时,GDB 会显示出一条信息。 noprint 当被调试的程序收到信号时,GDB 不会告诉收到信号的信息。 pass noignore 当被调试的程序收到信号时,GDB 不处理信号。这表示,GDB 会把这个信号交给被调试 程序会处理。 nopass ignore 当被调试的程序收到信号时,GDB 不会让被调试程序来处理这个信号。 info signals info handle 查看有哪些信号在被 GDB 检测中。 x) 线程(Thread Stops) 如果程序是多线程的话,可以定义的断点是否在所有的线程上,或是在某个特定的线程。 GDB 很容易完成这一工作。 break thread break thread if ... linespec 指定了断点设置在的源程序的行号。threadno 指定了线程的 ID,注意,这个 ID 是 GDB 分配的,可以通过“info threads”命令来查看正在运行程序中的线程信息。 如果不指定 thread 则表示断点设在所有线程上面。还可以为某线程指定断点条件。如:

(gdb) break frik.c:13 thread 28 if bartab > lim 当程序被 GDB 停住时,所有的运行线程都会被停住。这方便查看运行程序的总体情况。 而在恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。 查看栈信息 当程序被停住了,需要做的第一件事就是查看程序是在哪里停住的。当程序调用了一个 函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。可以 用 GDB 命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的 GDB 命令: backtrace bt 打印当前的函数调用栈的所有信息。如: (gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30 #2 0x400409ed in __libc_start_main () from /lib/libc.so.6 从上可以看出函数的调用栈信息:__libc_start_main --> main() --> func() backtrace bt n 是一个正整数,表示只打印栈顶上 n 层的栈信息。 backtrace <-n> bt <-n> -n 表一个负整数,表示只打印栈底下 n 层的栈信息。 如果要查看某一层的信息,需要在切换当前的栈,一般来说,程序停止时,最顶层的栈 就是当前栈,如果要查看栈下面层的详细信息,首先要做的是切换当前栈。 frame f n 是一个从 0 开始的整数,是栈中的层编号。比如:frame 0,表示栈顶,frame 1,表 示栈的第二层。 up 表示向栈的上面移动 n 层,可以不打 n,表示向上移动一层。 down 表示向栈的下面移动 n 层,可以不打 n,表示向下移动一层。 上面的命令,都会打印出移动到的栈层的信息。如果不想让其打出信息。可以使用这三 个命令: select-frame 对应于 frame 命令。 up-silently 对应于 up 命令。 down-silently 对应于 down 命令。 查看当前栈层的信息,可以用以下 GDB 命令: frame 或 f 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号, 函数执行到的语句。 info frame info f 这个命令会打印出更为详细的当前栈层的信息,只不过,大多数都是运行时的内内地址。

比如:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序 语言写成的、函数参数地址及值、局部变量的地址等等。如: (gdb) info f Stack level 0, frame at 0xbffff5d4: eip = 0x804845d in func (tst.c:6); saved eip 0x8048524 called by frame at 0xbffff60c source language c. Arglist at 0xbffff5d4, args: n=250 Locals at 0xbffff5d4, Previous frame's sp is 0x0 Saved registers: ebp at 0xbffff5d4, eip at 0xbffff5d8 info args 打印出当前函数的参数名及其值。 info locals 打印出当前函数中所有局部变量及其值。 info catch 打印出当前的函数中的异常处理信息。
学生需要调试上面提到的 main.c 和 calc.c 程序,写出当输入 10 时,calc 函数的循环 结构中,变量 iOut 的所有值,并写出调试过程。 四、实验报告要求 1.记录实验中遇到的问题及解决方法 2.根据实验原理及调试过程,写出实验报告


相关文档

  • linux操作系统实验指导书
  • 操作系统实验指导书(linux版)
  • 实验指导书 linux操作系统的安装
  • Linux实用操作系统实验指导书
  • Linux操作系统实验指导书.doc
  • Linux操作系统实验指导书(11-12-1)
  • Linux操作系统实验指导书V3.2
  • Linux网络操作系统实验指导书
  • 《LINUX网络操作系统》实验指导书
  • 《Linux操作系统》实验指导书.v1.34
  • 猜你喜欢

  • 人事行政部月度报表(工作总结汇报)
  • 哔哩哔哩联通免流卡怎么自己换套餐
  • 九年级英语全册 Unit 15 We’re trying to save the manatees Section B(1a—2c)课件 人教新目标版
  • 八年级物理全册8.3空气的力量*题课件新版沪科版
  • 足球 PPT背景图 素材 模板_15
  • 2019高考物理二轮复*专题四电路与电磁感应第2讲电磁感应规律及其应用课件
  • 探究ViewPager延迟加载
  • 申论最强万用句型,公务员考试必背!(免费奉送)
  • 公司pvc项目160kta烧碱及200kta聚氯乙烯项目可行性研究报告
  • 新一配:区块链面临的难题【转载】
  • 高三信息技术教学工作总结-word文档
  • 第6章_电子表格_Excel_2019_基本操作new-精品文档
  • (学*心得体会)学*学规范强师德树形象心得体会
  • 六年级奥数:列方程解应用题
  • 关于房地产公司融资渠道相关问题的思考
  • 佛山市普通高中2014届高三教学质量检测(一)(文综)
  • 申报度局文明处室单位自查报告
  • 2018年幼儿园实*报告格式范文
  • 嵌入式操作系统的形式化验证研究
  • 一个电话号码可以注册几个抖音号
  • 茉莉花香海带汁饮料加工技术研究[1]
  • 2015高中语文 第7课 诗六首课件 语文版必修2(共40张PPT)
  • 最虐心的韩剧排行榜前十名***2***
  • 生物人教版七年级上册学生项目式学*小组任务单
  • 高考励志名言大全
  • 深度营销系列之终端导购管理培训
  • 元宵看灯展的初中作文
  • 炒胡萝卜的做法
  • 大一冬训心得体会范文通用3篇
  • 计生办2019年瑟肽旯ぷ髯芙峒跋掳肽旯ぷ骷苹?篇
  • 2020年新编中央电大公共关系学形成性考核册参考答案名师精品资料
  • 蔬菜农药残留速测方法中存在的问题及解决方案
  • 7.漫谈植物生长规律全集
  • 陕西鑫德建筑劳务有限公司企业信息报告-天眼查
  • 面试技巧总结-范文
  • 咸丰县国营包装纸箱厂企业信用报告-天眼查
  • 公司法人申请变更登记的具体内容是什么【会计实务经验之谈】
  • (人教版)数学一年级下册第七单元测试卷共3套附答案
  • 遵义专版秋九年级化学全册第1章开启化学之门第1节化学给我们带来什么*题课件沪教版
  • 2018年春华师版八年级数学下18.1第4课时平行四边形中周长与面积的相关计算ppt公开课优质教学课件
  • 跨部门沟通与冲突管理(ppt82张)
  • 留学360发布surval国际女子寄宿学校专业信息
  • 电脑版