LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: weixiao

RH7.3最终汉化实例与RedHat软件设置

[复制链接]
发表于 2006-9-29 18:39:26 | 显示全部楼层

===== 描述登录前事项 (2) =====

二 调用 /sbin/init 程序

INIT: version 2.84 booting
init是系统第一个必需调用的进程,称父进程(固定 PID : 1 )。

$ ps 1
PID TTY STAT TIME COMMAND
1 ? S 0:04 init

init 程式依照配置文件/etc/inittab引导RH系统指定的系统状态和运行级别。下面注有"# /etc/inittab "属于该文件中的定义项目。/etc/inittab文件项目定义的格式: id:runlevels:action: process 。

[ 注: 相关手册资料:man 5 inittab ]

1 init 程式操作运行级常规定义

# /etc/inittab
id:3:initdefault:

runleves(3) 定义属于完全多用户模式(标准的运行级3)。action (initdefault)是指用标准的运行级定义。如果action 设置成不是RH的定义关键字,或举例设置成:id:3:: ,启动时就出现提示信息 Enter runlever: ,要求选择0-6运行级别来boot system 。

2 执行/etc/rc.d/rc.sysinit脚本,设置系统环境

# /etc/inittab
si::sysinit:/etc/rc.d/rc.sysinit
action(sysinit)表示脚本程式(process)是在系统启动期间运行,而且是最早。

/etc/rc.d/rc.sysinit脚本以下工作:
1 设置 PATH 内容
2 读取/etc/sysconfig/network 文件,设置该文件内容配置网络数据。如HOSTNAME、GATEWARY等
3 显示Welcome信息
4 挂载 proc 文件系统并建立进程目录
5 配置内核参数
6 设置系统时间、设置控制台和键盘映射、加载控制台字体
7 加载并激活USB模组
8 fsck 只读方式检测root文件系统
9 用读写方式重新挂载root文件系统
10 检查是否使用模块并加载模块
11 处理配额设置(quota)
12 建立并初始化所有即插即用设备
13 建立并初始化逻辑卷管理器(如果设置)
14 启动IDE硬盘优化(是IDE硬盘时)
15 加载所需或已配置的内核模块
16 建立、打开并使用声音和调音台设置(如果有设置)
17 启动RAID服务(如果设置)
18 初始化/etc/fstab,装配其它文件系统
19 打开进程统计
20 更换引导内核信息文件、清除临时文件
21 将开机信息写入/var/log/dmesg
22 初始化串口
23 创建SCSI设备

3 init 程式会继续执行指定运行级别的脚本

# /etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

运行级别是3,对应"l3:3:wait:/etc/rc.d/rc 3",process(/etc/rc.d/rc 3)表示执行/etc/rc.d/rc脚本,3是参数。

init程式会执行/etc/rc.d/rc3.d/目录下以 S 开头的脚本。action(wait)表示必须执行指定process设置,init等待执行完成后才可以继续进行下一步操作。

引导期间,屏幕显示启动服务的信息的范例:

Entering non-interactive startup
..........................................
Starting up APM daemon: [OK]
Starting automount: No Mountpoints Defined [OK]
Starting xinetd: [OK]
..........................................

补充:/etc/rc.d/rc3.d/目录下 S99local启动脚本,"99"表示安排到最后启动的脚本。实质是/etc/rc.d/rc.local脚本,你可以在这文件设置环境变量或登录后自动运行程式。习惯使用这文件修改登录信息。

4 update命令

# /etc/inittab
ud:: once:/sbin/update

process(/sbin/update)命令按照指定时段自动运行sync进行写操作。性质跟bdflush一样,都是在指定时段将缓存区的数据写入磁盘。不同的是,bdflush由内核执行来协调内存机制,update命令要求运行在I/O应用之前,即你操作输入设备(键盘、鼠标等)前运行。(默认缓存区每隔30秒写操作一次,元数据每隔5秒写操作一次)

action(once)表示选择哪一个运行级别都要执行process一次。

5 CTRL-ALT-DELETE按键执行事件

# /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

action(ctrlaltdel)表示按CTRL-ALT-DELETE组合键时向init父进程发送信号,init 父进程接收到 SIGINT (中断信号)时,执行process。

process(/sbin/shutdown -t3 -r now)表示立即执行重启系统工作。-t3选项是指如果当前系统有其他用户登录,会延迟3秒向用户发送系统重启的信息。如下:
Broadcast message from root (tty1) (Fri Sep 29 09:50:45 2006):
The system is going down for reboot NOW!

6 电源相关设置

# /etc/inittab
pf:: powerfail:/sbin/shutdown -f -h +2 "ower Failure; System Shutting Down"
pr:12345: powerokwait:/sbin/shutdown -c "ower Restored; Shutdown Cancelled"

RH 考虑不按正常关机切断电源后,系统应该怎样处理。这部分设置需要UPS硬件设备和安装powerd软件。

UPS(不间断电源)是连接计算机与电源之间的设备,保证电流不受干扰。UPS设备使用电池保持计算机在切断电源后仍运行一段时间。powerd 是相关的守护进程。

