6.1  开关机流程与多重启动
6.1.1 开机流程
基本的流程为:
1.加载 BIOS 的硬件信息;
  记录在bios里的主机的硬件数据加载.
2.读取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)开机信息;
  硬盘的引导数据,在主引导扇区, Kernel Loader主要的功能在于选择硬盘上的系统,让你的硬件认识核心,以便加载内核
    3.加载 Kernel 的操作系统核心信息;
 
      加载内核
4.Kernel 执行 init 程序并取得 run-level 信息;
  取得系统登陆状态,由/sbin/init 来加载 /etc/inittab 的信息,获得登陆状态 .
  [root @test /root]# vi /etc/inittab
#   0 - halt (Do NOT set initdefault to this)  关机 
#   1 - Single user mode  单人使用(系统有问题时候的登入状况) 
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多人但无网络 
#   3 - Full multiuser mode 文字界面登入的多人系统 
#   4 - unused      系统保留 
#   5 - X11           X-Windows 图形界面登入的多人系统 
#   6 - reboot (Do NOT set initdefault to this)  重新开机 

id:3:initdefault:
    『单人维护模式 ( run-level 为 1 )』?如果你有玩过 Windows 的话,那么你在开机的时候如果按下 F8 时,不是会出现
一些什么『安全模式』啦、『正常开机』啦或『 MS-DOS 模式』等等的进入 Windows 的状态吗?尤其是当你不正常关机的时候,
Windows 预设就会以『安全模式』来启动 Windows 啰!Windows 的『安全模式』几乎不加载一些复杂的模块,让你的 Windows
一定可以开机成功!那么 Linux 的维护模式状态即是使用单人模式( 就是 run_level 为 1 啦!)
  
    5.init 执行 /etc/rc.d/rc.sysinit 档案;
    需要将主机的信息给他读进去 Linux 系统!而 Linux 系统的第一个数据内容就是 /etc/rc.d/rc.sysinit 这个档案,这个档
案的内容包括了==>设定预设路径( PATH )、设定主机名称、执行 /etc/sysconfig/network 所记录的网络信息、挂载 /proc
这个保存在内存当中的主机基本讯息、以及其它几个 Linux 操作系统最基本的几个信息.
6.启动核心的外挂式模块 (/etc/modules.conf);
modules.conf有两个作用,一是告诉OS哪些模块开机自动加载,二是指明设备和模块的对应关系,比如:alias eth0
8139too,它告诉OS,设备eth0的驱动模块是8139too
7.init 执行 run-level 的各个批次档( Scripts );
run-level 所需要加载的模块并不相同,所以系统早就为不同的 run-level 设定了一些批次档( scripts )来做这件事,
而 run-level 早就在前面的时候以 /etc/inittab 当中取得,也就是说『当你以 文字模式 ( run-level=3 ) 启动 Linux 时,你
的系统在经过 BIOS、 MBR、 Kernel、 init、/etc/rc.d/rc.sysinit 之后,就会进入 /etc/rc.d/rc3.d 来启动一些服务』啰!
不过,需要注意的是,在 rc3.d (或其它目录下 rc0.d ~ rc6.d )目录中 S 开头的档案为执行该服务, K 为开头的档案则是杀
掉该服务的意思。那么那些数字代表的意义为何?那就是启动的顺序
8.init 执行 /etc/rc.d/rc.local 档案;
在 Linux 系统执行完了大部分的开机程序之后,接着下来就是要执行你的 Linux 主机的个人化设定.
9.执行 /bin/login 程序;
    10.登入之后开始以 Shell 控管主机。
 
6.1.2:变换预设的登入模式
你在安装的过程中选择了文字接口登入,但是后来却想以图形接口登入系统,应该怎么做?!简单的很!就直接修改 /etc/
inittab 这个档案的内容即可!如何做呢?!以 vi 或者是其它的文书编辑软件,进入 /etc/inittab 这个档案,
id:3initdefault: 里头的 3 改成 5 ,那么在下次的登入时就会变成是图形接口啰
 
    6.1.3:Lilo
   Lilo 的设定与安装方面必需要分成两个步骤,分别是设定 /etc/lilo.conf 这个设定档,设定完毕之后,还必需要给他改写
进去 MBR 或者是 Super block 才行!
 
  6.1.3.1 配置文件/etc/lilo.conf
  基本上, lilo 是加载 Linux 核心的重要开机数据的安装程序,他的参数设定档案就放在 /etc/lilo.conf 里头,那么我们来
