分类: LINUX
2006-08-18 23:08:09
成为Linux的主人
在Linux 系统管理中, /etc下面的档案无疑的伴演了极端重要的角色, 在这篇文章中, 将为各位介绍 /etc 下每个档案的用途, 及相关
指令的运用, 希望能为大家在成为 System Administrator 的路上有所助益.
特别要说明的是, 在这篇文章中, 有些档案仍然没有提到, 这是因为, 这些档案都不是一二十行的描述就可以讲完的! 如 /rc.d 下的档
案, inittab 这两个最好就要合起来讲, 因为这些牵扯到 bootstrapping, 绝对不是三言两语就可以讲完的. 凡是有这种特性的档案, 有机
会的话将再为各位介绍......
本文 :
/etc/DIR_COLORS : 设定在用 ls 时 , 各种不同档案型态所用的颜色 , 但是不能用pipe 再导向输出, 否则就没有各种颜色了. 由档案
的内容可以很轻易的了解, 如 default 的 directory 是蓝色, 具有可执行档权限的是绿色, 而压缩档是红色...... 这些都可依个人喜好来
加以更改. 这个档案内容写得很清楚, 想必各位一眼也就可以看得出来, 在颜色的组成方面, 我们常用 RGB 三原色的成份值来组合出各种不
同的颜色. 由 R,G,B 这个 bit 是 0 或是 1 三个值组合出颜色这个道理虽浅显, 但假如我们更了解 R,G, B 的加权值分别是1,2,4 的话,
那就再也不用翻书查颜色了...... 选择自己的调色盘来取代预设的调色盘, 是经常会做的事.
/etc/HOSTNAME : 记录完整的 hostname 与 domain name , 这个档案在须要 hostname的场合会用得到 , 如 /etc/rc.d/rc.M 等 ......
/etc/NETWORKING : YES , 没什麽用 , 改成 NO 会怎样呢 ? 会对网路的使用会造成影响吗 ? 答案是否定的 .
/etc/X11 : link 到 /var/X11/lib/X11
/etc/at.deny : 在这个档案中可记载那些人不能使用at这个命令来做一些 later job, 假如 at.deny 是空的, 而且 at.allow 也不存在的话. 那就是每个人都可以用 at 这个命令.
/etc/at.allow : 相对於 at.deny , 这个档案记载那些人可以使用 at 这个指令关於at 这个指令, 我想它的重要性是无庸置疑的, 各位应该要会这个指令的用法, 会了这个指令, 可以在工作的执行上会更有弹性而关於
at.deny 与 at.allow, at 会先去找 at.allow, 假如存在而且有记录一些人的话, 那就只有这些人能使用 at 这个指令, 但假如at.allow 并不存在的话, 那 at 就会去找 at.deny, 没有在at.deny 中的人都可以使用 at 这个指令了! 特别要说明的是, at的执行时间也许会不如你所预期的, 比如说明明一个档你叫它在7:02 执行, 但它却会等到 7:05 才执行, 这是因为 crond 是每五分钟才去看看 at 的 queue 中是否有要执行的 job. 当然, 你也可以改成每分钟都去 check, 但这样似乎没有很大的意义, 除非你对时间的准确度要求的很严格, 否则应该没有必要去动才是. 各位可去看看/var/spool/cron/crontabs/root 中就有详细记载, 每五分钟 run
一次 atrun, 所以 at 命令的执行可看成以每五分钟为一单位.
/var/spool/atjobs: 当你使用 at 来安排一件工作时, 系统会把
你目前的环境变数及所要用 at 执行的工作抄一份到这个目录下的档案中 .
/var/spool/atspool : 使用 at 命令之後所得到的一些讯息 , 会被
记录在这里 . 可能是 at 所要执行的命令传回的错误讯息 , 或传回执行成功的讯息 .
/etc/csh.cshrc :
/etc/csh.login :这两个档案应该很熟悉罗! 它就是各位常见到的.cshrc 及.login,
不过大家通常只注意到自己的 home directory 有这两个档, 但
/etc 下也有这两个档, 不过 /etc 下的这两个档绝大部份的情况下
都是由 system administrator 在 maintain, 一般 user 不应该有
权力去改. 顺便一提的是, 系统会先去找 /etc 下这两个档, 接著才
加上自己 home directory 中那两个档的设定. 当然, 有了.login
也有.logout,.logout 中可以写一些 message, 或执行一些命令, 当
你下达 logout 之後,.logout 就会被执行.
/etc/disktab : ( disk parameter table ) 假如你在刚开机有 pass 磁碟机的一些参数
给 kernel 的话 ( 通常是你的硬碟比较奇怪 , 需要 pass cylinders ,
heads , sectors 给 kernel 才抓的到 , 或者是 SCSI 的硬碟有时
有时也要用到一些参数 ) 那这些参数就会被记录在这里 .
/etc/exports : 这个档案记录著你要给别人 mount 的档案系统 , 这就是典型 NFS
系统所存在的档案 , TCP/IP for OS/2 若要使用 network file system
而要把自己的 filesystem 让别人 mount 的话 , 这个档案也是不可或缺的 .
比如说 , 我所在的 domain name 为 dorm10.nctu.edu.tw , 我要把
我 /usr 下的 filesystem 开放给十舍的人 mount , 那我在 exports 中
要这样写 :
/usr *.dorm10.nctu.edu.tw(ro)
接著 , 在 /etc/rc.d/rc.inet2 中 , 找到下面的段落 , 这些段落本来
每一列的前面都有 # , 现在 , 依照下面的内容 , 把这些 # 拿掉 .
......
......
......
# Start the SUN RPC Portmapper.
if [ -f ${NET}/rpc.portmap ]
then
echo -n " portmap"
${NET}/rpc.portmap
fi
# # Start the various SUN RPC servers.
if [ -f ${NET}/rpc.portmap ]
then
# if [ -f ${NET}/rpc.ugidd ]
# then
# echo -n " ugidd"
# ${NET}/rpc.ugidd -d
# fi
if [ -f ${NET}/rpc.mountd ]
then
echo -n " mountd"
${NET}/rpc.mountd
fi
if [ -f ${NET}/rpc.nfsd ]
then
echo -n " nfsd"
${NET}/rpc.nfsd
fi
# # Fire up the PC-NFS daemon(s).
if [ -f ${NET}/rpc.pcnfsd ]
then
echo -n " pcnfsd"
${NET}/rpc.pcnfsd ${LPSPOOL}
fi
# if [ -f ${NET}/rpc.bwnfsd ]
# then
# echo -n " bwnfsd"
# ${NET}/rpc.bwnfsd ${LPSPOOL}
# fi
fi
echo
# Done!
在 client 端可用如 :
mount -vt nfs rebel.dorm10.nctu.edu.tw:/usr /tmp
将 server 端的 /usr 挂到 client 端的 /tmp
/etc/fastboot : 这个档案是使用 shutdown -f 所产生的 , -f means "fastboot"
在重新 reboot 之後 , 系统会去检查这个档是否存在 , 以决定
是否要 run fsck .
/etc/fdprm : floopy disk parameter table . 一般情况下是不须要更动的 , 除非
你有很奇怪格式的软碟 , 或者你想做出不符合一般格式的磁碟片 .
/etc/nologin : 你也许会感到奇怪 , 我的 /etc 这个 directory 下并没有这个档啊?
没错 , 它平常是不存在的 , 通常会看到这个档的话 , 那表示系统大
概要 shutdown 了 , 因为系统要 shutdown 了 , 自然不希望有人又
login 进来 , 所以在我们执行 shutdown 时 , nologin 这个档会自动
的被 create , 里面放著 shutdown message . 实际上 , 当我们在
login 时 , 系统会去检查有没有这个档 , 假如有的话 , 那就会印出
这个档案中的 message , 然後不让你 login .
nologin 也有可能是为了某种理由被制造的 , 比如说系统在 maintain
暂时不希望有人 login . 无论如何 nologin 若存在 , 就不能 login
/etc/fstab : 记录开机要 mount 上来的 filesystem, 这个档案相当重要! 各位可以
在 /etc/rc.d/rc.S 中找到 /sbin/mount -avt nonfs 这一列, 当执行
到这一列时, mount 就依据 /etc/fstab 中的记载, 自动的将档案系统
mount 上来. 下面就是一个颇为典型的范例. 假如你一开机就想自动
mount 一些 filesystems, 而不要等到开机後再以手动 mount 的话那把
这些 filesystems 及相关资讯写在这个档, 是不错的选择. 在档案格式
方面, 每一列有六个栏位, 不过後面两个栏位常被省略所以我们只看到
有四个栏位. 其它的两栏分别为 dump-freq 及 pass-number.
dump-freq 预设值为 0; 而 pass-number 是 fsck 所会参考到的地方,
数字可为 0,1,2...... 1 表示这个 filesystem 将首先被 fsck check,
2 表其次, 馀类推......
# 要挂上的档案系统 挂在那里 档案系统格式 读写状况
/dev/hdb2 swap swap defaults
/dev/hdb1 / ext2 defaults
/dev/sbpcd /mnt/cdrom iso9660 ro
/dev/hda1 /mnt/dosc msdos rw
/dev/hda5 /mnt/dosd msdos rw
/dev/hda6 /mnt/dose msdos rw
none /proc proc defaults
/etc/ftpusers : 这个档案记录那些人不可以 ftp 签入系统 , 预设值有 root , uucp
news . 这些都是为了 security 方面的考量 , 你可以在这里加入
不可 ftp 进来的 user id .
/etc/gateways : 顾名思义 , 这个档案记录一些 gateways 的 information
这个档案的格式如下 :
name1 gateway name2 metric value
当 routed 启动时, 它会去读 /etc/gateways 这个档. 若一个 gateway
并不做 routing information 交换的话, 那它就会被标示成 passive,
假如有做 routing information 的交换 ( 这台机器上有 run routed )
, 那就会标示成 active net 或 host 这个关键字是指出 route 是到网
路或是到一台特定的机器上. name1 就是目地网路或目地机器的名字.
这个名字可用 /etc/hosts 或是 /etc/networks 中的 symbolic host
name. name2 就是讯息将被送往之 gateway 的 name 或 IP address.
/etc/group : 如同 /etc/passwd 列出了系统中所有的使用者名字 , /etc/group
定义系统中所有的 group name 与相关讯息 .
格式为: group_name吐舌asswd:GID:user_list
如 : author::200:jhhsu,emotion,passion
上面的例子表示 jhhsu,emotion,passion 都是属於 author 这个 group
通常 passwd 那栏是空白的 , 表示不用密码 . 或放一个 * 号
以下也是一个典型的例子 :
root::0:root,jhhsu
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root,jhhsu
shadow::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
users::100:games
bbs:*:99:bbs,bbsuser,bbsroot
当然啦 ! 这个档案只能为 superuser 所读写 , 一个 superuser 可使
用 groupadd , groupdel , groupmod 来管理 /etc/group 这个档 ,
要手动管理也是可以 . 下面是这三个指令的用法 :
groupadd [ -g gid [ -o ] ] group_name
groupdel group_name
groupmod [ -g gid [ -o ] ] [ -n new_group_name ] group_name
/etc/hosts : 这个档案记录著 IP address 至 hostname 的 mapping . 如我们想把
ccsun21.csie.nctu.edu.tw 取个别名叫 : oldstock
那我们就可以在这个档案里写如下的叙述 :
140.113.17.151 oldstock
如此一来 , 以後我们 telnet oldstock 就等於 telnet
140.113.17.151
在这个档案中 , 至少会有两列 , 一列为 loopback , 这是为了侦错目的
而设的 , 另一列为 local host , 就是你自己的机器 .
/etc/hosts.equiv : 在里面可以设定一些 remote machine , 而从这些 remote
machine 利用 rsh 或 rlogin 连回 local machine 的话
便不用输入密码
同样的东西也可以在 .rhosts 见到 . 比如说在 ccsun22.csie
.nctu.edu.tw 上你的 Home Directory 建一个 .rhosts 档 ,
里面的内容如下:
rebel.dorm10.nctu.edu.tw jhhsu
以後只要在 rebel.dorm10.nctu.edu.tw 上利用 rsh 或 rlogin 至
ccsun22.csie.nctu.edu.tw 的话 , 也不须要输入密码
rsh -l jhhsu ccsun22.csie.nctu.edu.tw <-- 不须密码
不过这东西最好不要乱设 , 以信得过的 hosts 为主 ,
才不会造成 security 上的困扰 .
/etc/hosts.deny : 设定那些 remote hosts 不可以使用 inetd
/etc/hosts.allow : 设定那些 remote hosts 可以使用 inetd
至於 inetd 有那些 service , 各位可以去看看 /etc/inetd.conf
从里面就可以很清楚的可以看得出来 .
假如你采取比较 close 作法的话 , 可以在 hosts.deny 中写
ALL:ALL
但是如此一来 , 只要不是从 localhost 来的 , 那大概都不必
玩了 , 所以 , 我们也要适时的在 hosts.allow 中加入可以
access 的 hosts , 如 :
ALL:140.113.17. <-- 只要从 140.113.17.X 都可以 access
ALL:140.113.4.
ALL:140.113.6.
/etc/hosts.lpd : 记录可 access printer 的 hosts . 假如一台 printer可被网路上
的许多台主机所共用, 那 printcap 这个档案必须得描述完整的网
路设定资讯. 在比较严密控制的情况下, 有两个条件必须符合首先,
local machine 必须在 remote machine 的 /etc/hosts.eqiuv 中,
或者, 在 remote machine 的 /etc/hosts.lpd 中被记载第二, 使
用者必须有 remote machine 的帐号.
/etc/inetd.pid : inetd process id
/etc/issue : 这个档案被记录著 login prompt 前所要 echo 的 message , 特别要注
意的是 /etc/rc.d/rc.S
下面的四行若没有 mark , 则每次开机 issue 及 motd 都会被改变
假如你要有自己的设定 , 下面一定都要 mark 起来如下 :
#echo > /etc/issue
#echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue
#echo >> /etc/issue
#echo "/bin/uname -a | /bin/cut -d\ -f1,3. (Posix)." > /etc/motd
/etc/klogd.pid : klogd process id
/etc/ld.so.conf : 记录一些 library 所在的目录
/etc/magic : 初看这个档案时 , 也许只能隐隐约约的看到 : 这个档案似乎是描述一些
档案的格式. 没错, 这个档案记载了许多档案格式的识别字串或方法那
这个档在那里会用的到呢? 各位有使用过 file 这个指令吗? file 这个
指令的命令格式为:
file [ -c ] [ -z ] [ -L ] [ -f namefile ] [ -m magicfile ] file
file 这个指令非常有趣, 它可以告诉你某一个档案的格式, 如它是一个
text 档, 或是一个 shell script 或 DOS 可执行档等...... 而 file
这个指令, 就是去参考 /etc/magic 这个资料库. 假如你知道某一档案
的识别字, 而原来 magic 这个资料库没有记录, 那你可以把识别方法加
到资料库中, 或乾脆建立自己的资料库算了.
/etc/motd : 这个档很简单 , 就是 message of the day 的意思 , 里面可以写一些
message , 而这些 message 会在 login shell 之前被显示出来 .
通常都是 system administrator 要告知 user 的一些讯息. 而关於每次
都会改变的问题, 在前面 /etc/issue时已提出过,记得 mark 起来就好.
/etc/mtab : 目前 mount 上来的 filesystems , 各位可使用 mount 这个指令来看看
这个档的变化 . 如我在 mount 3.5 inch 软碟A 前 , 我看到的 mtab
如下 :
/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0
然而 , 当我以 mount -t msdos /dev/fd0H1440 /mnt/dosa 这个指令将
3.5 inch 软碟A 挂上来後 , mtab 变为像下面的情况 :
/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0
/dev/fd0H1440 /mnt/dosa msdos rw 0 0 <-- 多了这列 !
所以 , 各位了解啦 ! /etc/mtab 就是记录目前 mount 的 filesystem
/etc/mtools : 这里面记录的 , 是给 /usr/bin/mtools 参考用的 parameter .
那 mtools 是什麽呢? 简而言之 , 就是一群操作 MSDOS 档案的命令
集合 , 可用的命令可多了 , 如下 :
mattrib - change MSDOS file attribute flags
mcd - change MSDOS directory
mcopy - copy MSDOS files to/from Unix
mdel - delete an MSDOS file
mdir - display an MSDOS directory
mformat - add an MSDOS filesystem to a low-level formatted diskette
mlabel - make an MSDOS volume label
mmd - make an MSDOS subdirectory
mrd - remove an MSDOS subdirectory
mread - low level read (copy) an MSDOS file to Unix
mren - rename an existing MSDOS file
mtype - display contents of an MSDOS file
mwrite - low level write (copy) a Unix file to MSDOS
这些都被 link 到 mtools
/etc/named.boot : 假如你要建立 name server 的话 , 那这个档就是你要修改的地方
详细的情况可以去看 named 的 manual 就知道了 .
/etc/named.pid : named process id
/etc/networks : 这个档与 hosts 有点像 , 都是在 boot 的时候会用到的东西 ,
在这里可以定义一个子网路与其 IP address 的资讯 .
/etc/nntpserver : 这个档案记录著 news server , 当我们使用 tin -r ( read news
remotely ) 时, 这个档案会被参考到, 或者若这个档案不存在的
话, 那环境变数 NNTPSERVER 所指定的 server 就会被当成要去取
得 news 的 server. 譬如说, 你要将 140.111.1.11 当成 news
server, 那 /etc/nntpserver 中就可写:
140.111.1.11
/etc/nologin : 你也许会感到奇怪 , 我的 /etc 这个 directory 下并没有这个档啊?
没错, 它平常是不存在的, 要是你看到这个档的话, 那表示系统大概
要 shutdown 了, 因为系统要 shutdown 了, 自然不希望有人又
login 进来, 所以在我们执行 shutdown 时, nologin 这个档会自动
的被 create, 里面放著 shutdown message. 实际上, 当我们在
login 时, 系统会去检查有没有这个档, 假如有的话, 那就会印出这
个档案中的 message, 然後不让你 login. nologin 也有可能是为了
某种理由被制造的, 比如说系统在 maintain 暂时不希望有人 login.
无论如何 nologin 若存在, 就不能 login.
/etc/passwd : 呵呵 , 这个档案可重要了 . 一个 system administrator 最初要学的
常常就是这个档案的内容! 这个档案记录著系统可以认得的 user, 当
然啦, 也包括一些非人的 login name, 但这是有特殊用途的. 档案内
容每列的格式如下:
Login Name:Encrypted Password:UID:GID:GCOS:Home Directory:Login Shell
(1)login name: 在 login name 方面 , 每个 login name 必须是唯一的 ,
而且不能超过 8 个字元, 一般说来, login name 虽然可以
大小写混合, 但平常的情况下都用小写. 顺便一提的是
/usr/lib/aliases 这个档案, 修改这个档案的内容可以使
mail 时用超过 8 个字元的档案. 如平常 mail
jhhsu@dorm10 .nctu.edu.tw 可变成 mail
Jin-Hwa-Sheu@dorm10.nctu.edu. tw.
(2)Encrypted Password: 这栏是编码过的密码 , 在新增一个 new user 时
应该在这栏填上 * , 更改 password 可用 passwd
这个指令 . passwd 这是一个 setuid 的指令 ,
关於 setuid , setgid , stickybit , 各位可去
参考 Unix Security 方面的书籍 .
(3)UID: user id , 每个"人"都要不一样 , 习惯上 , 100 以前被保留做为
特殊的 user id , 而 root 总是 0.
(4)GID: group id , 在比较早期的系统 , 一个 user 同时只能在一个 group
不过现在就没有这种限制了 .
(5)GCOS: 这栏基本上没有特殊格式限制 , 在这里可以写上你的 full name
家中电话, 住址等...... 爱写什麽就写什麽. 虽然你可以乱写一
通, 但若你用到逗号, 系统会把它当成区间. 如你写: Jin-Hwa
Sheu, NCTU, 80317, (02)1234123 这些都会被当成 Full Name,
Office, Home Phone. finger 这个指令会去读这地方的资讯. 用
chfn 可改变这栏.
(6)Home Directory: 这栏没什麽 , 就是记录 user 的 home directory 而已
利用 cd 或 cd~ 都可回到 home directory .
(7)Login Shell: 设定使用者所使用的 shell , 预设值是 /bin/bash . 当
然 , 你也可以自己改成 csh 或 tcsh , zsh 也是不错 ,
假如有 free 版的 korn Shell 也可拿来用用 . 用 chsh
可改变你的 login shell .
为了 security 方面的考量 , 各位可以安装 shadow , 将 passwd 这个档
完全的与一般 user 隔绝开来 , 连读也没有办法读 passwd 这个档 .
/etc/profile : profile 这个档是 bash 这个 shell 所用的 , profile 之於 bash
就好像 cshrc 之於 csh. 同样的, /etc 下的 profile 也是 SA 在维
护的, 主要是放著全域的设定 ( Global Setting)
红联Linux论坛:www.linux110.com/bbs
__________________
希望能和你相互交流,愿意和您分享学习、进步中的每分喜悦与快乐
---------------------------------------------
http://tzhsuccess.itpub.net
向版主反映这个帖子 查看tzhsuccess 的IP地址
91楼 旧帖 06-07-17 23:27
[ 大 中 小 ] 给予该贴好评 编辑/删除 引用/回复
tzhsuccess
高级会员
注册日期: 2004 Apr
来自: 太?系-?子座
技术贴数:7934
论坛积分:31670
论坛排名:67
论坛徽章:23
会员2006贡献徽章行业板块每日发贴之星 每日论坛发贴之星 ERP板块每日发贴之星
合格的LINUX系统管理员
在很多国内的自由LINUX论坛上,我们都可以发现有很多LINUX爱好者提出的各种各样的问题。其中包括LINUX安装、故障解决、用户管理等等问题。在这些问题当中,最突出的就有如何成为一名合格的LINUX系统管理员,还有就是成为一名LINUX系统管理员都需要具备什么样的基本条件。尽管目前使用LINUX的朋友很多,可是真正能有条件用LINUX来构造网络并提供网络服务的人并不多,大多数LINUX爱好者是在校大学生和一些从WINDOWS投入LINUX怀抱的初学者。成为一名合格的LINUX系统管理员我想是很多LINUX爱好者的梦想。下面笔者就来简要的谈谈如何成为一名合格的LINUX管理员。
要成为一名合格的LINUX管理员,一般来说都要懂得如下几点规则:
规则1:了解LINUX的一切。首先,在了解以下规则之前,笔者必须向大家说明的是,即使最基本的LINUX系统管理员都是要经过不断的学习和长时间实践才能真正了解整个LINUX操作系统和网络的。如果您还是一名刚刚入门的LINUX新手或者对LINUX了解不多,在这样的情况下如果要成为一名合格的LINUX系统管理员,那么笔者建议您先花点时间和耐心学习和了解清楚LINUX,如果您对LINUX有足够的了解,能够像操作WINDOWS那样熟悉LINUX了,那您就可以进一步学习,去实现一个合格的LINUX系统管理员的梦想了。
规则2:如果您不能真正的了解LINUX的一切,那最少要知道如何才能找到,在哪里才能找到您所需要的LINUX信息和知识。一般来说,作为LINUX系统管理员,您至少有几本比较全面的LINUX工具书,其中最好包括LINUX安装,LINUX网络配置,LINUX系统分析,LINUX使用大全之类的原版工具书。国内大多数的LINUX工具书为翻译外国的。在这里也向大家推荐基本比较好的工具书,尽供您参考选购:
《RED HAT 6 大全》--机械工业出版社(LINUX与自由软件资源丛书)ISBN 7-111-07946-9
此书内容翔实,涉及领域广泛,并且提供了详细的例子和大量的参考资料,包括书籍,光盘和电子文档和INTERNET站点,是一本学习,使用和管理LINUX的较好工具书。适合LINUX中级用户。
《LINUX常用技术大全》--电子工业出版社出版 ISBN 7-5053-5460-2
此书摘录了LINUX文档项目中的上千页资料,提供了LINUX操作系统的综合信息。本书符合各种计算机用户使用。中级用户可以通过此书更加深入的了解和利用LINUX。高级用户可以将此书作为使用LINUX操作系统的高级参考手册。
《红旗,RED HAT LINUX开发及网络应用》--人民邮电出版社出版 ISBN 7-115-08978-7
此书适合广大LINUX爱好者阅读,对使用LINUX的组网用户和提供管理员有很大的帮助。
有了以上这些工具书也许并不能完全满足一个系统管理员的需要,毕竟没有一本书是完全能概括LINUX的全部的。您这时需要学会如何从一大堆的书籍和资料中查找到您需要的知识和信息。另外需要指出的是,由于世界上有很多种LINUX发行版本,每一种LINUX发行版本的操作和使用甚至参数配置文件都不尽相同,所以建议大家在购买,下载LINUX发行版本的时候注意购买该版本的官方版的资料和参考书籍,以方便今后管理系统之用。
规则3:如果您无法从各种渠道获取您所需要的信息,请试着用自己的方法来解决问题。不是所有的LINUX故障书籍上都有解答,也许这些您遇到的希奇古怪的问题别人也无法回答您,这时候您就需要自己动手动脑来研究解决了。最后建议您在LINUX自由论坛上公布您遇到的问题和解决方案,以方便别人在遇到同类问题的时候无需花费太多的精力来解决。
规则4:随时准备一本便于携带的LINUX系统用户参考手册,您在旅途中,在等公共汽车的时候,在任何空闲的时间来阅读。这可是国外一名资深的LINUX系统管理员的成功经验。他说他在学习LINUX的时候每天都要花上2-3个小时的空闲时间来仔细阅读各种LINUX命令,来研究LINUX的安全问题。毕竟LINUX是一个正在发展的操作系统,如果没有足够的时间对它的方方面面进行研究的话,您很难成为一名优秀的LINUX系统管理员。
除了以上这些学习LINUX的门道之外,成为一名合格的LINUX系统管理员更重要的是要掌握很多技巧和专业知识。
技巧1:熟悉TCP/IP和LINUX提供的各种网络服务,如DNS,SMTP,UDP,HTTP,FTP,POP3等等。以及要知道LINUX程序, LINUX平台下软件的安装,调试和维护。总之,和LINUX有关的知识懂得越多越好。
技巧2:如果可以的话,最好能熟悉尽可能多的操作系统。这一点很重要,很多朋友也许认为作为一名LINUX系统管理员只有精通LINUX就可以了。事实上LINUX提供了网络服务,很多其他的操作系统都有可能作为客户端,所以作为LINUX系统管理员,有时候您不得不需要解决LINUX和其他的操作系统之间的通讯,安全等问题。一般,熟悉微软的WINDOWS系列操作系统不难,重要的是我们应该对Solaris,Linux,IRIX,HPUX,PPC等系统及其硬件平台都要有所了解。
技巧3:熟悉网络,网络理念和硬件。操作系统是管理整个计算机硬件的最大的程序,LINUX也不例外。无论是台式PC还是笔记本电脑,甚至是大型的网络服务器,LINUX都能对其进行很好的管理。这就要求LINUX系统管理员要熟悉LINUX所控制的硬件平台,因为只有这样才能很好的发挥计算机硬件的最大优势。其实,如果LINUX不是用来提供网络服务,那就是极大的浪费了,大家都知道LINUX要比微软的操作系统稳定、安全。要记住,LINUX能提供一整套很完整的网络服务,如果您在商业公司作一名LINUX系统管理员,那么您必须要对网络及其网络理念有清楚的认识,能够独立完成整个网络和网络服务的配置工作。
技巧4:备份系统和文件恢复。这是LINUX系统管理员最重要的工作之一。每天对LINUX系统和重要文件进行备份是一名有责任心的LINUX系统管理员必须做的工作。事实上,对LINUX系统和文件进行备份无论从硬件还是软件技术上目前都没有什么太大的问题,问题往往出现在系统管理员忘记备份文件或者抱着侥幸的心理,一旦您的LINUX服务器受到攻击,文件损失殆尽,那么您就无法恢复原有文件,一切损失的责任也只能由您负责了。选用LINUX中的定期备份软件和好的备份磁盘磁带都能为您节省不少备份的时间。只要您做到经常,定期备份数据,那么即使LINUX服务器出了再大的问题,一切都能恢复原样的。
技巧5:掌握好一门脚本语言。大家都知道很多LINUX软件的安装都是通过脚本语言来进行的。BASH和PERL是不错的选择。掌握脚本语言另外一个很大的优势就在于能读懂其他LINUX程序员的程序和开发构想,也能方便您在需要的时候修改别人的程序。PERL语言功能强大,学习起来也比较容易。
技巧6:注意LINUX的安全问题。这也是LINUX当中最复杂,最富有挑战性的话题了。同时,LINUX的安全问题也给LINUX系统管理员很大的压力。我认为,安全性实际上取决于用户遵循某种策略的自觉性,安全性措施在很多操作系统上和许多公司中造成了冲突。用户需要完成他们的工作,系统管理员需要把不合理的请求拒之于系统之外;公司管理部门需要保守公司的机密,在许多方面,安全性是最难取得用户配合的领域,但是实际上这是最重要的领域。
对于LINUX系统管理员来说,我可以提供的一个忠告就是:“最好的用户也只是根据您所遵循的策略去做,如果您有忽视安全性的坏习惯,他们就只能更糟糕。”从另外一个方面来说,人们通常提出要求显示或者查看最底层的消息,这超出了系统管理员的职责范围,应友好的指出并做改进。与此同时,要极力阻止那些企图通过LINUX后门进入系统的黑客。由于LINUX的安全问题覆盖的范围很广泛,限于篇幅,在这里也就无法进行谈论了。
有人曾经说过,点滴知识就能获得长久的应用。这句话对于那些想成为或者已经成为了一名LINUX系统管理员是再合适不过的了。
红联Linux论坛:www.linux110.com/bbs
__________________
希望能和你相互交流,愿意和您分享学习、进步中的每分喜悦与快乐
---------------------------------------------
http://tzhsuccess.itpub.net
向版主反映这个帖子 查看tzhsuccess 的IP地址
92楼 旧帖 06-07-17 23:27
[ 大 中 小 ] 给予该贴好评 编辑/删除 引用/回复
tzhsuccess
高级会员
注册日期: 2004 Apr
来自: 太?系-?子座
技术贴数:7934
论坛积分:31670
论坛排名:67
论坛徽章:23
会员2006贡献徽章行业板块每日发贴之星 每日论坛发贴之星 ERP板块每日发贴之星
活用Linux操作系统的后台任务
Linux作为一个多任务环境,允许用户同时执行多项任务,例如查看系统情况、备份资料、编辑文件和打印文件等。
对于耗时长的任务不应该让它在前台任务中执行,而应该交给后台任务去执行。这样前台任务可继续正常运作其它的操作,不用等待。示例如下:
# find / -name testing &
# fg
如果想要让上面例子中的任务转为后台执行,就使用“& ”。不过,由于是后台执行的,所以该程序的输出并不会出现在屏幕上。当用户将数个任务放到后台任务执行时,要如何去管理这些后台任务?怎么知道后台任务的执行情况?如何终止或暂时停止后台任务的执行?下面就来逐一说明。
控制管理
举例如下:
# du -a /user > user.data &
[1] 237
# find / -name core -type f -ls > core.data &
[2] 238
如上通过“&”命令将三个任务放到后台中执行。用命令“jobs -l”显示后台任务的执行情况,举例如下:
#jobs -l
[1] + 237 Running du -a /user > user.data
[2] - 238 Running find / -name core -type f -ls > core.data
首先介绍一个任务控制特有的名词:当前任务。上面的当前任务是“du -a /user > user.data”,因为后台任务号码是“[1]”。如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。
终止后台任务
命令总是有出错的时候。当出现这种情况时,用户可用Shell的内置命令“kill”来结束任务。假如想要结束后台任务“du -a /user > user.data”,可以用下面的命令:
# kill 237
# kill %1
其中,237为第一个后台任务的PID号码。如果想终止第二个后台任务,以下两种方法均可:
方法一:#kill %2
方法二:# kill %-
执行暂停任务
Shell的内置命令“stop”可用来暂停后台任务。示例如下:
stop % (停止第一个后台任务的执行)
stop %n (停止第n个后台任务的执行)
了解命令“stop”的使用后,便可将想要停止的后台任务暂停执行。例如用户要将一个年度报表用 “nroff”命令整理,因为文件量十分庞大,所以将它放到后台中执行。命令如下:
#nroff -ms moonth[1-12].acct > year2003.acct &
[4] 240
当命令处理到一半的时候发觉moonth12.acct文件是旧的需要更新,这时用“jobs”命令查看到后台任务“[4]”还在执行中,但无法知道命令已经处理到哪一个月份。此时可输入下面的命令,将后台任务“[4]”先暂停执行:
#stop %4
然后查看文件year2003.acct的尾部判断是否已经处理到12月。如果还没有执行到,那么可以将moonth12.acct文件的资料更新,再用命令“bg”将已被暂时停止执行的后台任务“[4]”接着继续执行下去。这样不但可更正错误文件,而且不用将已处理完的任务重新再执行一次。
方便之处
前台、后台任务确实可以给日常操作带来方便。因为,我们在日常操作中肯定会遇到同一时间要进行多个操作。这个时候如果不使用前台任务和后台任务,那么将要花费很多时间。熟练运用前台和后台任务能达到“时”半功倍。
红联Linux论坛:www.linux110.com/bbs
__________________
希望能和你相互交流,愿意和您分享学习、进步中的每分喜悦与快乐
---------------------------------------------
http://tzhsuccess.itpub.net
向版主反映这个帖子 查看tzhsuccess 的IP地址
93楼 旧帖 06-07-17 23:27
[ 大 中 小 ] 给予该贴好评 编辑/删除 引用/回复
tzhsuccess
高级会员
注册日期: 2004 Apr
来自: 太?系-?子座
技术贴数:7934
论坛积分:31670
论坛排名:67
论坛徽章:23
会员2006贡献徽章行业板块每日发贴之星 每日论坛发贴之星 ERP板块每日发贴之星
几个Linux中文件查找常用技术和方法
每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。
可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情。毕竟在Linux中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到。Linux中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件。对于Linux新手来说,“find”命令也是了解和学习Linux文件特点的方法。因为Linux发行版本繁多,版本升级很快,在Linux书籍上往往写明某个配置文件的所在位置,往往Linux新手按图索骥还是不能找到。比如说REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万的Linux文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命令之前就吃过这样的苦头。好,下面就详细为大家介绍强大的“find”命令的全部使用方法和用途。
通过文件名查找法:
这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,那么使用“find”命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这个。如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
find / -name httpd.conf
这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
etc/httpd/conf/httpd.conf
这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。
无错误查找技巧:
在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入
find / -name access_log 2>/dev/null
这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。
在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf 就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。
根据部分文件名查找方法:
这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:
find /etc -name '*srm*'
这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
find/etc -name 'srm*'
这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
根据文件的特征查询方法:
如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功能是基本相同的。在微软的"搜索"中WINDOWS中的"搜索助理"使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet 上搜索更加容易。"搜索助理"还包括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用"搜索助理"时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。
例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变状态的文件
-ctime n
查找系统中最后n*24小时被改变状态的文件
-empty
查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
-false
查找系统中总是错误的文件
-fstype type
查找系统中存在于指定文件系统的文件,例如:ext2 .
-gid n
查找系统中文件数字组 ID 为 n的文件
-group gname
查找系统中文件属于gnam文件组,并且指定组和ID的文件
Find命令的控制选项说明:
Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。
选项
用途描述
-daystart
.测试系统从今天开始24小时以内的文件,用法类似-amin
-depth
使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
-follow
遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
-help
显示命令摘要
-maxdepth levels
在某个层次的目录中按照递减方法查找
-mount
不在文件系统目录中查找, 用法类似 -xdev.
-noleaf
禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
-version
打印版本数字
使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。
-maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令
find . -maxdepth 2 -name fred
假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。
使用混合查找方式查找文件
find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。
find /tmp -size +
学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。
还有这样的例子,
find / -user fred -or -user george
我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的
find /tmp ! -user panda
命令就可以解决了。很简单。
查找并显示文件的方法
查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。
find / -name "httpd.conf" -ls
系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf
下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法
选项
用途描述
-exec command;
查找并执行命令
-fprint file
打印文件完整文件名
-fprint0 file
打印文件完整文件名包括空的文件
-fprintf file format
打印文件格式
-ok command;
给用户命令执行操作,根据用户的Y 确认输入执行
-printf format
打印文件格式
-ls
打印同种文件格式的文件.
总结:到这里为止我们已经学习了这名多关于find命令的使用方法,也列出了很多常用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困难的事情。
毫无疑问 Linux 是一个优秀的系统,但仍然无法摆脱一个常见的责难(尤其是来自具有 Microsoft Windows 背景的人),那就是 Linux 系统从按下“on”键开始到可以使用,需要的时间太长。其实他们说的没错,Linux 确实需要比较长的引导时间。
在这里我所描述的加快 Linux 引导速度的技术虽然理解起来很简单,但真正实现却需要谨慎行事。我希望 Linux 的发行商能采用这种方法,这样用户就可以省去那些配置任务。不过如果您喜欢冒险,请继续阅读本文。
写在开始之前
如果您想体验一下这种方法,您首先必须得熟悉 Linux 的配置脚本。修改系统的启动设置可能会带来危险,甚至可能会导致您的系统无法启动。如果出现这种情况,请重新启动机器并进入单一用户模式(运行级1),把您所做的修改还原回来,然后再重新启动。永远记住要备份您所修改过的所有文件,为了防止最坏的情况发生,您还需要有至少一个系统备份的映像。
我强烈建议您在考虑用我所建议的方法修改一个正式的系统之前,先去修改一个无关紧要的测试系统。如果您只有一台机器,那么您可以使用 UML (User Mode Linux) 这一非常有用的工具。UML是一个内核补丁,它可以将Linux内核编译成为一个二进制文件,然后您可以像运行一个普通的程序一样去运行这个内核。也就是说,您可以在您的正常的系统之上以一个进程的方式来运行一个完整的 Linux 系统。您可以将其想象为在一个正常的系统中运行一个 Linux 系统。(请参阅本文末尾的参考资料,可以找到可以下载UML的站点以及 developerWorks 网站上关于UML的教程)。
使用UML您可以工作于一个测试系统,哪怕把这个测试系统完全破坏掉,也不会影响您正常的系统。
概述
本文的第一部分介绍当 Linux 内核(Linux 机器的的“核心”)加载后,一个 Linux 系统怎样在后台启动。然后介绍加快您的系统引导速度的技术。
如果您对运行级和服务启动脚本已经熟悉,您可能希望直接跳转到传统服务框架的局限。
Linux 引导次序和运行级
一个 Linux 系统的引导过程可以分为几个阶段。本文并不会解释所有的不同阶段,因为我们所关心只是当内核加载后的那一个阶段。
您可以运行 /sbin/runlevel 命令来确定您的系统当前的运行级。(更多详细信息请查阅 man runlevel)。
当内核被加载并开始运行时会调用 /sbin/init 程序。这个程序以 root 身份运行,并且在开始引导时按照要求设定为“运行级”。(更多关于 init 程序的详细信息,请参考 man init)
什么是运行级?
一个运行级仅仅是一个数字,Linux根据这个数字来区分不同类型的高层次配置,系统将按照不同的高层次配置来进行引导。由于绝大部分运行级数字都定义了明确的含义,因而它们基本上是“众所周知”的。Red Hat Linux 系统的主要运行级见表1。
表 1. Red Hat Linux运行级
运行级 说明
0 关闭
1 单一用户模式(一般仅用于管理目的)
2 多用户模式,不允许使用网络
3 多用户模式,允许使用网络
4 没有用到的运行级
5 多用户模式,允许使用网络,X-Windows 方式(图形登录界面)
6 重新引导
init如何初始化系统
init 通过一个ASCII配置文件(/etc/inittab)来确定如何改变运行级。通常,init 会根据这个配置文件去运行 /etc/rc.d/rc 脚本,并将运行级数字传递给这一脚本。
rc.sysinit 脚本
在 Red Hat 系统中,在运行 rc 脚本之前,init 将首先运行 /etc/rc.d/rc.sysinit 脚本,这个脚本执行那些必需的底层设置任务,比如设置系统时钟,检查磁盘错误,然后挂载文件系统。
在本文看来,正是从运行 rc 脚本开始,事情才变得有趣。
系统服务
rc 脚本负责启动用户需要的所有服务。就像名字所描述的一样,所谓服务就是系统提供的有用的工具。可能会有很多服务需要启动。大部分的 Linux 系统会启动 sshd(安全Shell服务)、syslog(系统日志工具)和 lpd(打印服务),但还会有更多的服务需要启动。比如,我的 Red Hat 9 系统现在运行着29个服务,但如果我把所有的服务都启动,那么我的系统中将会有近50服务在运行。
还有一点很重要,我们应该明白有的服务可能只能由特定的运行级来启动。比如,除了运行级5(多用户图形方式)以外,几乎不会启动某种形式的图形服务,因为其它所有的运行级都是非图形方式的。接下来我们将深入讨论这一问题。
服务程序在哪里?
可选的服务程序目录
在一些 Linux 系统中,服务程序有时候是在 /etc/init.d 目录下。
通常在 /etc/rc.d/init.d/ 目录下可以找到服务程序。
如果你浏览一下这个目录,你就会发现相当多的(如果不是全部都是的话)服务程序实际上都是 shell 脚本,用于调用其他程序完成实际的工作。
rc 脚本如何知道在每个运行级下去运行哪些脚本?
回顾一下,如果我们不希望在某个运行级下运行某个脚本,我们如何告诉系统这样去做?答案是在 /etc/rc.d/ 目录下,在这个目录下,除了我们已经讨论过的 init.d/ 目录以外,还有一组目录,每一个目录对应一个运行级。这些目录以 rc.d 的形式来命名,比如,对应运行级5的目录为 /etc/rc.d/rc5.d/ 。在这些rc.d目录中,每一个目录下都有一组符号链接,指向 /etc/rc.d/init.d 中的真正的服务程序。实际上,后边我们会发现,每个服务事实上有两个符号链接。
服务链接名
这些指向实际服务程序的符号链接的名字很重要,它们遵循严格的命名约定,这样 rc 脚本就知道如何处理它们。
为了便于标识,每个链接的名字都以它们所指向的服务的名字做为后缀。
前缀由两部分构成:一个大写字母,紧跟着是一个两位的十进制数。前缀中的大写字母是“S”(表示“启动”),或者“K”(表示“杀死”,或者停止)。两位数的大小范围是自00到99。
服务链接名正则表达式
符号链接的名字可以用 egrep 正则表达式来描述,[SK][0-9]{2}[a-zA-Z]+。(更多详细信息请参阅 man egrep)。
启动和停止服务
如果我们决定让 Linux 机器引导到图形模式(运行级5),当 init 调用 rc 脚本并传递给它运行级数字时,rc 脚本将到 /etc/rc.d/rc5.d/ 中查找,并且去运行它所能找到的所有符号链接(也就是说,它将运行每个链接指向的程序/脚本)。它将在两个截然不同的阶段来运行这些链接;首先它会执行所有以“K”开头的链接,同时传递给它们参数“stop”。执行完以后,所有这些链接指向的服务都被停止。
当 rc 脚本把所有需要停止的服务都停止后,它将去执行所有以“S”开头的链接,同时传递给它们参数“start”。执行完以后,所以这些链接指向的服务都被启动。rc 脚本也把参数“start”传递给每一个程序。
rc 把参数“tart”或者“stop”传递给每一个服务程序,这样做是为了只用一个服务程序可以启动或停止那个服务??服务程序根据传递给它的参数值分辨系统是正在引导还是正在关闭。
有一个重要的方面我还没有解释??链接名的数字部分。在“S”或者“K”之后的两位十进制数是 rc 脚本用来确定启动链接(就是链接指向的服务)的顺序的。数字较小(比如00,01,等等)的链接在数字较大(99是最大的)链接之前运行。我们会在本文后边的内容中再次提到这一重点问题。
现在还迷惑吗?清单1列出了运行级5对应目录下的所有链接。当引导到运行级5的时候,最先被执行的链接将是 K05saslauthd,因为它以“K”开头,并且在所有的以“K”开头的链接中两位十进制数是最小。最先被执行的启动链接将是 S05kudzu,因为它以“S”开头,并且在所有以“S”开头的链接中两位十进制数是最小的。最后一个运行的链接将是 S99local。
清单 1. 运行级5的指向服务程序的链接
QUOTE:
# cd /etc/rc.d/rc5.d
# ls -al
total 8
drwxr-xr-x 2 root root 4096 Jul 15 09:29 .
drwxr-xr-x 10 root root 4096 Jun 21 08:52 ..
lrwxrwxrwx 1 root root 19 Jan 1 2000 K05saslauthd -> ../init.d/saslauthd
lrwxrwxrwx 1 root root 20 Feb 1 2003 K15postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root 13 Jan 1 2000 K20nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 14 Jan 1 2000 K24irda -> ../init.d/irda
lrwxrwxrwx 1 root root 17 Jan 1 2000 K35winbind -> ../init.d/winbind
lrwxrwxrwx 1 root root 15 Jan 1 2000 K50snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root 19 Jan 1 2000 K50snmptrapd -> ../init.d/snmptrapd
lrwxrwxrwx 1 root root 16 Jun 21 09:43 K50vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 Jun 21 08:57 K73ypbind -> ../init.d/ypbind
lrwxrwxrwx 1 root root 14 Jun 21 08:54 K74nscd -> ../init.d/nscd
lrwxrwxrwx 1 root root 18 Feb 8 11:15 K92iptables -> ../init.d/iptables
lrwxrwxrwx 1 root root 19 Feb 1 2003 K95firstboot -> ../init.d/firstboot
lrwxrwxrwx 1 root root 15 Jan 1 2000 S05kudzu -> ../init.d/kudzu
lrwxrwxrwx 1 root root 14 Jun 21 08:55 S09isdn -> ../init.d/isdn
lrwxrwxrwx 1 root root 17 Jan 1 2000 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 Jan 1 2000 S12syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 17 Jan 1 2000 S13portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root 17 Jan 1 2000 S14nfslock -> ../init.d/nfslock
lrwxrwxrwx 1 root root 18 Jan 1 2000 S17keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 16 Jan 1 2000 S20random -> ../init.d/random
lrwxrwxrwx 1 root root 16 Jun 21 08:52 S24pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 15 Jan 1 2000 S25netfs -> ../init.d/netfs
lrwxrwxrwx 1 root root 14 Jan 1 2000 S26apmd -> ../init.d/apmd
lrwxrwxrwx 1 root root 16 Jan 1 2000 S28autofs -> ../init.d/autofs
lrwxrwxrwx 1 root root 14 Jan 1 2000 S55sshd -> ../init.d/sshd
lrwxrwxrwx 1 root root 20 Jan 1 2000 S56rawdevices -> ../init.d/rawdevices
lrwxrwxrwx 1 root root 16 Jan 1 2000 S56xinetd -> ../init.d/xinetd
lrwxrwxrwx 1 root root 14 Feb 1 2003 S58ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 13 Jun 21 10:42 S60afs -> ../init.d/afs
lrwxrwxrwx 1 root root 13 Jan 1 2000 S60lpd -> ../init.d/lpd
lrwxrwxrwx 1 root root 16 Feb 8 17:26 S78mysqld -> ../init.d/mysqld
lrwxrwxrwx 1 root root 18 Jan 1 2000 S80sendmail -> ../init.d/sendmail
lrwxrwxrwx 1 root root 13 Jan 1 2000 S85gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 15 Mar 22 08:24 S85httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 15 Jan 1 2000 S90crond -> ../init.d/crond
lrwxrwxrwx 1 root root 13 Jan 1 2000 S90xfs -> ../init.d/xfs
lrwxrwxrwx 1 root root 17 Jan 1 2000 S95anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root 13 Jan 1 2000 S95atd -> ../init.d/atd
lrwxrwxrwx 1 root root 15 Jun 21 08:57 S97rhnsd -> ../init.d/rhnsd
lrwxrwxrwx 1 root root 14 Jul 15 09:29 S98wine -> ../init.d/wine
lrwxrwxrwx 1 root root 13 Feb 8 17:26 S99db2 -> ../init.d/db2
lrwxrwxrwx 1 root root 11 Jun 21 08:52 S99local -> ../rc.local
#
这看起来好象是非常复杂的系统,但实际上它提供了极好的灵活性,因为如果您想临时禁止某个特定运行级中的服务,只要把适当的符号链接删除即可。不过,手工管理这些链接可能会让人感觉厌烦,并且容易出错(尤其当您累了的时候),所以可以采用一个相对好一些的方法,使用 chkconfig 命令。
chkconfig 和 xinetd
如果您有一个新版本的 chkconfig ,您会在主输出的最后一部分看到有关 xinetd (Internet services daemon)的配置。为了减化说明,此部分没有列入清单2中。
如何找出激活的服务
想查看您已经激活了多少服务,运行这个命令:
/sbin/chkconfig --list
清单 2 列出了这个命令的输出。您可以看到,每一行有八列。
chkconfig 命令还可以用来切换任何一个服务的开或关。详细信息请参考手册页(man chkconfig)。
清单 2. chkconfig --list|sort的输出
QUOTE:
afs 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑ff 5困惑n 6困惑ff
anacron 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
apmd 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
atd 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
autofs 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
crond 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
db2 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑ff 5困惑n 6困惑ff
firstboot 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
gpm 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
httpd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑n 6困惑ff
iptables 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
irda 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
isdn 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
keytable 0困惑ff 1困惑n 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
kudzu 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
lpd 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
mysqld 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑ff 5困惑n 6困惑ff
netfs 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
network 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
nfs 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
nfslock 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
nscd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
ntpd 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑ff 5困惑n 6困惑ff
pcmcia 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
portmap 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
postgresql 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
random 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
rawdevices 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
rhnsd 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
saslauthd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
sendmail 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
snmpd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
snmptrapd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
sshd 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
syslog 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
vsftpd 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
winbind 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
wine 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
xfs 0困惑ff 1困惑ff 2困惑n 3困惑n 4困惑n 5困惑n 6困惑ff
xinetd 0困惑ff 1困惑ff 2困惑ff 3困惑n 4困惑n 5困惑n 6困惑ff
ypbind 0困惑ff 1困惑ff 2困惑ff 3困惑ff 4困惑ff 5困惑ff 6困惑ff
清单 2中第一列是服务的名字,接下来的列是运行级和每一个运行级中服务的状态。例如,ntpd (Network time daemon)服务被配置为只在运行级3中(多用户,无图形)和运行级5(多用户,有图形)中启动,sshd 服务在运行级2,3,4和5中都被切换到开的状态。
注意在运行级0和6中没有一个服务要启动。回顾表 1,原因显而易见。运行级1表示要关闭或停止系统,因此在机器将要“关闭”时,您不会想要启动任何服务。运行级6中也是如此。
运行级1??“单一用户模式”??是一个特别的运行级,一般在系统出问题的时候使用。一直以来,在运行级1中运行的唯一一个应用程序是 shell,允许超级用户来修复系统或者让超级用户在一个安全的环境中修改系统。这样是安全的??就像它的名字“单一用户模式”的含意一样??只有超级用户可以访问系统。并且,联网是禁用的,所以没有人可以远程登录。如表 1所示,单一用户模式中运行的唯一一个服务是keytable,这样使得超级用户的键盘可以正常使用。
激活服务与运行服务的对比
有时服务会由于某种原因无法启动,用下面这个命令查看当前有哪些服务正在运行:
/sbin/service --status-all
这个命令将为每个服务输出一行或多行,指出每个服务是否在运行,如果在运行,则列出服务的一些特定的输出,比如服务运行的PID(进程号)。service 命令没有手册页,但是您可以在运行这个命令时使用--help 选项,您就可以得到有关它的操作的一些帮助信息。
传统服务框架的缺陷
关键的是,只有当配置中的所有服务都启动以后,您才可以登录进入您的 Linux 系统。等待50个服务启动可能会需要若干分钟,而这本来应该是您享用Linux系统的时间。
我已经找到了一个加速这个过程的方法。注意这种方法不会停止任何服务。不管怎样,停掉那些不用的服务是很明智的,不仅是因为这样可以加快引导的速度(在机器可以登录之前需要运行的服务少了),而且,由于很多服务要以 root 用户身份来运行,停掉不用的服务会减少您的安全隐患。
扼要重述一下,当一个 Linux 系统引导时,它以一种连续的方式来运行所有的某个运行级所配置的所有服务??一个接一个地。这是一个耗时的操作。
或许一个很明显的加快服务启动速度的方法是并行地启动所有的服务,这样它们就可以同时启动。不幸的是,虽然这听起来很吸引人,却不可行。原因是各个服务之间存在依赖的关系。Linux没有把这些依赖关系完全显式地表示出来,但是事实上这些依赖关系是存在的。还记得我们先前讨论的关于链接名字格式的问题吗?在“S”和“K”之后的两位数决定了链接(也就是它们指向的服务)的运行顺序。这些数字确定了一个硬性的顺序,这样一定程度上也强化了服务之间的依赖关系。
服务之间的依赖关系
回顾清单 1,我们可以看到 network 服务(S10network)将在ntpd服务(S58ntpd)之前运行。这是我们所期望的,因为 ntpd 服务要求网络可达,以使它可以连接一个本地时间服务器。不幸的是,这个硬性的顺序并不能告诉我们足够的信息,并且会让人误解。例如,在清单 1中我们可以看到 lpd 服务(S60lpd)将在 network 服务之后运行。虽然这样对那些连接到网络并且使用网络打印机的 Linux 系统来说是正确的,但是这并不说明当背板上有一个 inkjet 打印机连接到本地系统时,lpd 服务还是必须要在 network 服务之后运行。实际上,在这种情况下,在启动 network 之前先启动 lpd 会更好一些。
再来看另外一个例子:crond (cron daemon)服务 (在清单 1中的 S90crond)也是在 network 启动之后运行。可是,如果您没有使用远程机器文件的 cron 文件,那么就应该让 crond 在 network 之前启动。
由于我刚才介绍的 Linux 下启动服务的传统方法有一定的局限性,往往倾向于“安全第一",让所有的重要的服务先启动,然后再启动余下的那些。
所以,尽管我们不能并行地启动所有的服务,但我们可以并行地启动那些相互间没有依赖关系的服务。当这些相互间无依赖的服务启动以后,我们可以启动那些所有依赖条件已经满足(也就是说,那些服务所依赖的服务已经启动)的服务。然后重复这一过程,直到所有服务全部启动。
这个看起来是一个复杂的问题,不过幸运的是,已经有一个现成的可以用来解决这个问题的程序。这个程序不是别的,正是 make。
通常当编译软件时,make 会提供我们所需要的严密的框架。所有我们要做的就是告诉 make 什么是服务之间的依赖;它可以去做所有的计算交叉依赖的艰难工作,并且,使用它的鲜为人知的标记 -j ,它可以作为许多"作业"而同步运行。
得出服务间依赖关系
如先前我间接提到的,传统的 Linux 系统没有显式地表示服务间的依赖关系,所以现在我们不得不自己去做一些艰难的工作,得出这些依赖关系。这可能会需要一段时间,因为您可能都不知道每个服务在做什么,更别提服务之间的关系了。然而,如果您没有完成这些工作,这种方法对您来说没有任何益处。(如前面所提到的,如果这种方法有实用价值,希望 Linux 发行商可以采用它,并且为我们做这些艰难的工作。)
认识您的服务
如果当您运行命令 /sbin/chkconfig --list时,您有可能会遇到一些您所不认识的服务,那么花一些时间去弄明白它。一个简单的方法是读那些控制相应服务的脚本中开头处的注释。
这样您就可以把不用的那些工具所对应的服务关掉。即便是您需要它,这样您也可以更加了解您的系统。
现在,我们来做一个简单的实例。我们都知道,ntpd 服务需要网络,这说明 ntpd 服务依赖于network 服务。在 make 语法中这个依赖关系这样表示:
ntpd : network
我们还可以确定 netfs 服务(挂载我们所需要的所有NFS目录)依赖于网络。在我的系统(您的可能会不一样)上,autofs 服务(自动挂载网络文件系统)也依赖于 network 服务,因为我曾经自动挂载远程文件系统(您可能挂载光驱或者软驱)。我们的“依赖表”现在是这样:
ntpd : network
netfs : network
autofs : network
这看起来没什么,但是您知道这意味着什么吗?这意味着一旦 network 服务启动完成,我们可以并行地启动 ntpd,netfs 和 autofs 服务。
做为一个特定的例子,假设所有的服务都需要10秒才能启动。用传统的服务启动方法,启动 network,ntpd,netfs 和 autofs 服务需要40秒。而用这种技术,只需要20秒??节约的50%的时间。
为什么会这样?好了请看,network 服务启动需要10秒时间,但是(因为当 rc 脚本在运行时,机器处于完全多任务的状态)其余三个服务可以同时启动,所以这三个服务合起来的启动时间是10秒。
事实上,大部分服务需要的启动时间可能不是10秒,但是既然每一个服务要做一些完全不同的事情,启动它们所需要的时间会很可观。
样例实现
我在参考资料部分提供的压缩文件中有一个使用上述技术的样例实现。包括一个修改过的用于调用 make 命令的 rc 脚本,以及样例GNU makefile文件,分别是 runlevel.mk,start5.mk和stop5.mk。makefile 文件 runlevel.mk 是控制程序,start5.mk 文件和stop5.mk 文件分别是运行级5时启动和停止服务时的服务依赖描述文件。
注意所给出的启动和停止 makefile 文件提供的不是完全的服务间依赖关系列表,而仅仅是一个例子。同时也要注意,如果您不修改这些文件就在您的系统上使用,几乎不可能成功,因为您的服务列表可能和我的并不一样。
结束语
我提出了一种用来加快 Linux 机器引导速度的方法。这种方法允许系统在启动服务时启动顺序中靠后的部分服务并行启动,而不是以传统的串行方式启动,以实现引导的加速。这种方法在理论上没有问题,并且可以利用现有的系统工具实现。
这种方法的效率取决于需要启动的服务的数量和每个服务启动所需要的时间。并行的可行性主要取决于服务间的依赖关系。对于某些系统来说,使用这种方法可能只会有很小的改进,但对于其他系统,它可能会显著地影响引导速度。可以这样理解,每个系统都有不同的一组服务被激活,并且每一个服务需要不同的时间来启动。再强调一次,要使用这种方法,您需要确定您的特定系统的服务之间的依赖关系。
补充说明:
* 一些服务程序仅仅是在后台运行一个程序,它们自己就退出了(也就是说,服务程序结束了,但是真实的工作仍然在后台进行)。这说明了一个事实,那就是传统的系统是不完善的,这种服务程序编写者试图在现有框架的界限内减少一些时钟周期。采用本文描述的这种方法将会使依赖关系更加显式化,不需要服务编写者再去“欺骗”。这种方法考虑到在这些服务程序之外建立一个更为高效的框架。
* 当您希望“交互式”引导您的系统时,这里所提到的技术不再适用,因为您通常是当系统某些地方出错的时候才会这样去做;在这种情况下,您可能希望串行地去启动所有的服务以找出出错的原因。不过,修改系统的启动过程,来让用户在系统引导来选择是以串行的方式(允许交互的服务启动)或者“并行”的服务启动方式,是容易实现的。
* 采用这种方法可能还需要更深入的考虑,因为如果传统的系统和新的系统都提供给用户,将需要同步维持两组关于服务如何启动的信息(有序的 rc.d/ 链接文件和运行级 make 文件)。一个更好一些的解决方案是 Linux 发行版本能从 makefile 文件自动生成链接文件,因为 makefile 文件比链接文件记录了更多的关于服务的信息。
* 这个系统可能对一个专用的服务器来说并不适合,因为当一个服务发生错误时,管理员希望能在错误发生时在控制台中马上可以看到这个错误。不过,对于普通的终端用户来说,并行化的方法可以在允许用户查看是否有问题发生的前提下显著地加快引导速度。
* 有趣的是,尽管我提出的这种方法从传统观点来看不是“类似Linux的”,但 Linux 基础标准 (LSB,Linux Standards Base)看起来并没有要指定 init.d 脚本的运行顺序,所以这种方法有可能被 Linux 发行商所采用,而且使之仍然符合 LSB。这对用户来说是一个好消息,如前面所提到的,因为发行商可以为我们计算出所有的软件包之间的依赖关系。
* 有一种方法可能更为大胆,那就是 /etc/inittab 文件中的“action field”的“wait”修改为“once”。这样用户在服务启动完成之前就可以登录。不过,这已经超出了本文的范围。要得到更详细的信息请查阅 man inittab,并且请记住,UML是您的好帮手。
红联Linux论坛:www.linux110.com/bbs
__________________
希望能和你相互交流,愿意和您分享学习、进步中的每分喜悦与快乐
---------------------------------------------
http://tzhsuccess.itpub.net
向版主反映这个帖子查看tzhsuccess 的IP地址
95楼 旧帖 06-07-17 23:28
[ 大 中 小 ] 给予该贴好评 编辑/删除 引用/回复
tzhsuccess
高级会员
注册日期: 2004 Apr
来自: 太?系-?子座
技术贴数:7934
论坛积分:31670
论坛排名:67
论坛徽章:23
会员2006贡献徽章 行业板块每日发贴之星 每日论坛发贴之星 ERP板块每日发贴之星
检测Linux硬件状态
计算机系统是由软件系统和硬件系统共同组成的。检测硬件状态对于保障整个系统的稳定是非常重要的。不论操作系统是使用Linux、还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了。这里我们主要针对运行Linux的计算机系统的CPU、硬盘、内存进行检测。
中央处理器状态的检测
中央处理器是Linux主机的核心硬件。我们看一下Linux根目录下:/proc目录的内容。这个目录中的文件其实不是存放在磁盘上的。该目录的文件系统叫做proc文件系统,是系统内核的映像。也就是说该目录里面的文件是存放在系统内存里面。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息(如进程)是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
CPU的信息存放在“cpuinfo”文件中。我们也可以使用以下命令来查看:
#cat /proc/ cpuinfo
以下以笔者的AMD Athlon 1100为例:
processor : 0
vendor_id : Authentic AMD
cpu family : 6
model : 7
model name : AMD Athlon(tm) Processor
stepping : 0
cpu MHz : 1100.046
cache size : 64 KB #缓存容量#
fdiv_bug : no # 没有BUG#
hlt_bug : no # 没有BUG#
f
coma_bug : no # 没有BUG#
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips : 2195.45
一定要确保CPU硬件没有BUG,并且被系统认别出具体型号。以上只是显示CPU的基本情况,对于实时情况我们使用mbmon软件检测CPU,
1.软件下载:http://www.nt.phys.kyushu- u.ac.jp/shimizu/download/xmbmon203.tar.gz,http://www.nt.phys.kyushu- u.ac.jp/shimizu/download/README-xmbmon203.html。
软件下载后先看一下:
README-xmbmon203pl1.html
查看一下软件是否支持你的主板芯片。
2.安装软件:
gunzip xmbmon203.tar.gz
tar xmbmon203.tar
cd xmbmon203
./configure;make;make install
3.运行软件:
mbmon可以工作在命令行和X窗口下,首先查看一下笔者的主板:
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> |