shutdown -f -h +2 "ower Failure; System Shutting Down"表示切断电源后,发送 "ower Failure; System Shutting Down"信息,并2分钟后关闭系统,-f 选项是在特定数据块设定"clean",下次启动系统时跳过fsck系统。

shutdown -c "ower Restored; Shutdown Cancelled"表示电源恢复在执行shutdown之前,发送"ower Restored; Shutdown Cancelled" 并中断取消关机指令。

7 虚拟控制台的初始化

# /etc/inittab
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

选择2345中一个运行级别,都拥有6个虚拟控制台(tty1-tty6)。
虚拟控制台之间的转换:Alt+F1 至 Alt+F6 。
X图形界面与虚拟控制台之间的转换:Ctrl+Alt+F7、Ctrl+Alt+F1 至 Ctrl+Alt+F6 。
mingetty 程式是 getty 程式的简装版,除运行级别(5)外,init 为每一个虚拟控制台运行一个mingetty实例,输出一个欢迎信息(/etc/issue),运行/bin/login程式,等待用户身份验证。

action(respawn)表示mingetty进程任何时候终止都被重启。
情况通常发生在用户注销工作,init 父进程监测到mingetty进程终止就给这个控制台启动一个新的mingetty 实例。

8 运行级别(5)特定设置xdm服务

# /etc/inittab
x:5:respawn:/etc/X11/prefdm -nodaemon

/etc/X11/prefdm 脚本在RH引导至运行级别(5)时执行适当的X11显示管理器。

9 显示登录界面,准备登录
------------------------
Red Hat Linux release 7.3 (Valhalla)
Kernel 2.4.18-3 on an i686
localhost login:
passwd:
------------------------

[ 注:以上部分引导信息相关文件 /var/log/messages 、/var/log/boot.log ]

-----------
-----------
回复 支持 反对

使用道具 举报

发表于 2006-9-29 18:41:39 | 显示全部楼层

‘模拟系统启动时屏幕输出文本’脚本:

研究 RH 日志文件,查找启动系统时的屏幕输出信息时,发觉启动信息不是十分完全。翻翻启动程式(如rc.sysinit),写写‘模拟屏幕输出文本’脚本:

root权限操作
# vi /root/bin/wlook-info.sh
---------------------------------------
#!/bin/bash
## scriptname: wlook-info.sh
# Root权限执行脚本
if [ $(id -gn) != "root" ] ;then
echo Permission denied
exit
fi
# 建立操作目录
[ -d /tmp/wbootdir ] || mkdir /tmp/wbootdir
# 准备载入模块信息
w_sd=0;w_scsi=0;w_jbd=0;w_sc=0
if lsmod|grep -q '^sd_mod';then w_sd=1;fi
if lsmod|grep -q '^scsi_mod';then w_scsi=1;fi
if lsmod|grep -q '^jbd';then w_jbd=1;fi
[[ $w_sd -eq 1 && $w_scsi -eq 1 ]] && w_sc=1
# grub 装载内核信息
sed '/^#/d' /etc/grub.conf | sed -n '/^title/,$p' | sed 's/^[[:space:]]//' > /tmp/wbootdir/gr.t
w_nu=$(grep -c '^title' /tmp/wbootdir/gr.t)
filename='/tmp/wbootdir/gr.t'
n=0
# 多项内核引导信息,title 不止一项时
if [ $w_nu -ne 1 ];then
while read LINE
do
case "${LINE}" in
title*)
((n=n+1))
echo "${LINE}" > /tmp/wbootdir/wgr.$n ;;
*) echo "${LINE}" >> /tmp/wbootdir/wgr.$n ;;
esac
done < /tmp/wbootdir/gr.t
# 提取内核信息,如果脚本不能判断内核信息
# 如内核经过编译,‘Change it you':自己编辑信息
if grep -ql "kernel.*$(uname -r)" /tmp/wbootdir/wgr* ;then
w_wgr=$(grep -l "kernel.*$(uname -r)" /tmp/wbootdir/wgr*)
filename=$(echo ${w_wgr}|awk '{print $1}')
else
echo 'title Change it you' > /tmp/wbootdir/w_gr.test
echo 'root (hd0,0)' >> /tmp/wbootdir/w_gr.test
echo 'kernel /boot/NEW ro root=/dev/NEW' >> /tmp/wbootdir/w_gr.test
echo 'kernel /boot/NEW-initrd-NEW.img' >> /tmp/wbootdir/w_gr.test
filename='/tmp/wbootdir/w_gr.test'
fi;fi
# 输出grub引导信息
clear
while read LINE
do
case "${LINE}" in
title*)
w_ti=$(echo "${LINE}"|awk -F'title' '{print $2}')
(echo "Booting '$w_ti '" ; echo) >> /tmp/wbootdir/bootlog
;;
root*)
echo "${LINE}" >> /tmp/wbootdir/bootlog
echo " Filesystem type is ext2fs, partition type 0x83" >> /tmp/wbootdir/bootlog
;;
kernel*)
echo "${LINE}" >> /tmp/wbootdir/bootlog
echo -e "\t[Linux-bzImage, setup=0x1400, size=0xfaxxx]">> /tmp/wbootdir/bootlog
;;
initrd*)
echo "${LINE}" >> /tmp/wbootdir/bootlog
echo -e "\t[Linux-initrd @ 0xbea8000, 0x37cd2 bytes]">> /tmp/wbootdir/bootlog
;;
*) echo "${LINE}" >> /tmp/wbootdir/bootlog;;
esac
done < $filename
cat /tmp/wbootdir/bootlog
# 解压内核的信息
echo -e "Uncompressing Linux .\c";sleep 0.5;echo -e ".\c";sleep 1
echo -e ". \c";sleep 0.5;echo -e " OK, booting the kernel.\n"
sleep 1
# 抽取/var/log/dmesg文件中信息,并补充模块信息
sed -n '1,/^[Aa]dding [Ss]wap:/p' /var/log/dmesg > /tmp/wbootdir/wdm.t
while read LINE
do
if  echo "${LINE}"|grep -q '^[Jj]ournalled [Bb]lock [Dd]evice';then
[ $w_jbd -eq 1 ] &&  echo 'Loading jbd module'
fi

