一、实验目的

熟悉系统启动过程与故障排除、进程管理与作业调度、软件包管理。

二、实验环境

CentOS 6.5系统。

三、实验内容

1. 系统启动过程与故障排除

2. 进程管理与作业调度

3. 软件包管理

四、实验步骤

    1. 系统启动过程与故障排除

1)生成grub菜单准备使用的md5密码

命令:grub-md5-cryptgrub;md5cryt

2)编辑/boot/grub/grub.conf文件,设置第(1)步生成的密码

命令:vi /etc/grub.conf

Password --md5 $1$glMvd0$iXLBsUuInELipr/.1elkQ1//加入一个MD5的密码

3)重新启动虚拟机,假设忘记root用户密码,进入单用户模式

操作步骤:grub菜单里按e,然后选择kernel,按e进入编辑,在行尾输入“ s”之后按回车,最后按b重新引导系统启动。

4)为root用户重设新密码

命令:passwd root

5)将/dev/sda设备的mbr扇区中前446个字节的引导代码清零

命令:dd if=/dev/zero of=/dev/sda bs=446 count=1

6)重启系统,系统将无法正常引导

7)挂载第1CentOS系统安装光盘,并重新引导进入救援模式 linux rescue

8)从救援模式挂载系统根目录

命令:chroot /mnt/sysp_w_picpath

9)重新安装grub1阶段至/dev/sda主引导记录

命令:grub-install /dev/sda

10)卸载光盘,重启系统

系统是否恢复:exit;exit

2.进程管理

1)使用你的普通用户身份在虚拟控制台tty2tty3上登陆

快捷键:alt+Fn

2)在tty2上运行以下命令:

$ (while true; do echo –n A >>log; sleep 1;done)

3)注意这个控制台现在因为在运行你的进程,所以处于忙的状态(进程在前台运行),这个进程不断把字母“A”添加进~/log文件中去,到 tty3上运行以下命令:

$ tail –f log

你会看到“A”不断增长

4)切换回控制台 tty2,按下<ctrl-z>shell 会告诉你进程停止了,告诉你 job 号码为 1,切换回控制台 tty3,你会看到文件不变了。

5)回到 tty2,再次启动进程,运行 jobs会显示 job[1]在运行了,到 tty3 上看到文件继续增长了:

$ bg

$ jobs

6)到 tty2上,按向上的箭头,重新找回第二步时的命令,把 A 换成 B,在最后加上&,然后在把 B 换成 C

$ (while true; do echo –n B >>log; sleep 1;done) &

$ (while true; do echo –n C >>log; sleep 1;done) &

7)输入 jobs确认三个进程都在运行,到 tty3上看到每秒钟会有三个字母增长。

8)在第 4 步你按 ctrl-z时,实际上是给进程发一个信号,使用 kill命令也可以给它们发信号,使用 kill来显示信号列表和标号,然后发一个 SIGSTOP19)的信号给job[1],到 tty2 上执行:

$ kill –l

$ kill -19 %1

9)输入 jobs,确认 job[1]停止,到 tty3 上看结果是否停止。

10)用 kill 重新启动进程,使用 SIGCONT18)信号,你会看到进程又重新启动了。(参考第 8 步的实现方法)

11)使用 kill 命令的 SIGTERM15)信号,也是 kill的默认信号,来结束三个进程,先结束 job[2] job[3]时,用 jobs来看一下它们的状态是不是 terminated 的:

$ kill %2 %3

$ jobs

12)结束最后的进程:

$ fg

$ <ctrl-c>

13)在 tty2 上使用 jobs 命令来看一下,然后在 tty3 上看是否进程真的结束了,然后按<ctrl-c>结束 tail进程,注销。

14)在 tty2 上删除 ~/log文件

15)打印所有进程,包括 CPU,内存等信息

命令:ps aux | less

16)查找进程atd的相关信息

命令:ps aux | grep atd

17)打印进程树,同时显示各进程的 PID

命令:pstree -p

18)用 top命令显示当前系统进程状态,每隔 2秒更新一次

命令:top –d 2

3.作业调度

1)在主目录的bin目录内创建shell脚本memlog,把当前的日期时间(date命令)以及内存使用情况(free命令)追加到文件/tmp/mem.log中。

脚本内容:#!/bin/bash

echo “`date`” >> /tmp/mem.log

echo “`free`” >> /tmp/mem.log

2)在主目录的bin目录内创建shell脚本todo-list,该脚本根据当前的日期(20141124表示20141124)在脚本所带的here文档中查找当天是否有待办事项,如果有,则将当天的代表事项打印出来。

here文档的内容格式如下(可根据自己的真实课表填写内容):

20141124 linux operating system classat w3309

20141124 linux operating system lab atx4605b

20141125 network security class atw2307

……

脚本内容:#!/bin/bash

