第十八章、认识系统服务 (daemons)
最近升级日期:2009/09/14

大标题的图示系统开启的服务

好了,现在假设你已经知道了 daemons 的启动文件放置的目录,也知道了服务与 port 的对应,那么要如何查询目前系统上面已经启动了的服务呢?不要再打混了!已经学过了 pstop 应该要会应用才对耶!没错,可以使用 ps 与 top 来找寻已经启动了的服务的程序与他的 PID 呢!不过,我们怎么知道该服务启动的 port 是哪一个?呵呵!好问题!可以直接使用 netstat 这个网络状态观察命令来检查我们的 port 呢!甚至他也可以帮我们找到该 port 的程序呢 (PID)!这个命令的相关用途,我们在 第十七章程序管理已经谈过了,不清楚的话请回去查一查先~这里仅介绍如何使用喔~


小标题的图示观察系统启动的服务

观察系统已启动的服务方式很多,不过,我们最常使用 netstat 来观察。基本上,以 ps 来观察整个系统上面的服务是比较妥当的,因为他可以将全部的 process 都找出来。不过,我们比较关心的还是在于有启动网络监听的服务啊, 所以鸟哥会比较喜欢使用 netstat 来查阅啦。

范例一:找出目前系统开启的『网络服务』有哪些?
[root@www ~]# netstat -tulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address       Foreign Address State  PID/Program name
tcp        0      0 www.vbird.tsai:2208 *:*             LISTEN 4575/hpiod
tcp        0      0 *:737               *:*             LISTEN 4371/rpc.statd
tcp        0      0 *:sunrpc            *:*             LISTEN 4336/portmap
tcp        0      0 www.vbird.tsai:ipp  *:*             LISTEN 4606/cupsd
tcp        0      0 www.vbird.tsai:smtp *:*             LISTEN 4638/sendmail: acce
tcp        0      0 *:ssh               *:*             LISTEN 4595/sshd
udp        0      0 *:filenet-tms       *:*                    4755/avahi-daemon:
....(底下省略)....
# 看一下上头, Local Address 的地方会出现主机名与服务名称的,要记得的是,
# 可以加上 -n 来显示 port number ,而服务名称与 port 对应则在 /etc/services