echo "${LINE}"
if echo "${LINE}"|grep -q '^Linux version';then sleep 1;fi
if echo "${LINE}"|grep -q '^.*ide1';then sleep 0.5;fi
if [ $w_sc -eq 1 ];then
if echo "${LINE}"|grep -q '^VFS: [Mm]ount';then
echo 'Red hat nash version 3.3.10 starting'
echo 'Loading scsi_mod module'
sleep 0.5 ;fi
if echo "${LINE}"|grep -q '^[Kk]mod: failed';then
echo 'Loading sd_mod module'
w_sc=0;fi
fi
done < /tmp/wbootdir/wdm.t

# init 程序标题信息
sleep 1
echo -e "INIT: \c";sleep 0.3;echo "version 2.84 booting"
sleep 1
# 输出欢迎信息
echo -en "\t\tWelcome to \e[1;31mRedHat \e[0mLinux\n"
echo -en $"\t\tPress 'I' to enter interactive startup.\n"

#
#
#
# /var/log/boot.log 中抽取rc.sysinit输出信息

boottime=$(sed -n '$p' /var/log/boot.log | sed 's/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] .*//')
grep "^${boottime}" /var/log/boot.log > /tmp/wbootdir/bw.log
b_nu=$(grep -c "syslogd startup succeeded" /tmp/wbootdir/bw.log)
# 如果一日重启多次,抽取最后一次启动信息
if [ ${b_nu} -eq 1 ];then
cp -f /tmp/wbootdir/bw.log /tmp/wbootdir/bootw.log
else
n=1
while (( $n > 0 ))
do
if tail -n $n /tmp/wbootdir/bw.log|grep -q "syslogd startup succeeded";then
tail -n $n /tmp/wbootdir/bw.log > /tmp/wbootdir/bootw.log
n=0
else
(( n=n+1 ))
fi
done
fi
# 初始化‘启动服务’,最后一次启动信息作备份
if grep -q 'rc.sysinit:' /tmp/wbootdir/bootw.log ;then
cp -f /tmp/wbootdir/bootw.log /tmp/rb.wei
else
if [ -f /tmp/rb.wei ] ;then
cp -f /tmp/rb.wei /tmp/wbootdir/bootw.log
else
echo 'Tips : rc.sysinit: tips reboot ' > /tmp/wbootdir/bootw.log
fi;fi

if [ -f /tmp/b_t_w.log ] ;then
bootw='/tmp/b_t_w.log'
else
bootw='/tmp/wbootdir/bootw.log'
cp /tmp/wbootdir/bootw.log /tmp/b_t_w.log
fi
# 制作输出信息
grep 'rc.sysinit:' ${bootw} | awk -F'sysinit: ' '{print $2}' | sed 's/ succeeded//' > /tmp/wbootdir/bw1.log
grep -v 'rc.sysinit:' ${bootw} > /tmp/wbootdir/bw2.log
# ‘格式输出’变量
b_le=$(runlevel | awk '{print $2}')
b_ok="[ \e[1;32m OK \e[0m ]"
# 输出rc.sysinit程式信息
while read LINE
do
printf "%-59s%-6s\n" "${LINE}" "$(echo -e "$b_ok")"
if echo "${LINE}" | grep -q '[Cc]hecking root filesystem' ;then
sleep 1
if grep -q '/: clean' /tmp/wbootdir/bw2.log ;then
grep '/: clean' /tmp/wbootdir/bw2.log | cut -d':' -f4-
printf "%78s\n" "$(echo -e "$b_ok")"
fi;fi;done < /tmp/wbootdir/bw1.log
# 补充运行级别,非交互式启动
echo -e "\nINIT:Entering runlevel: ${b_le}\n"
echo 'Entering non-interactive startup'
# 初始化‘服务启动’信息后,读取信息
if [ -f /tmp/b_s_w.log ];then
while read LINE
do
echo "${LINE}"
echo "${LINE}" | grep -q 'Checking for new hardware' && sleep 5
echo "${LINE}" | grep -q 'xinetd:' && sleep 2
done < /tmp/b_s_w.log
rm -f /tmp/b_t_w.log
else
# 初始化‘服务启动’信息
# 提示在控制台(黑屏)初始化
b_tty=$( ps | grep ps | awk '{print $2}')
if [[ ${b_tty} != tty[0-9] ]] ;then
echo -e "\n== > Runs Scripts on console ! \n"
exit
fi
# 初始化,并存入‘读取信息’文本
for b_file in $(ls /etc/rc.d/rc${b_le}.d/S*)
do
${b_file} stop > /dev/null
${b_file} start
done | tee /tmp/b_s_w.log
echo '' >> /tmp/b_s_w.log
fi
# 清屏
sleep 1;clear
# 输出系统信息
cat /etc/redhat-release
echo "Kernel $(uname -r) on an $(uname -m)"
# 模拟登录
echo -e "\n\n\nlocalhost login: _\npasswd: \n\n"
echo
# 删除操作目录
rm -rf /tmp/wbootdir
# 清空变量
set --
---------------------------------------