看一看里面有什么设定参数吧,基本上他的设定参数有点像底下这样,可以分为两部分,一个是整体的设定方面,一个则是每一
个开机设定的核心档案:
 
[root @test linux]# vi /etc/lilo.conf 
# 第一部份,整体的设定部分
prompt   <==强制出现 boot 的开机讯息啰! 
Compact  <==可以整合一些读取的扇区,可以保持 map 较小,相当适合软盘开机时使用 
delay=50 <==如果有多重开机的话,可以设定这个延迟时间,单位0.1秒 
timeout=50 <==与 delay 有类似的关系!也是 0.1 秒,如果 5 秒内没有按键盘,直接以第一个 p_w_picpath 开机。 
default=linux-2.4.18 <==如果开机的过程中,出现了boot之后,使用者没有动作,
                          则以此设定的核心开机,与底下的label需对应 
boot=/dev/hda         <==Lilo 的开机信息写入到 /dev/hda 这颗硬盘的 MBR 当中。 
map=/boot/map         <==用来说明 local 主机的地图信息啰! 
install=/boot/boot.b <==关于开机区的讯息(boot sector),不用理他没关系! 
Linear                <==在较大容量的硬盘使用时,可以加入这一个参数试试看! 
lba32                 <==这个东西也是在大容量的硬盘使用时候会需要的参数! 
password=1234567      <==设定密码!如果为了安全起见,可以设定您的 lilo 密码哩! 
message=/boot/message <==那个 LILO 的讯息就是在里面出现的啦!
# 第二部分,个别的开机设定部分,一个 p_w_picpath 或 other 均代表一个开机设定!
p_w_picpath=/boot/vmlinuz-2.4.7-10     <==核心档案啦! 
        label=linux-2.4.7        <==请注意!label 前面以 [tab] 按键来作为分隔!
                                    这个字眼则是显示在 boot 里头挑选项目。 
        initrd=/boot/initrd-2.4.7-10.img 
        read-only              <==开机扇区挂载为只读!这是预设状况,实际在
                                    挂加载 Linux 系统时,会重新挂载成可写! 
        root=/dev/hda1           <==挂载成 / 这个 root 目录的磁盘! 
other=/dev/hdb1                  <==如果是『非 Linux 核心』就以 other 来设定
                                    开机的磁盘扇区! 
    label=Windows2k          <==同样的要有 label 来表示这个开机扇区的名称!
 
注意一下上面那几个咚咚:
 
delay 与 timeout 的设定是 0.1 秒,所以 delay=50 表示延迟时间为 5 秒!
linear 与 lba32 通常用在 SCSI 或者是较大的硬盘,例如扇区超过 1024 磁道的硬盘,可以使用这个项目来除错!不过,如果
是小于 8GB 的硬盘,这两个东西有没有设定就没有什么影响了!
default 需要设定成底下几个 p_w_picpath 或者是 other 的 label 才成!这个地方最常被忘记!因为常常会记得修改 label ,但是
忘记跟着改变 default 的内容!此外,如果你想要修正开机预设的操作系统选项,在这里改啦!
password 的用途在于安全防护方面,不过有个困扰,就是『如果你的计算机因为不正常关机(如断电后重开)而在电源恢复的时
候重新开机时,则会卡在这个阶段无法直接进入 Linux 系统』,因为你必须提供 password 才能继续的工作呀!
boot 显示的是开机的扇区选择! 这里也蛮重要的,如果你想要安装在 MBR 里面的话,如同上面的书写模式,就是写入 /dev/
hda ,后面不要加上每个 partition 的代码!但是,如果你是想写入 Super Block ,例如我想要写入的是 hda5 这个 Logical
的 partition 时,那么这里就必需要改写为 /dev/hda5 啰!所以,您应该只要一看到这个 boot 后面接的内容,就会知道那个
安装的扇区是 MBR 还是 Super Block 啰!
p_w_picpath 可以设定成多数个!如果你的 Linux 系统有多个核心档案的时候,例如我们刚刚编译完成的一个新的核心,然而你又不想
丢掉旧核心,就可以设定成两个不同核心的开机系统啰
  6.1.3.1 安装 lilo
既然设定好了,自然就是要安装他啰!安装的方式很简单,直接输入 lilo 即可!
  [root @test root]# lilo
Added linux *       <==有打星号的是『预设的开机设定档!』
Added failsafe
Added linux-test
   6.1.4 GRUB
     6.1.4.1 设定档 /boot/grub/menu.lst
  
     6.1.4.2  在 grub 里面,有一点是比较让人觉得不适应的,那就是他的硬盘代号与 lilo 还有 Linux 传统的代号不一样~他的代号主要有点像这样:
 
