熟悉系统启动过程与故障排除、进程管理与作业调度、软件包管理。
二、实验环境
CentOS 6.5系统。
三、实验内容
1. 系统启动过程与故障排除
2. 进程管理与作业调度
3. 软件包管理
四、实验步骤
1. 系统启动过程与故障排除
(1)生成grub菜单准备使用的md5密码
命令:grub-md5-crypt或grub;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)挂载第1张CentOS系统安装光盘,并重新引导进入救援模式 linux rescue
(8)从救援模式挂载系统根目录
命令:chroot /mnt/sysimage
(9)重新安装grub第1阶段至/dev/sda主引导记录
命令:grub-install /dev/sda
(10)卸载光盘,重启系统
系统是否恢复:exit;exit
2.进程管理
(1)使用你的普通用户身份在虚拟控制台tty2、tty3上登陆
快捷键:alt+Fn
(2)在tty2上运行以下命令:
$ (while true; do echo �Cn A >>log; sleep 1;done)
(3)注意这个控制台现在因为在运行你的进程,所以处于忙的状态(进程在前台运行),这个进程不断把字母“A”添加进~/log文件中去,到 tty3上运行以下命令:
$ tail �Cf 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 �Cn B >>log; sleep 1;done) &
$ (while true; do echo �Cn C >>log; sleep 1;done) &
(7)输入 jobs确认三个进程都在运行,到 tty3上看到每秒钟会有三个字母增长。
(8)在第 4 步你按 ctrl-z时,实际上是给进程发一个信号,使用 kill命令也可以给它们发信号,使用 kill来显示信号列表和标号,然后发一个 SIGSTOP(19)的信号给job[1],到 tty2 上执行:
$ kill �Cl
$ kill -19 %1
(9)输入 jobs,确认 job[1]停止,到 tty3 上看结果是否停止。
(10)用 kill 重新启动进程,使用 SIGCONT(18)信号,你会看到进程又重新启动了。(参考第 8 步的实现方法)
(11)使用 kill 命令的 SIGTERM(15)信号,也是 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 �Cd 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表示2014年11月24日)在脚本所带的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 �CF ‘-’ ‘{print$1$2$3}’)
Grep “$timestring” ./here
(3)编辑cron任务,使系统每2分钟执行一次memlog脚本,每周一至周五上午7:30执行脚本todo-list(为了看到任务自动执行的结果,可根据上机时间适当调整任务的调度执行时间)
Crontab文件内容: crontab �Ce;
*/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 [email protected] Fri Nov 28 12:08:01 2014
Return-Path:<[email protected]>
X-Original-To: ronaldqinbiao
Delivered-To:[email protected]
From: [email protected] (CronDaemon)
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中列出的用户都被禁止使用cron。Root用户不受这两个控制文件的约束,总是可以使用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 �Cqa | 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.repo、CentOS-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安装xinetd、telnet、telnet-server
命令:yum install xinetd telnet telnet-server
(7)卸载光盘
命令:umount /dev/cdrom