# chmod +x /root/bin/wlook-info.sh

第一次运行脚本,要求在控制台(黑屏)执行
# wlook-info.sh

实例 1
屏幕输出文本到文件

# wlook-info.sh | tee /tmp/filename

实例 2
硬件变动,‘服务启动’修改。需要重新初始化获取准确信息

删除‘读取信息’文本
# rm /tmp/b_s_w.log

重新初始化
# wlook-info.sh

实例 3
  除了第一次初始化外,在X(图形界面)或控制台没有分别

--------------------
注:如果粘贴脚本麻烦,下载附件中的脚本。

---
---

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-9-29 18:43:55 | 显示全部楼层

摘录网上资料

RH linux inittab详解

一、什么是init
init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。  
内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。  

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。  

二、运行级别  
运行级就是操作系统当前正在运行的功能级别。这个级别从1到6,具有不同的功能。其功能级别如下:

# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式  
# 2 - 多用户,没有 NFS  
# 3 - 完全多用户模式(标准的运行级)  
# 4 - 没有用到  
# 5 - X11 (xwindow)  
# 6 - 重新启动 (千万不要把initdefault 设置为6——把被你黑掉的linux的initdefault

设置为0或6也算是拒绝服务攻击噢!)

除此之外还有ABC三个运行级别,但在RHLinux中都没有意义。

这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)  

三、运行级别的配置

运行级别的配置是在/etc/inittab行内进行的,如下所示:  
12 : 2 : wait : / etc / init.d / rc 2  

各字段解释如下:
id:runlevels:action: process

  id:是一个任意指定的四个字符以内的序列标号,在本文件内必须唯一;使用老版本的libc5(低于5.2.18)或a.out库编译出来的sysvinit限制为2字符。注意:像getty之类的登陆进程必须使id字段与tty编号一致,如tty1需要id=1,许多老版本的登陆进程都遵循这种规则。

  runlevels:表示这一行适用于运行那个/些级别(这里是2,可以有多个,表示在相应的运行级均需要运行);另外sysinit、boot、bootwait这三个进程会忽略这个设置值。

  action:表示进入对应的runlevels时,init应该运行process字段的命令的方式,常用的字段值及解释在附录内。例子中的wait表示需要运行这个进程一次并等待其结束。

  process:具体应该执行的命令。例子中的/etc/init.d/rc命令启动运行级别2中应该运行的进程/命令,并负责在退出运行级时将其终止(当然在进入的runlevel中仍要运行的程序除外。)

当运行级别改变,并且正在运行的程序并没有在新的运行级别中指定需要运行,那么init会先发送一个SIGTERM 信号终止,然后是SIGKILL。

有效的action值如下:
  respawn:表示init应该监视这个进程,即使其结束后也应该被重新启动。
  wait:   init应该运行这个进程一次,并等待其结束后再进行下一步操作。
  once:   init需要运行这个进程一次。
  boot:   随系统启动运行,所以runlevel值对其无效。
  bootwait:随系统启动运行,并且init应该等待其结束。
  off:     没有任何意义。
  initdefault:系统启动后的默认运行级别;由于进入相应的运行级别会激活对应级别的进程,所以对其指定process字段没有任何意义。如果inittab文件内不存在这一条记录,系统启动时在控制台上询问进入的运行级。
  sysinit:  系统启动时准备运行的命令。比如说,这个命令将清除/tmp。可以查看/etc/rc.d/rc.sysinit脚本了解其运行了那些操作。
  powerwait:允许init在电源被切断时,关闭系统。当然前提是有U P S和监视U P S并通知init电源已被切断的软件。RH linux默认没有列出该选项。
  powerfail:  同powerwait,但init不会等待正在运行的进程结束。RH linux默认没有列出该选项。
  powerokwait:当电源监视软件报告“电源恢复”时,init要执行的操作。
  powerfailnow:检测到ups电源即将耗尽时,init要执行的操作,和powerwait/powerfail不同的哟。
  ctrlaltdel:允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。我是设置成打印一句骂人的话了^o^。
  kbrequest:监视到特定的键盘组合键被按下时采取的动作,现在还不完善。
  ondemand:A process marked with an ondemand runlevel will be executed whenever the specified ondemand runlevel is called.  However, no runlevel change will occur (ondemand runlevels are ‘a’, ‘b’,and ‘c’), (英语太菜,那个however不知道该怎么翻译才好。惭愧!)

     补充:
   1、关于进入单用户模式,一般都是采用设置initdefault为1或者在grub/lilo中指定一个“single”或“emergency” 命令行参数来实现。
   2、系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。