(hd0,0)
hd 指的是 IDE 的硬盘,而里面的 0,0 代表什么呢?第一个 0 代表他是第一个 IDE 的 master ,而第二个 0 代表他是第一块 partition 的代号,所以呢,这个代号就是 hda1 啦!所以,我们可以得到底下这个对应表:
  装置 Lilo Grub
IDE1 master hda, hda1, hda2 (hd0), (hd0,0), (hd0,1)
IDE1 slave hdb, hdb1, hdb2 (hd1), (hd1,0), (hd1,1)
IDE2 master  hdc, hdc1, hdc2 (hd2), (hd2,0), (hd2,1)
IDE2 slave  hdd, hdd1, hdd2  (hd3), (hd3,0), (hd3,1)

来谈谈这两种安装的方式:基本上的动作就是:
 
使用 root [磁盘代号] 选择开机根目录 / 所在磁盘代号;
使用 setup [磁盘代号] 选择 MBR 或 Super block 直接安装进去!
使用 quit 就可以离开 grub 了

6.2 套件管理RPM与Tarball
   ·RPM
  目前使用最广泛的套件管理程式之一,利用资料库管理的方式来进行套件的安装,具有相当容易的操作介
面,而且套件查询验证的功能相当强大,不过麻烦的地方在于他的属性相依的问题;
  ·Tarball
  直接以原始码( source code )经过编译后,进行安装。在安装上面具有较大的灵活度,可以随时更改使用
者喜好的参数。但是需要其他的套件协助,例如 gcc compiler, kernel-header, make 套件等等,并且在反安
装上面具有一定程度的困难度;
  6.2.1 RPM
  6.2.1.1 RPM及srpm简介
 
    RPM 全名是『 RedHat Package Manager 』简称则为 RPM,是以一种资料库记录的方式来将你所需要的套件
安装到你的 Linux 主机的一套管理程式
    还有 SRPM 这个东西! SRPM 是什么呢?他也是一种 RPM 啦!但是由于里面连同当初编译之前的原始码都
在里头,所以可以进行重新编译的动作。通常 SRPM 的附档名是 ****.src.rpm 这一种档案格式。由于 SRPM
包含了原始码及参数设定档案,所以在安装之前则必须重新的编译建立起包装的资讯档案套件才行!当然啰,
如果在编译的过程中发生了问题,也可以藉由里头的原始码更动来修正问题的所在呢!所以说, RPM 与 SRPM
最大的差异就是在于有没有包含原始码的程式啦!
    rpm和srpm的格式:  
    xxxxxxxxx.rpm  <==RPM 的格式,已经经过编译且包装完成的 rpm 档案;
 
    xxxxx.src.rpm  <==SRPM的格式,包含未编译的原始码信息。
 
那么我们怎么知道这个套件的版本、适用的平台、打包的次数呢?呵呵!只要透过档名就可以知道了!例如
rp-pppoe-3.1-5.i386.rpm 这的档案的意义为:
 
 rp-pppoe -  3.1    -   5  .   i386    .rpm
 套件名称   套件的版本信息   释出的次数   适合的硬件平台  附文件名 
 
 适合的 硬件平台:
这是个很好玩的地方,由于 RPM 可以适用在不同的操作平台上,但是由于不同的平台设定的参数还是有所差异
性!并且,我们可以针对比较高阶的 CPU 来进行最佳化参数的设定,所以就有所谓的 i386, i586, i686 与
noarch 等的文件名称出现了!
 
    i386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,
都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
i586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU
( socket 7 插脚 ) 等等的 CPU 都算是这个等级;
   i686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级!
noarch 就是没有任何硬件等级上的限制。
 
需要额外说明的是, i386 的档案可以在任何的机器上面安装,不论是 586 或者是 686 的机器,但是 i686
则不一定可以使用于 386 或者是 586 的硬件上面,这是因为 i686 的 RPM 档案在编译的时候,主要是针对
686 硬件等级的 CPU 来进行最佳化编译,而 386/586 等级的硬件可能由于无法支持该最佳化参数,所以无法
使用呢!另外,在 686 的机器上使用 i686 的档案会比使用 i386 的档案,效能可能比较好一些!无论如何,
使用 i386 应该就是比较没有问题的啦
   6.2.1.2  RPM的相关指令:
 
   1.安装
   [root@test root]# rpm -ivh rp-pppoe-3.1-5.i386.rpm