Now=`date +%F

Timestring=$(echo “$Now” | awk –F ‘-’ ‘{print$1$2$3}’)

Grep “$timestring” ./here

3)编辑cron任务,使系统每2分钟执行一次memlog脚本,每周一至周五上午7:30执行脚本todo-list(为了看到任务自动执行的结果,可根据上机时间适当调整任务的调度执行时间)

Crontab文件内容: crontab –e;

*/2 * * * * root /bin/memlog

30 07 * * 1-5 root /bin/todo-list

4)查看crontab作业列表

命令:crontab -l

5)等待几分钟后,查看/tmp/mem.log文件的内容

文件内容:Fri Nov 28 12:08:01 CST 2014

 total      used       free     shared   buffers     cached

Mem:  248832     244780       4052          0       7572    108296

-/+ buffers/cache:     128912    119920

Swap:      2096120       2132   2093988

6)查收邮件

邮件内容:sage  2:

From root@localhost.localdomain  Fri Nov 28 12:08:01 2014

Return-Path:<root@localhost.localdomain>

X-Original-To: ronaldqinbiao

Delivered-To:ronaldqinbiao@localhost.localdomain

From: root@localhost.localdomain (CronDaemon)

To: ronaldqinbiao@localhost.localdomain

Subject: Cron<ronaldqinbiao@localhost> ronald /bin/memlog

Content-Type: text/plain; charset=UTF-8

Auto-Submitted: auto-generated

X-Cron-Env: <LANG=en_US.UTF-8>

X-Cron-Env: <SHELL=/bin/sh>

X-Cron-Env:<HOME=/home/ronaldqinbiao>

X-Cron-Env: <PATH=/usr/bin:/bin>

X-Cron-Env:<LOGNAME=ronaldqinbiao>

X-Cron-Env: <USER=ronaldqinbiao>

Date: Fri,  28 Nov 2014 12:08:01 +0800 (CST)

Status: R

 

/bin/sh: ronald: command not found

7)删除memlog作业

命令:crontab -r

8)查看cronatb作业列表

命令:crontab -l

9)删除所有crontab作业

命令:crontab -r

10)指定2分钟后执行一次vmstat命令

命令:at now + 2minutes

at>vmstat

at>Ctrl+D 

11)指定3天后的上午10点执行一次iostat命令

命令:at now + 3days 10:00

At>iostat

At>Ctrl+D

12)查看at作业队列

命令:atq

13)删除所有at作业

命令:atrm atq

14)切换至root用户,利用输出重定向为/etc/cron.deny文件添加一行,该行内容为你的普遍用户名

命令:echo “ronaldqinbiao” >> /etc/cron.deny

15)切换回普通用户身份,尝试再次执行第(3)步

是否成功:

16)切换至root用户,将/etc/cron.deny文件复制为/etc/cron.allow文件

命令:cp /etc/cron.deny /etc/cron.allow

17)切换回普通用户身份,尝试再次执行第(3)步

是否成功:

18)参照man crontab总结系统对用户使用crontab权限的控制方法

总结:控制对cron的访问。可以通过/etc/cron.deny/etc/cron.allow文件来限制用户对cron服务的使用。这两个控制文件的格式都是每行一个用户,不允许空格。如果控制文件被修改了,不必重启cron服务。如果cron.allow文件存在,又有其中列出的用户才被允许使用cron,并且忽略cron.deny文件的设置;如果cron.allow文件不存在,所有在cron.deny中列出的用户都被禁止使用cronRoot用户不受这两个控制文件的约束,总是可以使用cron

19)参照man at总结系统对用户使用at权限的控制方法

总结:控制对at的使用。/etc/at.allow/etc/at.deny文件可以用来限制用户对at命令的使用,root用户不受其限制。这两个控制文件的格式都是每行一个用户,不允许空格。如果at.allow文件存在,只有其中列出的用户才能使用at命令,并忽略at.deny文件;如果at.allow文件不存在,所有在at.deny文件中列出的用户都被禁止使用at命令。

4.软件包管理

1)查询ifconfig命令属于哪个软件包?

命令:rpm –qa | grep ifconfig

2)查询该软件包中包括哪些位于/bin/sbin目录下的网络命令?

命令:which ifconfig

3)设置CentOS的第一张安装光盘作为yum软件源

操作步骤:1.建立本地源目录及挂载临时目录

#mkdir  /mnt/centosyum

#mkdir  /mnt/cdrom

2.挂载CentOS光盘(我这里用的IOS镜像,有两块分别定为盘1,和盘2)

插入盘1然后挂载盘1

#mount  /dev/cdrom    /mnt/cdrom

拷贝盘1内所有rpm包到本地源目录

#cp /mnt/cdrom/*    /mnt/centosyum

同理挂载并将盘2内的rpm包拷贝到本地源目录

3.进入/etc/yum.repos.d目录,可以看到四个文件分别为CentOS-Base.repo CentOS-Media.repo CentOS-Vault.repoCentOS-Vault.repo.repo,将其中三个改名或者移走留下CentOS-Media.repo

#cd /etc/yum.repos.d

#mv CentOS-Base.repo    CentOS-Base.repo.bak

#mv CentOS-Vault.repo    CentOS-Vault.repo.bak

#mv CentOS-Vault.repo    CentOS-Vault.repo.bak

#vi CentOS-Media.repo

将以下内容

[c6-media]

name=CentOS-$releasever - Media

baseurl=file:///media/CentOS/

       file:///media/cdrom/

       file:///media/cdrecorder/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

修改为

[c6-media]

name=CentOS-$releasever - Media

baseurl=file:///mnt/centosyum     ##这里为本地源路径

       file:///media/cdrom/

       file:///media/cdrecorder/

gpgcheck=1

enabled=1    ##开启本地源

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

修改好保存并退出

#yum  clean       清除原来的缓存

到此配置就完成!

4)清空yum缓存

命令:yum clean all

5)更新yum缓存

命令:yum clean

6)利用yum安装xinetdtelnettelnet-server

命令:yum install xinetd telnet telnet-server

7)卸载光盘

命令:umount /dev/cdrom