----
:%
回复 支持 反对

使用道具 举报

发表于 2006-9-29 18:46:06 | 显示全部楼层

引导至登录 RH 系统后,曾经‘动过’的目录和文件 (1)

RH linux系统用久,总想知道启动后‘动过’哪些文件。

  每次启动系统,都要访问/dev 目录下指定设备文件,如 tty1 、/dev/gpmctl(gpm服务)。/proc伪文件系统被创建,/proc是连接内核数据结构的界面,目录下的文件内容都随时间不断变化。

登录 RH 后,忽略/proc 和 /dev 查询15分钟之内变动过的文件:

# find / -path "/proc" -prune -o -path "/dev" -prune -o -cmin -15 -print
--------------------------------------------------------
" 引导至登录 RH 系统后,曾经‘动过’的目录和文件 (2) "
" 引导至登录 RH 系统后,曾经‘动过’的目录和文件 (3) "
--------------------------------------------------------

[ 注:自己掌握分钟数,这里15分钟包括(引导-登录-anacron服务启动-输入find-显示数据) ]

====
-------
回复 支持 反对

使用道具 举报

发表于 2006-9-29 18:53:43 | 显示全部楼层

引导至登录 RH 系统后,曾经‘动过’的目录和文件 (2)

/var/lib/rpm 启动脚本曾经在这目录删除类似 “__db*” 的临时文件 。

/var/lib/random-seed 存储字符设备文件(/dev/urandom),跟时间种子数有关。
"dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=512 2> /dev/null"

/var/log :

/var/log/ksyms.0 文件是最新开机时的核心信息。boot loader(grub)调入并解压内核,由核心侦测并驱动周边设备装置(载入合适的模组),一系列的核心信息,提供数据方便调试内核。
文件内容由以下信息组成:
date ; uname -a ; cat /proc/cpuinfo ; cat /proc/modules ; cat /proc/ksyms

/var/log/ksyms.[1-6] 保存以前开机时的核心信息。

/var/log/dmesg 也是开机时的核心信息,在屏幕中输出的核心信息。屏幕输出信息存储在特定大小的缓存区,/var/log/dmesg 只保存其中一部分。dmesg 命令是读取缓存区的内容。

[ 注: RH7.3,/etc/rc.d/rc.sysinit 设置内容:dmesg -s 131072 > /var/log/dmesg ]

/var/log/maillog 、/var/log/cron 、/var/log/boot.log/var/log/messages
属于系统记录工具 syslog 使用的记录文件。配置文件:/etc/syslog.conf 。

/var/log/lastlog 日志文件,data类型文件,保存的数据是关于用户最后一次登录信息的记录,由login程式生成 。用 lastlog 命令查看,"**Never logged in**"是指从来没有登录过 。

/var/log/wtmp 记录每个用户登录、注销和系统启动、停机的事件。last 命令查看 。

/var/lock/subsys :
anacron atd cWnn keytable local network sendmail tWnn xinetd
apmd crond gpm kudzu netfs random syslog xfs

这些文件存在,标记着相应的服务程式处在运行状态。设计程式 称 加锁文件,‘独占’避免‘冲突’。

root权限操作:
现在的运行级别(runlevel)
# runlevel
N 3

显示运行级(3) 服务模组
# ls -l /etc/rc.d/rc3.d/

如:S28autofs -- > S 表示启动 (K 表示停止),28级的优先权,autofs 系统服务名称 。
链接控制脚本文件 ( /etc/rc.d/init.d/autofs ) 。

设置服务启动或停止
setup 或 ntsysv 图形界面,或 chkconfig 命令行工具。

详细显示系统设置 服务 现况
# chkconfig --list

问:autofs 设置‘启动’,/var/lock/subsys/ 目录下没有相应的标记文件?
》 autofs 服务在执行任务完成后已经‘stop’。/var/lock/subsys 目录下文件是标记‘常驻服务’。

检测服务当前状态:
# [ -f /var/lock/subsys/crond ] && echo "crond is running..."
crond is running...

# /etc/rc.d/init.d/crond status
crond (pid 907) is running...

/var/run/console.lock 、/var/run/console/wei 标记主机信息。

/var/run/utmp:记录当前登录的每个用户的信息。命令 who、w、users、finger等就需要访问这个文件。

/var/run :
atd.pid 、gpm.pid 、apmd.pid 、syslogd.pid 、xfs.pid 、sendmail.pid 、crond.pid 、xinetd.pid 、klogd.pid

如: atd.pid 表示 atd 进程的ID号码 。
# cat /var/run/atd.pid
1023

# ps -ax | grep ' 1023 '
1023 ? S 0:00 /usr/sbin/atd

# ps 1023
PID TTY STAT TIME COMMAND
1023 ? S 0:00 /usr/sbin/atd

上例的检测服务当前状态:
# [ -f /var/lock/subsys/crond ] && echo "crond (pid $(cat /var/run/crond.pid)) is running..."
crond (pid 907) is running...