Preparing...     ####################################### [100%]
   1:rp-pppoe    ####################################### [100%]
# -i :install 的意思
# -v :察看更细部的安装信息画面
# -h :以安装信息列显示安装进度,例如上面的 # 字符号!
 
# 如果要安装两个以上的套件时,可以这样:
[root@test root]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
# 后面可以接多个套件!
   2.升级
   使用 RPM 来升级真是太简单了!就以 -Uvh 或 -Fvh 来升级即可( 注:vh 的功能仍是在于显示细部信息与
安装进度而已 )!不过,这两种升级方式是不太一样的:
  -Uvh 后面接的套件即使没有安装过,则系统将予以直接安装;若后面接的套件有安装过旧版,则系统自动
更新至新版;
   -Fvh 如果后面接的套件并未安装到您的 Linux 系统上,则该套件不会被安装;亦即只有安装至您 Linux
系统内的套件会被『升级』!
  3.查询
 
   a. 从系统查询(由 /var/lib/rpm 数据库取得的数据)
[root @test /root]# rpm -q rp-pppoe                 <==仅列出 rp-pppoe 这个套件的版本;
[root @test /root]# rpm -qa                     <==列出所有安装过的套件与版本;
[root @test /root]# rpm -qi rp-pppoe            <==列出 rp-pppoe 这个套件的详细信息
[root @test /root]# rpm -ql rp-pppoe            <==列出 rp-pppoe 这个套件安装的文件与路径;
[root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe  <==查询 pppoe 这个文件属于哪一个套件?
 
   b. 由档案查询档案的内容
[root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm  <==查询这个套件的详细信息;
[root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm  <== 查询这个套件里面有多少文件
  4.验证
[root @test /root]# rpm -V rp-pppoe <==单纯检查 rp-pppoe 这个已安装套件的文件内容与原先是否相同
[root @test /root]# rpm -Va           <==检查所有的 /var/lib/rpm 底下的数据库与 Linux 系统下是否相同的文件
 5.反安装与重建数据库
 [root @test /root]# rpm -e re-pppoe  <==解安装 rp-pppoe 
 
 [root @test /root]# rpm --rebuilddb  <==重建数据库

 6.2.2 Tarball
 6.2.2.1 Tarball简介
 
  其实tarball 就是以 *.tar.gz 压缩之后的 binary 原始文件.
  常我们会给您这样的建议:
 
最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;
安装时,最好安装到 /usr/local 这个预设路径下;
考虑未来的反安装步骤,最好将每个套件单独的安装在 /usr/local 底下,例如安装 rp-pppoe-2.6.tar.gz
时,则可以指定该套件需要安装于 /usr/local/rp-pppoe 当中,如此一来,如果该套件会将所有的数据都写入
/usr/local/rp-pppoe 当中,因此,未来如果要移除该套件,只要将该目录删除即可视为成功的移除了!
不过单独安装某个套件在某一特定路径下的作法,会导致当有 man page 的时候,使用预设的 MANPATH 会找不
到相关的说明档案内容。这个时候就必须要将 man page 的路径加到 /etc/man.config 档案中了!否则使用
man 也查询不到指令的使用方法的。以上面的例子为例,如果是安装了 /usr/local/rp-pppoe 当中,通常 man
page 会放在 /usr/local/rp-pppoe/man 当中,所以,您就必需要在 /etc/man.config 里面差不多 40~50 行
左右的地方,加入底下这一行:
MANPATH /usr/local/rp-pppoe/man
这样就可以使用 man 来查询资料啰!
 6.2.2.2 TarBall 安装需要的套件
  1.kernel sources files: /usr/src/linux目录下的文件,该目录是需要安装或编译过核心才会存在的目录
 
  2.make及autoconfig等套件:需要安装,使参数配置文件(通常就是Makefile文件)顺利执行
  3.gcc或cc等编译软件:如果没有编译软件,自然也就无法将源代码编译成可执行文件,所以至少要有一种编
译器,在liunx下,通常使用gcc套件.注意,gcc和上面的make等套件都在安装linux时的软件开发包里.
 6.2.2.3 TarBall 安装的基本步骤
 1.将Tarball在/usr/local/src中解压缩
 
 2.在软件解压缩的路径下建立Makefile参数配置文件;
 3.以make这个程序并使用该目录下的Makefile作为它的参数配置文件,进行make(编译或其它)动作
 4.以make这个程序,并以Makefile参数配置文件依据install项的指定将其安装到正确的路径.
 Tarball软件的安装指令输入方式:
 1. ./configure  :这个步骤就是建立Makefile文件,即参数配置文件,这个步骤的相关信息应该参考该目录下
的README或INSTALL相关的文件
 2. make clean   : make会读取Makefile中关于clean的工作。这个步骤不一定会有,但最好是有,因为在进
行编译的时候,会产生一些*.o文件,例如有个abc.c的源代码,经过编译后会变成abc.o文件,我们称这个文件
为目标文件。这些文件如果之前己经过编译并保留下来的话,那么这次再编译的时候就不会编译该文件(即这次
不会重新编译,还是会采用上次*.o的文件),但由于我们可能己经修改了部分参数,因此该文件的编译结果事
实上应该会有所不同。故为了避免这样的结果,所以通常需要执行这个步骤
 3. make       :make会依据Makefile中的预设工作进行编译的行为,使用make就是要将源代码编译为可执行文
件,而这个可执行文件会放置在当前所在目录下,尚未被安装到预定目录中。
 4.make install: 通常这是最后的安装步骤,make会依据Makefile文件中关于install的项将上一步骤编译完
成的数据安装到预定目录中,就完成安装了。
 5.特别注意,上面的步骤是一步一步进行的,其中只要一个步骤无法成功,后续步骤就没有办法进行,因此,
要确保每一个步骤都是成功的。

 6.2.2.4  TarBall的移除与升级
     Tarball的移除难度跟当初设定参数文件时的安装目录与这个套件本身要求的放置目录有关.通常一个套件
在安装时会将它的内容分到四个目录中存放,分别是:etc(代有设定),lib(代表函数),man(代表在线说明文档),
bin(代表执行文件).
     以apache为例,如果在安装时使用默认值,在这些文件相应的会存放在/etc/httpd,/usr/lib,/usr/bin,/
usr/share/man中,这时在移除时就有会有困难了.但是如果在安装时指定了路径,如/usr/local/apache,则相应
的存放目录为:/usr/local/apache/etc,/usr/local/apache/lib,/usr/local/apache/man,/usr/local/apache/
bin.这时在移除时,只要删除/usr/local/apache就可以了.

 6.2.3  选择RPM还是Tarball
1.优先选择RPM
如果版本支持RPM安装并且没有严重的相依属性问题时,选择RPM安装是一个比较好的选择.此外,当一个套件经过
大幅修改,通常旧的RPM与新的RPM之间几乎无法完全兼容,升级或移除过程就很麻烦。
2.简易方法
使用Tarball可以自行编译并且安装在不同的路径,只要在启动时启动适当的版本,不同版本的套件可以同时存
在于一个系统中,而且可以通过选择启动文件来启动不同的版本。

6.3 核心编译与多重启动(这一章很难用上,暂时学个大概)
6.3.1 什么是核心
  linux Distribution
  kernel
  linux核心放在什么地方
6.3.2 为什么更新核心
    核心的编译重点在于『你要你的 Linux 作什么?』,是啦!如果没有必要的工作,就干脆不要加在你的核
心当中了!这样才能让你的 Linux 跑得更稳、更顺畅!这也是为什么我们要编译核心的最主要原因了!,核心
编译的最主要目地是想让系统更加稳定.
6.3.3 核心的版本与何处下载最新核心
6.3.3.1 核心的版本
    [root@linux ~]# uname -r
    2.6.13-1.1532_FC4
    [主版本].[次版本].[释出版本(release)]-[修改版本]
    整个版本的定义当中,最需要注意的是前两个,亦即主版本与次版本。 相同的[主][次]版本,代表他使用
的函式库是差不多的,所以,可以直接升级到较高的[释出版本]上。 值得注意的是,由于核心功能的增加速度
实在太快了,一般商业用户与一般使用者, 根本不需要很多的测试中的功能,因此,[主][次]版本中,依据
[次版本]的奇偶数, 又分为底下两种版本:
    如果[次版本]是奇数的话,例如 2.3, 2.5 等等,那表示他是一个『 测试性质功能的核心版本 』, 这种
核心通常是在推出稳定版本的核心之前,用来给 developer ( 核心维护更新测试者!) 测试用的!虽然功能较
为强大,但是由于是属于测试性质,所以可能会有些许的 bugs 也说不定;
    如果[次版本]是偶数的话,例如 2.4, 2.6 等等,那表示他是一个经过测试之后才释出的 『稳定核心版
本,这种核心较为稳定不容易出错, 比较适合一般个人或者是商业使用!
     这里还是要再提一遍!就是『 2.4 与 2.6 是两个具有相当大差异的核心版本, 两者之间使用到的函式
库基本上已经不相同了,所以在升级之前,如果您的核心原本是 2.4.xx 版,那么就升级到 2.4.xx 版本的最
新版,不要由 2.4.xx 直接升级到 2.6.xx 版.

6.3.3.2 核心下载 的 地点

6.3.4  开始设定核心的内容

6.4 基本的系统设定指令
6.4.1 基本的系统设定工具
   1. Mandrake :drakconf
   2. Red Hat  :setup,修改/etc/sysconfig目录中的文件
6.4.2 系统启动服务工具
6.4.2.1.service
  
   service命令用于管理Linux操作系统系统中服务的命令,让该项服务立即启动
   service [service name ][start|stop|restart]
1. 声明:这个命令不是在所有的linux发行版本中都有。主要是在redhat、fedora、mandriva和centos中。
 
此命令位于/sbin目录下,用file命令查看此命令会发现它是一个脚本命令。
3. 分析脚本可知此命令的作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作。
4. 开启httpd服务器:service httpd start
start可以换成restart表示重新启动,stop表示关闭,reload表示重新载入配置。
5. 关闭mysql服务器:service mysqld stop

6.4.2.2 .chkconfig(注意这里的name是必须存在于/etc/rc.d/init.d目录下的)
chkconfig --list [name]                        -----列出run-level情况下该套件是否被开机启动
 
chkconfig --add name                        ----------增加一个service_name在开机时启动       
chkconfig --del name                        --------删除一个开机启动服务
 
chkconfig [--level levels] name    [on|off|reset]           ----改变指定服务的的启动信息
chkconfig [--level levels] name
eg:决定在运行级 2 禁止crond,
# chkconfig --level 2 crond off
(root执行)会在运行级 2 关掉 crond。
运行级文件
每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。
第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那
么使用 - 代替运行级。
第二行对服务进行描述,可以用\ 跨行注释。
例如,random.init 包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
表明 random 脚本应该在运行级 2, 3, 4, 5 启动,启动优先权为20,停止优先权为 80。
 
 6.4.3 检验软件正确性:md5sum
 6.4.4 核心模块的管理
 
6.5 认识系统服务
6.5.1 什么是daemon 
   操作系统的后台进程,通常具有root安全级别许可权。守护程序通常隐藏在后台,直至被某个事件(例如特
定的时间或日期、时间间隔、收到电子邮件等)触发后它才会进入活动状态。
   daemons 目前有两种基本的模式,分别是 stand_alone 与 super daemon 两种方式: 
 
   stand_alone : 就字面上的意思来说,stand alone 就是『独立的启动』的意思,也就是说,该 daemon
启动之后,就直接常驻在内存当中啰!他虽然会一直的占用系统的资源,但最大的优点就是,他会一直启动的
啦!所以当有要求来的时候,他就会很快速的响应啰!常常用在这一种 daemon 的网络服务如常见的 httpd
   super daemon : 相对于 stand alone 的执行方式,这一种服务的启动方式则是藉由统一的一个 daemon
来负责唤起该服务!这一个统一负责的 daemon 就是 inet 这支服务啦!不过,在后来的 Linux 发展套件中,
则是使用 xinet 这个设定.
6.5.1.2 /etc/services
    在 Linux 系统里面有个文件在说明哪个窗口与服务的  ( services and ports ) 对应!呵呵!那就是鼎
鼎大名的 /etc/services 这个文件.
6.5.1.3命名规则
    服务的名称被建立之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的建立的 at, 与 cron 这两个服务,通常会被称为 atd 与 crond,这个 d 代表的就是 daemon 的意思

6.5.2 系统的Daemons启动文件放在哪里
  stand alone : 这个放置在 /etc/rc.d/init.d/ 这个目录里面,几乎所有的 RPM 安装的套件之启动项目都
在这里啦!
 
  super daemon : 这个工作的那一支服务其实就是 xinet 或者是 inet 啦!请注意, xinet 也是一个
daemon 呢!他是 stand alone 启动的,也就是他会一直在监听大家的需求,所以 xinet 的启动 scripts 写
在 /etc/rc.d/init.d/xinetd 这个 scripts 里面啰!但是挂在这个 daemon 里头的服务之设定项目呢?嗯!
就是写在 /etc/xinetd.conf 与 /etc/xinetd.d/ 这个目录里面的任何文件!
6.5.3 解析xinetd.conf
    一般,在/etc/rc.d/init.d中的脚本都是相应的RPM提供的.可以由这个super daemon来管理我们的服务.
 默认的/etc/xinetd.conf文件的内容:
[root@rtest ~]# more /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
        instances               = 60
        log_type                = SYSLOG authpriv
        log_on_success          = HOST PID
        log_on_failure          = HOST
        cps                     = 25 30
}
includedir /etc/xinetd.d
如果没有指定services(defaults),那么就用{}中的设定来执行
includedir /etc/xinetd.d 这行表示,在/etc/xinetd.d里的所有文件都放入xinetd.conf中,这样一来,我们可
以一个一个设定不同的项,而不需要将所有的服务都写在xinetd.conf中.即每个服务有一个设定好的配置文件.
参看下面的目录下的文件.
[root@test ~]# cd /etc/xinetd.d
[root@test xinetd.d]# ll
总用量 120
-rw-r--r--  1 root root 560 10月 19 23:26 chargen
-rw-r--r--  1 root root 580 10月 19 23:26 chargen-udp
-rw-r--r--  1 root root 239 10月 19 23:26 cups-lpd
-rw-r--r--  1 root root 417 10月 19 23:26 daytime
-rw-r--r--  1 root root 437 10月 19 23:26 daytime-udp
-rw-r--r--  1 root root 339 10月 19 23:26 echo
-rw-r--r--  1 root root 358 10月 19 23:26 echo-udp
-rw-r--r--  1 root root 322 10月 19 23:26 eklogin
-rw-r--r--  1 root root 325 10月 19 23:26 gssftp
-rw-r--r--  1 root root 309 10月 19 23:26 klogin
-rw-r--r--  1 root root 322 10月 19 23:26 krb5-telnet
-rw-r--r--  1 root root 307 10月 19 23:26 kshell
-rw-r--r--  1 root root 317 10月 19 23:26 rsync
-rw-r--r--  1 root root 495 10月 19 23:26 time
-rw-r--r--  1 root root 515 10月 19 23:26 time-udp
[root@test xinetd.d]# more echo
# default: off
# description: An xinetd internal service which echo's characters back to clients. \
# This is the tcp version.
service echo
{
        disable         = yes
        type            = INTERNAL
        id              = echo-stream
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
}              
这里表示的就是echo这个服务运行时的一些属性.
6.5.4 TCP_Wrappers:/etc/hosts.allow与/etc/hosts.deny
除了xinetd外,还有一个方法限制利用某些服务进入linux主机,即/etc/hosts.allow与/etc/hosts.deny.
这两个配置文件的格式如下:
 
  #服务进程名:主机列表:当规则匹配时可选的命令操作
 
  server_name:hosts-list[:command]
 
  /etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP.如果两个文件的
配置有冲突,以/etc/hosts.allow为准
    ALL:127.0.0.1 #允许本机访问本机所有服务进程
 
  smbd:192.168.0.0/255.255.255.0 #允许192.168.0.网段的IP访问smbd服务
 
  ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况

6.5.5 系统开启的服务
6.5.5.1 netstat
       netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。
 该命令的一般格式为:
   netstat [选项]
  
   命令中各选项的含义如下:
   -a 显示所有socket,包括正在监听的。
    -c 每隔1秒就重新显示一遍,直到用户中断它。
    -i 显示所有网络接口的信息,格式同“ifconfig -e”。
   -n 以网络IP地址代替名称,显示出网络连接情形。
   -r 显示核心路由表,格式同“route -e”。
    -t 显示TCP协议的连接情况
    -u 显示UDP协议的连接情况。
  -v 显示正在进行的工作。

6.5.5.2 chkconfig
6.5.5.3 各个服务的简单说明.
 
6.6 分析登陆文件
6.6.1 什么是登陆文件,为什么要分析登陆文件
  
     登陆文件就是记录系统活动记录的几个文件,例如:何时、何地(来源 IP )、何人( login
name )、做了什么动作,另外就是系统在什么时候做了什么样的行为时,发生了什么样的事件等等
      常见的登陆文件:
  
      1./var/log/secure  记录登入系统存取数据的文件
  
      2./var/log/wtmp  记录登入者的讯息数据,由于本档案已经被编码过,所以必须使用 last 这个指令
来取出档案的内容
      3./var/log/messages  这个档案相当的重要,几乎系统发生的错误讯息(或者是重要的信息)都会记
录在这个档案中
 
      4./var/log/boot.log   记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息;
      5./var/log/maillog    纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录
      6./var/log/cron       这个是用来记录 crontab 这个例行性服务的内容的
      7./var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log
分别是几个不同的网络服务的记录文件
6.6.2 linux登陆文件的规划
      针对 log 档案来设计的服务有这两支:
     
      syslogd:进行系统或者是网络服务的登录文件记录工作;
      logrotate:将旧的数据更名,并且建立新的登录文件,以保持登录文件的『新鲜』,并视设定将最旧的
登录文件删除。
6.6.2.1 syslog
    linux默认使用syslog程序来记录系统的登陆数据.它能接受访问系统的日志信息并且根据
/etc/syslog.conf 配置文件中的指令处理这些信息.
使用下列的句法来说明:
<服务名称.信息等级>   <存放或显示的地点>
.服务名称:例如像mail,http,cron等服务名称
.信息等级:emerg 或 panic 该系统不可用
 
 alert 需要立即被修改的条件
 
 crit 阻止某些工具或子系统功能实现的错误条件
 
 err 阻止工具或某些子系统部分功能实现的错误条件
 
 warning 预警信息
 
 notice 具有重要性的普通条件
 
 info 提供信息的消息
 
 debug 不包含函数条件或问题的其他信息
 
 none 没有重要级(即不记录到文件),通常用于排错
 
 * 所有级别,除了none
  与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。

.存放地点:通常使用的都是记录文件.但是也可以输出到设备。
注意:当我们的等级使用info时,任何大于info等级的(含info等级)之上的信息都会被记到后面的文件中.
eg:
1.  mail.info   /var/log/maillog
将mail的相关数据写到var/log/maillog中.
2. syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!)。
  
    星号 (*)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点”。就像它在规则表
达式里的作用一样,星号代表“任何东西”。在前面给出的例子 里,“mail.*”将把所有优先级的消息都发送
到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果 完全一样,后者也
将把所有类型的消息发送到指定地点。
    等号(=)的含义是“只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点”。比如说,
可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要
发送特定优先级别的消息时,就要使用等号限定符。
    就像它在编程时的用法一样,等号意味着等于且仅等于。叹号(!)的含义是“把本项服务生成的所有日志
消息都发送到操作动作指定的地点,但本优先级的消息不 包括在内”。比如说,这条syslog配置行将把除info
优先级以外的所有消息发送到/var/log/mail文件里:
   
   mail.*;mail.!info/var/log/mail
    在这个例子里,“mail.*”将发送所有的消息,但“mail.!info”却把info优先级的消息排除在外。就像它在编程时的用法一样,叹号意味着“非”。
   mail.*   /var/log/mail
  
   mail.=warn  /var/log/message
     在这个例子里,“mail.*”将发送所有的消息,但“mail.=warn”却把mail中的warn的消息单独记录在
/var/log/message中。

6.6.2.2 登陆文件的安全设定
    可以将syslog记录的文件利用chattr设定a属性,这样使这个文件只能新增而无法删除.
6.6.2.3 登陆文件的轮替 :logrotate
    登陆文件的轮替是在规定的时间到了后,进行日志文件的轮替行为.即这个logrotate程序是挂在cron下进
行的.
 
    logrotate程序的参数配置文件:/etc/logrotate.conf  /etc/logrotate.d 
    logrotate周期性地旋转日志文件,可以周期性地把每个日志文件重命名成一个备份名字,然后让它的守护
进程开始使用一个日志文件的新的拷贝。这就是为什么在/var/log/下看到许多诸如maillog、maillog.1、
maillog.2、boot.log.1、boot.log.2之类的文件名。它由一个配置文件驱动,该文件是/etc/logroatate.
conf,
     Red Hat Linux 缺省安装的文件内容是:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# send errors to root
errors root
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# system-specific logs may be configured here
缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。
第三行
weekly 指定所有的日志文件每周转储一次。
第五行
rotate 4 指定转储文件的保留 4份。
第七行
errors root 指定错误信息发送给root。
第九行
create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和原来的文件一样的权限。
第11行 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。
三、使用include 选项读取其他配置文件
include 选项允许系统管理员把分散到几个文件的转储信息,集中到一个
主要的配置文件。当 logrotate 从logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。
第13行 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d 目录。
include 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d 。
典型的应用有:apache, linuxconf, samba, cron 以及syslog。
这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以实现日志的转存.
6.6.3 登陆文件分析 :dmesg;last