范例二:找出所有的有监听网络的服务 (包含 socket 状态):
[root@www ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State   PID/Program name
tcp        0      0 127.0.0.1:2208 0.0.0.0:*        LISTEN  4575/hpiod
....(中间省略)....
Active UNIX domain sockets (only servers)
Proto RefCnt Flags   Type   State     I-Node PID/Program name Path
....(中间省略)....
unix  2      [ ACC ] STREAM LISTENING 10624  4701/xfs         /tmp/.font-unix/fs7100
unix  2      [ ACC ] STREAM LISTENING 12824  5015/Xorg        /tmp/.X11-unix/X0
unix  2      [ ACC ] STREAM LISTENING 12770  4932/gdm-binary  /tmp/.gdm_socket
....(以下省略)....
# 仔细的瞧一瞧啊,除了原有的网络监听 port 之外,还会有 socket 显示在上面,
# 我们可以清楚的知道有哪些服务被启动呢!

范例三:观察所有的服务状态
[root@www ~]# service --status-all
# 这个命令有趣喔!本章之前有谈过这命令,自行查询啰!

利用 netstat 可以取得很多跟网络有关的服务信息,透过这个命令,我们可以轻易的了解到网络的状态, 并且可以透过 PID 与 kill 的相关功能,将有问题的数据给他剔除说~ 当然啦,要更详细的取得 PPID 的话,才能够完全的抵挡有问题的程序啦!

另外,除了已经存在系统当中的 daemon 之外,如何在一启动就完整的启动我们所需要的服务呢? 底下我们就来谈一谈 chkconfig 及 ntsysv 这两个好用的东西!


小标题的图示配置启动后立即启动服务的方法

就如同上面提到的,我们使用 netstat 仅能观察到目前已经启动的 daemon ,使用 service 这个命令或者是『 /etc/init.d/* start 』的方法则仅能在目前的环境下立即启动某个服务而已。 那么重新启动后呢?该服务是否还是继续的自动启动?这个时候我们就得要了解一下,到底我的 Linux 主机是怎么启动的呢?

  1. 打开计算机电源,开始读取 BIOS 并进行主机的自我测试;
  2. 透过 BIOS 取得第一个可启动装置,读取主要启动区 (MBR) 取得启动管理程序;
  3. 透过启动管理程序的配置,取得 kernel 并加载内存且侦测系统硬件;
  4. 核心主动呼叫 init 程序;
  5. init 程序开始运行系统初始化 (/etc/rc.d/rc.sysinit)
  6. 依据 init 的配置进行 daemon start (/etc/rc.d/rc[0-6].d/*)
  7. 加载本机配置 (/etc/rc.d/rc.local)

关于更多启动流程的详细说明,我们会在第二十章时再来跟大家说明。 由上面的流程你可以看到系统服务在启动时就可以被启动的地方是在第六个步骤,而事实上第六个步骤就是以不同的运行等级呼叫不同的服务啦! 那么什么叫做运行等级呢?

我们在启动 Linux 系统时,可以进入不同的模式喔,这模式我们称为运行等级 (run level)。不同的运行等级有不同的功能与服务, 目前你先知道正常的运行等级有两个,一个是具有 X 窗口接口的 run level 5 ,另一个则是纯文本界面的 run level 3。 由于默认我们是以图形接口登陆系统的,因此可以想象得到的是,我们应该是在 run level 5 的环境中啦! 那你怎么知道 run level 5 有哪些服务默认可以启动呢?这就得要使用特殊的命令来查询啊!


  • chkconfig: 管理系统服务默认启动启动与否
[root@www ~]# chkconfig --list [服务名称]
[root@www ~]# chkconfig [--level [0123456]] [服务名称] [on|off]
选项与参数:
--list :仅将目前的各项服务状态栏出来
--level:配置某个服务在该 level 下启动 (on) 或关闭 (off)

范例一:列出目前系统上面所有被 chkconfig 管理的服务
[root@www ~]# chkconfig --list |more
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:off   3:on    4:on    5:on    6:off
....(中间省略)....
yum-updatesd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

xinetd based services:  <==底下为 super daemon 所管理的服务
        chargen-dgram:  off
        chargen-stream: off
....(底下省略)....
# 你可以发现上面的表格有分为两个区块,一个具有 1, 2, 3 等数字,一个则被 xinetd 
# 管理。没错!从这里我们就能够发现服务有 stand alone 与 super daemon 之分。

范例二:显示出目前在 run level 3 为启动的服务
[root@www ~]# chkconfig --list | grep '3:on'

范例三:让 atd 这个服务在 run level 为 3, 4, 5 时启动:
[root@www ~]# chkconfig --level 345 atd on

瞧! chkconfig 是否很容易管理我们所需要的服务呢?真的很方便啦~ 你可以轻松的透过 chkconfig 来管理 super daemon 的服务喔!另外,你得要知道的是, chkconfig 仅是配置启动时默认会启动的服务而已, 所以该服务目前的状态如何是不知道的。我们举个底下的例子来说明好了:

范例四:先观察 httpd ,再观察默认有无启动,之后以 chkconfig 配置为默认启动
[root@www ~]# /etc/init.d/httpd status
httpd 已停止  <==根本就没有启动

[root@www ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
# 原因是默认并没有启动啊!

[root@www ~]# chkconfig httpd on; chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 已经配置为『启动默认启动』了,再来观察看看到底该服务启动没?

[root@www ~]# /etc/init.d/httpd status
httpd 已停止
# 哈!竟然还是没有启动喔!怎么会这样啊?

上面的范例四并没有启动 httpd 的原因很简单,因为我们并没有使用 /etc/init.d/httpd start 嘛!我们仅是配置启动时启动而已啊!那我们又没有重新启动,所以当然使用 chkconfig 并不会导致该服务立即被启动!也不会让该服务立即被关闭,而是只有在启动时才会被加载或取消加载而已喔。而既然 chkconfig 可以配置启动是否启动,那么我们能不能用来管理 super daemon 的启动与关闭呢?非常好!我们就来试看看底下的案例:

范例五:查阅 rsync 是否启动,若要将其关闭该如何处理?
[root@www ~]# /etc/init.d/rsync status
-bash: /etc/init.d/rsync: No such file or directory
# rsync 是 super daemon 管理的,所以当然不可以使用 stand alone 的启动方式来观察

[root@www ~]# netstat -tlup | grep rsync
tcp  0 0 192.168.201.110:rsync  *:*     LISTEN     4618/xinetd
tcp  0 0 www.vbird.tsai:rsync   *:*     LISTEN     4618/xinetd

[root@www ~]# chkconfig --list rsync
rsync           on   <==默认启动呢!将它处理成默认不启动吧

[root@www ~]# chkconfig rsync off; chkconfig --list rsync
rsync           off  <==看吧!关闭了喔!现在来处理一下 super daemon 的东东!

[root@www ~]# /etc/init.d/xinetd restart; netstat -tlup | grep rsync

最后一个命令你会发现原本 rsync 不见了!这样是否很轻易的就能够启动与关闭你的 super daemon 管理的服务呢!


  • ntsysv: 类图形接口管理模式

基本上, chkconfig 真的已经很好用了,不过,我们的 CentOS 还有提供一个更不错用的, 那就是 ntsysv 了!注意喔, chkconfig 很多的 distributions 都存在,但是 ntsysv 则是 Red Hat 系统特有的!

[root@www ~]# ntsysv [--level <levels>]
选项与参数:
--level :后面可以接不同的 run level ,例如 ntsysv --level 35

一般我们都是直接输入 ntsysv 即可进入管理画面了,整个画面如下图所示:

ntsysv 的运行示意图
图 4.2.1、 ntsysv 的运行示意图

上图中的中间部分是每个服务默认启动是否会启动的配置值,若中括号内出现星号 (*) 代表默认启动会启动,否则就是不会在启动时启动啦。 你可以使用上下键来移动中括号内的光标到你想要变更的那个服务上头,然后按下空格键就能够选取或取消啰。如果一切都选择完毕后, 你可以使用 [tab] 按键来移动光标到 [OK] [Cancel] 等按钮上面,当然啦,按下 [Ok] 就是确认你的选取会生效啰。 总结一下上述的按钮功能:

  • 上下键: 可以在中间的方框当中,在各个服务之间移动;
  • 空格键: 可以用来选择你所需要的服务,前面的 [*] 会有 * 出现;
  • tab 键: 可以在方框、OK、Cancel 之间移动;
  • [F1]键: 可以显示该服务的说明
ntsysv 的运行示意图
图 4.2.2、 ntsysv 的运行示意图

上图是鸟哥将光标游动到 atd 这个服务上头后,再按下 [F1] 所出现的结果,所以啰,你可以透过 ntsysv 去观察默认启动启动的服务, 还能够查阅该服务的基本功能为何,这样就能够稍微厘清一下该服务是否需要存在啰!这样理解了吧!


  • chkconfig: 配置自己的系统服务
[root@www ~]# chkconfig [--add|--del] [服务名称]
选项与参数:
--add :添加一个服务名称给 chkconfig 来管理,该服务名称必须在 /etc/init.d/ 内
--del :删除一个给 chkconfig 管理的服务

现在你知道 chkconfig 与 ntsysv 是真好用的东西,那么如果我自己写了一个程序并且想要让该程序成为系统服务好让 chkconfig 来管理时, 可以怎么进行呢?只要将该服务加入 init 可以管理的 script 当中,亦即是 /etc/init.d/ 当中即可。 举个例子,我们在 /etc/init.d/ 里面创建一个 myvbird 文件,该文件仅是一个简单的服务范例,基本上,没有任何用途.... 对于该文件的必须性是这样的:

  • myvbird 将在 run level 3 及 5 启动;
  • myvbird 在 /etc/rc.d/rc[35].d 当中启动时,以 80 顺位启动,以 70 顺位结束。

关于所谓的顺位问题,我们会在第二十章介绍,这里你先看看即可。 你该如何进行呢?可以这样做:

[root@www ~]# vim /etc/init.d/myvbird
#!/bin/bash
# chkconfig: 35 80 70
# description: 没啥!只是用来作为练习之用的一个范例
echo "Nothing"

这个文件很好玩喔!你可以参考你自己系统上面的文件;基本上,比较重要的是第二行,他的语法是: 『 chkconfig: [runlevels] [启动顺位] [停止顺位] 』其中, runlevels 为不同的 run level 状态,启动顺位 (start number) 与 结束顺位 (stop number) 则是在 /etc/rc.d/rc[35].d 内创建以 S80myvbird 及 K70myvbird 为档名的配置方式!

[root@www ~]# chkconfig --list myvbird
service myvbird supports chkconfig, but is not referenced in any 
runlevel (run 'chkconfig --add myvbird')
# 尚未加入 chkconfig 的管理机制中!所以需要再动点手脚

[root@www ~]# chkconfig --add myvbird; chkconfig --list myvbird
myvbird         0:off   1:off   2:off   3:on    4:off   5:on    6:off
# 看吧!加入了 chkconfig 的管理当中了!
# 很有趣吧!如果要将这些数据都删除的话,那么就下达这样的情况:

[root@www ~]# chkconfig --del myvbird
[root@www ~]# rm /etc/init.d/myvbird

chkconfig 真的是个不错用的工具吧!尤其是当你想要自己创建自己的服务时! ^_^


小标题的图示CentOS 5.x 默认启动的服务简易说明

随着 Linux 上面软件支持性越来越多,加上自由软件蓬勃的发展,我们可以在 Linux 上面用的 daemons 真的越来越多了。所以,想要写完所有的 daemons 介绍几乎是不可能的,因此,鸟哥这里仅介绍几个很常见的 daemons 而已, 更多的信息呢,就得要麻烦你自己使用 ntsysv 或者是 vi /etc/init.d/* 里面的文件去瞧一瞧啰~ ^_^! 底下的建议主要是针对 Linux 单机服务器的角色来说明的,不是桌上型的环境喔!

CentOS 5.x 默认启动的服务内容
服务名称功能简介
acpid(系统)高级电源管理的接口,这是一个新的电源管理模块, 可以监听来自核心层的电源相关事件而予以回应。 CentOS 的配置文件在 /etc/acpi/events/power.conf 中,默认仅有当你按下 power 按钮时,系统会自动关机喔!(注1)
anacron
(可关闭)
(系统)与循环型的工作排程 cron 有关,可在排程过期后还可以唤醒来继续运行, 配置文件在 /etc/anacrontab。详情请参考第十六章的说明。
apmd
(可关闭)
(系统)配置文件在 /etc/sysconfig/apmd ,也是电源管理模块啦! 可侦测电池电量,当电池电力不足时,可以自动关机以保护计算机主机。
atd(系统)单一的例行性工作排程,详细说明请参考第十六章。 抵挡机制的配置文件在 /etc/at.{allow,deny} 喔!
auditd(系统)还记得前一章的 SELinux 所需服务吧? 这就是其中一项,可以让系统需 SELinux 稽核的信息写入 /var/log/audit/audit.log 中。若此服务没有启动,则信息会传给 syslog 管理。
autofs
(可关闭)
(系统)可用来自动挂载来自网络上的其他服务器所提供的网络驱动器机 (一般是 NFS)。 不过我们是单机系统,所以目前还没必要这个服务。
avahi-daemon
(可关闭)
(系统)也是一个客户端的服务,可以透过 Zeroconf 自动的分析与管理网络。 Zeroconf 较常用在笔记型计算机与行动装置上,所以我们可以先关闭他啦!(注2)
bluetooth
(可关闭)
(系统)用在蓝芽装置的搜寻上,如果 Linux 是当作服务器使用时, 这个服务可以暂时关闭也没关系!
cpuspeed(系统)可以用来管理 CPU 的频率功能。若系统闲置时,此项功能可以自动的降低 CPU 频率来节省电量与降低 CPU 温度喔!
crond(系统)系统配置文件为 /etc/crontab,详细数据可参考第十六章的说明。
cups
(可关闭)
(网络)用来管理打印机的服务,可以提供网络联机的功能,有点类似打印服务器的功能哩! 你可以在 Linux 本机上面以浏览器的 http://localhost:631 来管理打印机喔!由于我们目前没有打印机,所以可以暂时关闭他。
firstboot
(可关闭)
(系统)还记得系统第一次进入图形接口还需要进行一些额外的配置吗? 就是这个服务的帮忙啦!既然已经安装妥当,现在你可以将这个服务关闭啰。
gpm(系统)在 tty1~tty6 的环境下你竟然可以使用鼠标功能来复制贴上,就是这个 gpm 提供的能力啦!
haldaemon
(可关闭)
(系统)通常用在壁纸计算机的环境中,可侦测类似 usb 的装置呢! 不过,如果是服务器环境,这个服务倒是可以关闭啦!如果是壁纸计算机,那最好可以启动啰!(注3)
hidd
(可关闭)
(系统)也是蓝芽服务的功能啦!可以提供键盘、鼠标等蓝芽装置的侦测哩! 须搭配 bluetooth。服务器环境倒是不需要此项服务。
hplip
(可关闭)
(系统)主要是针对 HP 的打印机功能所开发的脚本服务,如果你的环境中并没有 HP 相关设备,这个服务就给他关闭吧!
ip6tables
(可关闭)
(网络)是针对本机的防火墙功能!这个防火墙主要是针对 IPv6 的版本, 如果你的网络环境并没有 IPv6 的设备,那么这个服务是可以关闭的。
iptables(网络)本机防火墙功能,是核心支持的呢!所以功能与效能都非常棒!当然不能够取消啊! 只是配置上就得要努力研究啦!我们会在服务器篇介绍网络相关信息的。
irqbalance(系统)如果你的系统是多核心的硬件,那么这个服务要启动, 因为它可以自动的分配系统中断 (IRQ) 之类的硬件资源。
isdn
(可关闭)
(网络)ISDN 是一种宽带设备 (调制解调器的一种) ,但是在台湾我们比较常使用 ADSL 及光纤设备, 所以这个服务是可以关闭啦。
kudzu
(可关闭)
(系统)如果你有添加新的硬件时,这个服务可以在启动时自动的侦测硬件, 并且会自动的呼叫相关的配置软件,方便你在启动时就处理好你的硬件啊!
lm_sensors
(可关闭)
(系统)这个服务可以帮你侦测主板的相关侦测芯片,举例来说, 某些主板会主动的侦测 CPU 温度、频率、电压等,这个 lm_sensors 能够将这些温度、频率等数据显示出来喔! 我们会在第二十一章谈这玩意儿。
lvm2-monitor(系统)我们已经谈过 LVM 啰!所以我们当然要启动这个服务比较妥当。
mcstrans(系统)与 SELinux 有关的服务,最好也启动啊!
mdmonitor
(可关闭)
(系统)可以侦测所有软件的状态,暂时似乎也不需要启动这个服务哩!
messagebus
(可关闭)
(系统)可用来沟通各个软件之间的信息,有点类似剪贴簿的感觉。 不过在服务器环境则没有强烈需求就是了。
microcode_ctl
(可关闭)
(系统)Intel 的 CPU 会提供一个外挂的微命令集提供系统运行, 不过,如果你没有下载 Intel 相关的命令集文件,那么这个服务不需要启动的,也不会影响系统运行。(注4)
netfs
(可关闭)
(网络)可以进行网络驱动器机 (NFS, SMB/CIFS) 的挂载与卸除功能。 目前我们尚未使用网络,因此这个服务可以先关闭。
network(网络)提供网络配置的功能,所以一定要启动的啦!
nfslock
(可关闭)
(网络)NFS 为一种 Unix like 的网络驱动器机,但在进行文件的分享时, 为了担心同一文件多重编辑的问题,所以会有这个锁住 (lock) 的服务!可以避免同一个文件被两个不同的人编辑时所造成的文件错误问题。
pcscd
(可关闭)
(系统)智能卡侦测的服务,可以关闭他啦。
portmap(网络)用在远程过程调用的服务,很多服务都使用这个玩意儿来辅助联机的, 因此建议不要取消他,除非你确定你的系统没有使用到任何的 RPC 服务喔!
readahead_early
readahead_later
(可关闭)
(系统)在系统启动的时候可以先将某些程序加载到内存中,以方便快速的加载, 可加快一些启动的速度。
restorecond(系统)利用 /etc/selinux/restorecond.conf 的配置来判断当新建文件时,该文件的 SELinux 类型应该如何还原。需要注意的是,如果你的系统有很多非正规的 SELinux 文件类型配置时,这个 daemon 最好关闭,否则他会将你配置的 type 修改回默认值。
rpcgssd
rpcidmapd
(可关闭)
(网络)与 NFS 有关的客户端功能,在你还没有玩到网络阶段时, 这两个咚咚也能够先取消啦!
sendmail(网络)这就是电子邮件的软件啊!我们想要拥有可寄信的功能时, 这个服务可不能关闭。不过,默认这个服务仅能支持本机的功能,无法收受来自因特网的邮件喔!
setroubleshoot(系统)一定要启动啊!因为这玩意儿可以将你的 SELinux 相关信息记录在 /var/log/messages 里面,非常有帮助喔!
smartd(系统)这个服务可以自动的侦测硬盘状态,如果硬盘发生问题的话, 还能够自动的回报给系统管理员,是个非常有帮助的服务喔!不可关闭他啊!
sshd(网络)这个是远程联机服务器的软件功能, 这个通讯协议比 telnet 好的地方在于 sshd 在传送数据时可以进行加密喔!这个服务不要关闭他啦!
syslog(系统)这个服务可以记录系统所产生的各项信息, 包括 /var/log/messages 内的几个重要的登录档啊。
xfs
(可关闭)
(系统)这个是 X Font Server,主要提供图形接口的字型的一个服务, 如果你不启动 X 窗口的话,那么这个服务可以不启动。但是如果你有需要用到 X 时,一定要启动这玩意儿,否则图形接口是无法启动的喔。
xinetd(系统)就是 super daemon 啊,不必讲了吧 ^_^
yum-updatesd(系统)可以透过 yum 的功能进行软件的在线升级机制, 若有升级的软件释出时,就能够以邮件或者是 syslog 来通知系统管理原来手动升级啊。

上面的服务是 CentOS 5.x 默认有启动的,这些默认启动的服务很多是针对壁纸计算机所设计的,所以啰,如果你的 Linux 主机用途是在服务器上面的话,那么有很多服务是可以关闭的啦!如果你还有某些不明白的服务想要关闭的, 请务必要搞清楚该服务的功能为何喔!举例来说,那个 syslog 就不能关闭,如果你关掉他的话,系统就不会记录登录文件, 那你的系统所产生的警告信息就无法记录起来,你将无法进行 debug 喔。

底下鸟哥继续说明一些可能在你的系统当中的服务,只是默认并没有启动这个服务就是了。只是说明一下, 各服务的用途还是需要您自行查询相关的文章啰。

其他服务的简易说明
服务名称功能简介
dovecot(网络)可以配置 POP3/IMAP 等收受信件的服务,如果你的 Linux 主机是 email server 才需要这个服务,否则不需要启动他啦!
httpd(网络)这个服务可以让你的 Linux 服务器成为 www server 喔!
named(网络)这是领域名服务器 (Domain Name System) 的服务, 这个服务非常重要,但是配置非常困难!目前应该不需要这个服务啦!
nfs(网络)这就是 Network Filesystem,是 Unix-Like 之间互相作为网络驱动器机的一个功能。
ntpd(网络)服务的全名是 Network Time Protocol ,这个服务可以用来进行网络校时, 让你系统的时间永远都是正确的哩!
smb(网络)这个服务可以让 Linux 仿真成为 Windows 上面的网络上的芳邻。 如果你的 Linux 主机想要做为 Windows 客户端的网络驱动器机服务器,这玩意儿得要好好玩一玩。
squid(网络)作为代理服务器的一个服务,可作为一个局域网络的防火墙之用。
vsftpd(网络)作为文件传输服务器 (FTP) 的服务。

 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室