/var/spool/anacron/cron.dailycron.weeklycron.monthly
anacron 服务确保每日、每周、和每月的 cron 任务都被运行。cron.daily 、cron.weekly 和 cron.monthly用作时间戳(timestamp)文件的名称,/etc/anacrontab 配置文件 job-identifier参数的值。

-----
-----
回复 支持 反对

使用道具 举报

发表于 2006-9-29 18:57:27 | 显示全部楼层

引导至登录 RH 系统后,曾经‘动过’的目录和文件 (3)

/var/log/rpmpkgs 搜索系统已经安装的 rpm 软件包,经排序存储在这个文件 。
相关命令:rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' 2>&1|sort > /var/log/rpmpkgs

/var/spool/anacron/cron.daily 时间戳(timestamp)文件。/var/spool/anacron/cron.daily 更改成当前的日期。
相关命令:anacron -u cron.daily

/var/lib/logrotate.status 管理日志文件工具 logrotate 检查或更新日志文件轮换的时间。
相关命令:/usr/sbin/logrotate /etc/logrotate.conf

/var/lib/slocate/slocate.db 数据库文件,locate命令按字符查询符合条件的文件和目录。
相关命令:updatedb -f "proc,devpts" -e "/mnt,/tmp"

/var/lib/texmf 放置 TeX 字体的目录。系统默认超期180天会被删除。
相关命令:/usr/sbin/tmpwatch 4320 /var/lib/texmf

/var/cache/man/X11R6/cat{n,[1-9]}
/var/cache/man/cat{n,[1-9]}
/var/cache/man/local/cat{n,[1-9]}
/tmp
/var/tmp

以上目录或涉及的目录下的文件,相关执行脚本 /etc/cron.daily/tmpwatch 。

$ cat /etc/cron.daily/tmpwatch
--------------------------------------------------------
/usr/sbin/tmpwatch 240 /tmp
/usr/sbin/tmpwatch 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch -f 720 $d
fi
done
--------------------------------------------------------

/var/cache/man/whatis 更新Whatis数据库文件。apropos 、whatis命令需要这个文件。
相关命令:makewhatis -u -w

/tmp/orbit-root
/tmp/.ICE-unix
/tmp/orbit-wei

放置Socket(套接口)文件的目录,属于应用程序接口文件。多数文件是启动 X 时存放,少许是临时文件。
.ICE-unix 命名中ICE是unix资料 习惯性 主机词汇 。

-----
===
回复 支持 反对

使用道具 举报

发表于 2006-9-29 19:02:03 | 显示全部楼层

RH 任务调度 1 --- cron [crond]

$ whatis cron
$ apropos crond
cron [crond]         (8)  - daemon to execute scheduled commands (Vixie Cron)

个人用户设置 任务调度(周期性的执行工作)
$ crontab -l
no crontab for wei

编辑任务调度 (每5分钟记录当前的小时)
$ vi w-cronfile
-------------------------------------------------------------
0/5 * * * * echo " This hours is $(date '+%k')" >> ~/test.cron
-------------------------------------------------------------

提交给 crond 服务进程并启动任务调度
$ crontab w-cronfile
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (w-cronfile installed on Sun Sep 24 14:13:10 2006)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0 * * * * echo " This hours is $(date '+%k')" >> ~/test.cron

$ su - -c "cat /var/spool/cron/wei"
$ su - -c "cat /var/log/cron"

修改或添加任务信息
刚才编辑的执行命令 $(date '+%k') ,crond 发E-mail提示不支持该选项,修改如下:
$ vi w-cronfile
----------------------------------------------------
*/5 * * * * echo " Time is $(date) " >> ~/test.cron
----------------------------------------------------

提交给 crond 服务进程并启动任务调度
$ crontab w-cronfile
$ crontab -l
$ su - -c "cat /var/spool/cron/wei"
$ su - -c "cat /var/log/cron"
$ cat ~/test.cron

用户终止任务调度
$ crontab -r

系统管理员(root)终止用户的任务调度
# rm /var/spool/cron/wei

# crontab -u wei -r

分析:系统设置的任务调度(周期性的执行工作)

个人用户设置的信息内容被记录在/var/spool/cron/[用户名] ,系统设置的任务调度信息内容记录在/etc/crontab 。

# cat /etc/crontab
----------------------------------------------
# 设置环境变量
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts 参数信息,执行指定目录下所有文件
# 每小时第一分钟,root 权限执行/etc/cron.hourly目录下所有文件
01 * * * * root run-parts /etc/cron.hourly

# 每日4点02分,root 权限执行/etc/cron.daily目录下所有文件
02 4 * * * root run-parts /etc/cron.daily

# 每个星期日4点22分,root 权限执行/etc/cron.weekly目录下所有文件
22 4 * * 0 root run-parts /etc/cron.weekly

# 每个月1日的4点42分,root 权限执行/etc/cron.monthly目录下所有文件
42 4 1 * * root run-parts /etc/cron.monthly
----------------------------------------------

显示指定目录下的脚本文件
# ls -R /etc/cron*ly

如脚本/etc/cron.daily/tmpwatch ,系统会在每天4点02分,清除/tmp目录下超期时间是10天的文件。

假如你在4点02分前关机,又要按计划清除/tmp/文件:执行命令 /usr/sbin/tmpwatch 240 /tmp

--------------
--------------
--------------
回复 支持 反对

使用道具 举报

发表于 2006-9-29 19:06:12 | 显示全部楼层

RH 任务调度 2 --- anacron

$ apropos anacron
anacron              (8)  - runs commands periodically
/etc/anacrontab [anacrontab] (5)  - configuration file for anacron

[ 收集一些资料 ]
  anacron 是和 cron 相似的任务调度的常驻服务,它并不要求系统持续运行。它可以用来运行通常由 cron 运行的每日、每周、和每月的作业。

  cron 任务调度(周期性的执行工作)相对个人用户操作,系统不是长期运作,效果有点模糊。换句话说:cron 任务调度是要求系统长期运作。

  假如在RH有一个例子:前提是anacron服务被停止,/tmp目录下有一个接近10天的垃圾文件,用户总是在4点02分前关机,垃圾文件是不会被自动删除。

  明显可见,配置并启动 anacron 服务的目的是确保每日、每周、和每月的 cron 任务都被运行。

anacron 配置文件
$ cat /etc/anacrontab
-----------------------------------------------------------------
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
# 设置环境变量
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system.
# period __ delay __ job-identfier __ cmmand
1 5 cron.daily  run-parts /etc/cron.daily
7 10 cron.weekly  run-parts /etc/cron.weekly
30 15 cron.monthly run-parts /etc/cron.monthly
------------------------------------------------------------------

period — 命令执行的频率(天数)
delay — 延迟时间(分钟)
job-identifier — 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(除斜线外)。
command — 要执行的命令

  对于每项任务,anacron 先判定该任务是否已在配置文件的 period 字段中指定的期间内已经被执行。如果它在给定期间内还没有被执行,anacron 会等待 delay 字段中指定的分钟数,然后执行 command 字段中指定的命令。

  任务完成后,anacron 在 /var/spool/anacron 目录内的时间戳(timestamp)文件中记录日期。只有日期被记录,而且 job-identifier 的值被用作时间戳文件的名称。

------

[ 注:anacron 服务的目的是确保每日、每周、和每月的 cron 任务都被运行。 ]

[ 有些网友Login RH 系统一会儿后发现有读硬盘的声音,误以为 fsck 系统,是关于/etc/fstab 中Dump、Pass设置方面。应该是anacron服务延迟5分钟执行/etc/cron.daily目录下的所有脚本文件。]

[ 可以这样判断,登录系统后5-15分钟系统连续自动读写硬盘,该系统最少30天没有用户登录。]

---------------
---------------
---------------
回复 支持 反对

使用道具 举报

发表于 2006-9-29 19:10:26 | 显示全部楼层

RH 任务调度 3 -- anacron 、crond 服务另一对象:logrotate

管理日志文件工具: logrotate

logrotate 程序是管理日志文件的程序。它主要目的是防止日志文件日趋增长而采用轮换删除文件的方法。

查看 logrotate 程序默认指令
$ cat /etc/logrotate.conf
------------------------------------------------------
# see "man logrotate" for details
# 每周第一天轮换日志文件
weekly

# 在删除文件以前轮换这些文件的4次。一个当前版本和4个旧版本的副本。
rotate 4

# 将旧版本文件轮换出来,创建一个新版本的日志文件
create

# 使用gzip压缩旧版本文件。(这里注释掉)
#compress

# rpm程序包把它们默认的记录轮换信息安装到 /etc/logrotate.d目录下
include /etc/logrotate.d

# rpm 没有把/var/log/wtmp的轮换信息安装到 /etc/logrotate.d目录下
# 我们把轮换信息放到这里
# wtmp文件按每月轮换并且保留一份副本
# 并设置指定参数:使用权限(0664)、拥有者(root)、使用组(utmp)
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
-------------------------------------------------------

查看需要轮换的日志文件的信息
$ ls /etc/logrotate.d
rpm  snmpd  syslog  up2date

举例 1 :

$ cat /etc/logrotate.d/up2date
-------------------------------
/var/log/up2date {
missingok
}
-------------------------------

  missingok 指令是指如果 /var/log/up2date 文件不存在(missing),不发出错误信息,继续下去(ok)。

  注: up2date是RH提供自动升级程式,现在RH7.3自带up2date版本不受到RH升级服务的支持。安装RH7.3后,我把rhnsd 服务停止,up2date没有被使用,/var/log/up2date 日志文件就不存在。

举例 2 :

    系统记录工具syslog在系统运作期间有目的性地记录(日志文件),syslog考虑到日志文件增长的速度,提交一份怎样管理日志文件的方案给logrotate管理程式,/etc/logrotate.d目录成为两者的接口。

分析syslog方案
$ cat /etc/logrotate.d/syslog
-------------------------------------------
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
-------------------------------------------

  /var/log/messages 、/var/log/secure 、/var/log/maillog 、/var/log/spooler 、/var/log/boot.log 、/var/log/cron 文件是syslog工具要求被管理的日志文件。sharedscripts指令选项告诉logrotate管理程式在匹配以上的日志文件,执行postrotate/endscript 之间的语句。

  postrotate/endscript :处于这对语句之间的命令会在日志文件完成轮换后执行。
“/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true”:日志文件完成轮换后,要求logrotate向syslogd(守护进程)发送HUP(重置)信号指令,让 syslogd 重新对文件进行写操作。

  另外,其它轮换信息采用 /etc/logrotate.conf 默认设置。

举例 3 :收集脚本语句,加深logrotate管理日志文件的认识

  /etc/rc.d/rc.sysinit脚本,ksyms轮换文件名段落:
-------------------------------------------------
i=5
while [ $i -ge 0 ] ; do
        if [ -f /var/log/ksyms.$i ] ; then
                mv /var/log/ksyms.$i /var/log/ksyms.$(($i+1))
        fi
        i=$(($i-1))
done
-------------------------------------------------

简单来说,/var/log/目录下,如 " ls /var/log/messages{,.[1-4]} " ,文件后端是数字都是logrotate管理的日志文件。

logrotate 自动执行任务:编写脚本文件 logrotate 放到/etc/cron.daily目录下,交给anacron、crond服务进行调度。

---------------
---------------
回复 支持 反对

使用道具 举报

发表于 2006-9-29 19:15:54 | 显示全部楼层

管理日志文件工具: logrotate(续)

配置文件(/etc/logrotate.conf)设置指令列表

compress ______ 使用默认压缩工具(gzip)压缩旧的日志文件。

compresscmd ___ 重新设置压缩工具来压缩日志文件。

uncompresscmd _ 设置解压缩工具来解压缩日志文件。默认解压缩工具gunzip 。

compressext ___ 如果压缩功能启动,相应设置的压缩工具的扩展可以被设置使用。

compressoptions 可以传递压缩命令的选项。如gzip工具的 -9 (最大压缩)选项。

copy __________ 不改变原日志文件,做一份拷贝。create指令选项不对拷贝文件起作用。

copytruncate __ 给现日志文件做一份拷贝,并截取现日志文件的记录,在拷贝文件中追加记录。

create mode owner group 把旧文件轮换出来,创建新文件,可以选择设置使用权限、拥有者和使用组。默认情况下新文件与旧文件的设置是一样。

daily _________ 每日轮换日志文件。

delaycompress _ 与compress指令一起使用,直到轮换出来的文件下一次被轮换才被压缩。

extension ext _ 给轮换出来的日志文件添加后缀(扩展名)。如果跟压缩选项一起使用,通常添加后缀(.gz)

ifempty _______ 轮换日志文件,即使日志文件是空。(默认指令选项)

include file_or_directory 读取文件或指定目录下的所有文件,忽略不规则的文件和带有非法扩展名的文件名。

mail address __ 把轮换出来文件通过邮件发送到指定地址。

mailfirst _____ 当mail指令使用时,邮寄轮换出来的新日志文件,不是副本。

maillast ______ 当mail指令使用时,邮寄副本(到期被轮换的日志文件),不是新的日志文件。mail指令的默认设置。

missingok _____ 如果日志文件不存在,不发送错误信息继续下去。

monthly _______ 每月第一天轮换文件。

nocompress ____ 不压缩换出的日志文件。

nocopy ________ 不改变原日志文件,也不做拷贝。

nocopytruncate 给现日志文件做一份拷贝,不会截取现日志文件的记录。

nocreate ______ 替代create选项功能,但不会创建新文件。

nodelaycompress 替代delaycompress option功能,但在 当时轮换 进行压缩 。

nomail ________ 当日志文件被轮换出来时不邮寄副本。

nomissingok ___ 如果日志文件不存在,发送错误信息。属于默认设置。

noolddir ______ 把轮换出来的日志文件存放在与当前记录相同的目录。

notifempty ____ 如果日志文件是空不轮换操作。

olddir directory 把轮换出来的日志文件存放在指定设置的目录下,但必须同在同一文件系统内。

postrotate/endscript 处于这对语句之间的命令会在日志文件完成轮换后执行。

prerotate/endscript 处于这对语句之间的命令会在日志文件完成轮换前执行。

nosharedscripts 轮换日志文件时,在 prerotate/endscript 或者

postrotate/endscript 指令之间的Shell命令语句被执行。nosharedscripts是默认设置,不需要指定。

sharedscripts __ 如果某日志文件的轮换信息指定sharedscripts,该

prerotate/endscript 或者 postrotate/endscript 指令之间的Shell命令语句,在其它符合轮换条件的日志文件都被执行一次。

rotate count ___ 在删除文件或邮寄到指定的Mail-address以前轮换文件的次数。次数是0时删除文件,不是保留旧版本。次数是4时表示一个文件有一个当前版本和4个旧版本。

size size _______ 当文件超过预设置的size值时进行轮换。

start count _____ 为轮换文件添加后缀,设置起始数字。数字是0时,由原来文件轮换出来,添加后缀 .0 创建新文件(log.0) 。

tabooext [+] list 默认设置,将忽略扩展名(后缀)列表中包含 .rpmorig 、 .rpmsave 、.v 、 .swp 、.rpmnew和 ~ 。tabooext list 建立一个新的忽略扩展名列表。tabooext + list 追加忽略扩展名项目。

weekly __________ 设置每周第一天轮换日志文件。

---------------------
---------------------
--------
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表