系统服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。我们把这些应用程序称作服务,也就是 Service。不过,守护进程( Daemon)":为了实现服务、功能的进程。比如,我们的 apache 服务就是服务(Service),它是用来实现 Web 服务的。那么,启动 apache 服务的进程是哪个进程呢?就是 httpd 这个守护进程(Daemon)。也就是说,**守护进程就是服务在后台运行的真实进程。**可以把服务与守护进程等同起来。在 Linux 中就是通过启动 httpd 进程来启动 apache 服务的,可以把 httpd 进程当作 apache 服务的别名来理解。
服务的分类:Linux 中的服务按照安装方法不同可以分为 RPM 包默认安装的服务和源码包安装的服务两大类。其中,RPM 包默认安装的服务又因为启动与自启动管理方法不同分为独立的服务和基于 xinetd 的服务。
Linux 中常见的软件包有两种:一种是 RPM 包;另一种是源码包。那么,通过 RPM 包安装的系统服务就是 RPM 包默认安装的服务(因为 Linux 光盘中全是 RPM 包,Linux 系统也是通过 RPM 包安装的,所以我们把 RPM 包又叫作系统默认包),通过源码包安装的系统服务就是源码包安装的服务。源码包是开源的,自定义性强,通过编译安装更加适合系统,但是安装速度较慢,编译时容易报错。RPM 包是经过编译的软件包,安装更快速,不易报错,但不再是开源的。这些特点都是软件包本身的特点
RPM包和源码包安装到Linux 系统中时,两者安装位置不同,源码包安装到我们手工指定的位置当中,而 RPM 包安装到系统默认位置当中(可以通过"rpm -ql 包名"命令查询)。也就是说,RPM 包安装到系统默认位置,可以被服务管理命令识别;但是源码包安装到手工指定位置,当然就不能被服务管理命令识别了(可以手工修改为被服务管理命令识别)。所以,RPM 包默认安装的服务和源码包安装的服务的管理方法不同,我们把它们当成不同的服务分类。服务分类说明如下。RPM 包默认安装的服务。这些服务是通过 RPM 包安装的,可以被服务管理命令识别。
这些服务又可以分为两种:
源码包安装的服务。这些服务是通过源码包安装的,所以安装位置都是手工指定的。由于不能被系统中的服务管理命令直接识别,所以这些服务的启动与自启动方法一般都是源码包设计好的。每个源码包的启动脚本都不一样,一般需要查看说明文档才能确定。
查询已经安装的服务和区分服务:知道 Linux 服务的分类,那如何区分这些服务。首先要区分 RPM 包默认安装的服务和源码包安装的服务。源码包安装的服务是不能被服务管理命令直接找到的,而且一般会安装到 /usr/local/ 目录中。也就是说,在 /usr/local/ 目录中的服务都应该是通过源码包安装的服务。RPM 包默认安装的服务都会安装到系统默认位置,所以是可以被服务管理命令(如 service、chkconfig)识别的。其次,在 RPM 包默认安装的服务中怎么区分独立的服务和基于 xinetd 的服务?这就要依靠 chkconfig 命令了。chkconfig 是管理 RPM 包默认安装的服务的自启动的命令,这里仅利用这条命令的查看功能。使用这条命令还能看到 RPM 包默认安装的所有服务。命令格式如下:
[root@localhost ~]# chkconfig --list [服务名]
[root@CncLucZK ~]# chkconfig --listNote: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd configuration.If you want to list systemd services use 'systemctl list-unit-files'.To see services enabled on particular target use'systemctl list-dependencies [target]'.bt 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@CncLucZK ~]# rpm -q xinetd
package xinetd is not installed
[root@CncLucZK ~]# yum -y install xinetd
...
Installed:xinetd-2:2.3.15-24.el8.x86_64 Complete!
#xinetd超级守护进程
注意,在 Linux 中基于 xinetd 的服务越来越少,原先很多基于 xinetd 的服务在新版本的 Linux 中已经变成了独立的服务。安装完 xinetd 超级守护进程之后,我们再查看一下,命令如下:
[root@CncLucZK ~]# chkconfig --listNote: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd configuration.If you want to list systemd services use 'systemctl list-unit-files'.To see services enabled on particular target use'systemctl list-dependencies [target]'.bt 0:off 1:off 2:on 3:on 4:on 5:on 6:offxinetd based services:chargen-dgram: offchargen-stream: offdaytime-dgram: offdaytime-stream: offdiscard-dgram: offdiscard-stream: offecho-dgram: offecho-stream: offtcpmux-server: offtime-dgram: offtime-stream: off
服务是给系统提供功能的,在系统中除了有系统服务,还有网络服务。而每个网络服务都有自己的端口,一般端口号都是固定的。IP 地址是计算机在互联网上的地址编号,每台联网的计算机都必须有自己的 IP 地址,而且必须是唯一的,这样才能正常通信。也就是说,在互联网上是通过 IP 地址来确定不同计算机的位置的。知道了一台服务器的 IP 地址,我们就可以找到这台服务器。但是这台服务器上有可能搭建了多个网络服务,比如 WWW 服务、FTP 服务、Mail 服务,那么我们到底需要服务器为我们提供哪个网络服务呢?这时就要靠端口(Port)来区分了,因为每个网络服务对应的端口都是固定的。WWW 服务对应的端口是 80,FTP 服务对应的端口是 20 和 21,Mail 服务对应的端口是 25 和 110。
为了统一整个互联网的端口和网络服务的对应关系,以便让所有的主机都能使用相同的机制来请求或提供服务,同一个服务使用相同的端口,这就是协议。
计算机中的协议主要分为两大类:
这两种协议都支持 216,也就是 65535 个端口。这么多端口怎么记忆呢?系统给我们提供了服务与端口的对应文件 /etc/services。 查看—下:
[root@CncLucZK ~]# cat /etc/services
....
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
# http://www.iana.org/assignments/port-numbers
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Pro
# 24 - private mail system
smtp 25/tcp mail
smtp 25/udp mail
# unfortunately the poppassd (Eudora) uses a port which has already
# been assigned to a different service. We list the poppassd as an
#3com-tsmux 106/tcp poppassd
#3com-tsmux 106/udp poppassd
pop2 109/tcp pop-2 postoffice # POP version 2
pop2 109/udp pop-2
pop3 110/tcp pop-3 # POP version 3
pop3 110/udp pop-3...
网络服务的端口也能够修改,不过一旦修改了端口,那么客户机在访问服务器时很难知道服务器对应的端口是什么,也就不能正确地获取服务了。所以,除非在实验环境下,否则不要修改网络服务对应的端口。
[root@localhost ~]# netstat 选项
[root@CncLucZK ~]# netstat -tulnp
#列出系统中所有已经启动的服务(已经监听的端口),但不包含已经连接的网络服务
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1337/sshd
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 920/python3
tcp6 0 0 :::33060 :::* LISTEN 1364/mysqld
tcp6 0 0 :::3306 :::* LISTEN 1364/mysqld
tcp6 0 0 :::80 :::* LISTEN 1314292/httpd
udp 0 0 172.17.0.3:68 0.0.0.0:* 1174/NetworkManager
udp 0 0 127.0.0.1:323 0.0.0.0:* 798/chronyd
udp6 0 0 ::1:323 :::* 798/chronyd
执行这条命令会看到服务器上所有已经开启的端口,也就是说,通过这些端口就可以知道当前服务器上开启了哪些服务。
[root@CncLucZK ~]# netstat -anp
#查看所有的网络连接,包括已连接的网络服务、监听的网络服务和Socket套接字
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1337/sshd
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 920/python3
tcp 0 0 172.17.0.3:8888 107.172.214.60:47757 ESTABLISHED 920/python3
tcp 0 232 172.17.0.3:22 110.19.110.72:8384 ESTABLISHED 2101519/sshd: root
tcp 0 0 172.17.0.3:8888 192.99.5.174:47618 ESTABLISHED 920/python3
tcp 0 0 172.17.0.3:41522 169.254.0.55:8080 TIME_WAIT -
tcp 0 0 172.17.0.3:40764 169.254.0.55:5574 ESTABLISHED 2064/YDService
tcp6 0 0 :::33060 :::* LISTEN 1364/mysqld
tcp6 0 0 :::3306 :::* LISTEN 1364/mysqld
tcp6 0 0 :::80 :::* LISTEN 1314292/httpd
udp 0 0 172.17.0.3:68 0.0.0.0:* 1174/NetworkManager
udp 0 0 127.0.0.1:323 0.0.0.0:* 798/chronyd
udp6 0 0 ::1:323 :::* 798/chronyd
#Socket套接字输出
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] SEQPACKET LISTENING 15363 1/systemd /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17440 1/systemd /var/run/.heim_org.h5l.kcm-socket
unix 2 [ ACC ] STREAM LISTENING 17445 1/systemd /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 7119164 1314293/httpd /etc/httpd/run/cgisock.1314292
unix 2 [ ACC ] STREAM LISTENING 17444 1/systemd @ISCSID_UIP_ABSTRACT_NAMESPACE
unix 2 [ ] DGRAM 17760 798/chronyd /var/run/chrony/chronyd.sock
unix 2 [ ] DGRAM 11519341 2101530/systemd /run/user/0/systemd/notify
unix 2 [ ACC ] STREAM LISTENING 11519345 2101530/systemd /run/user/0/systemd/private
unix 2 [ ACC ] STREAM LISTENING 11519351 2101530/systemd /run/user/0/bus
unix 2 [ ACC ] STREAM LISTENING 26709 1364/mysqld /var/lib/mysql/mysqlx.sock
...
Active Bluetooth connections (servers and established)
Proto Destination Source State PSM DCID SCID IMTU OMTU Security
Proto Destination Source State Channel
使用"netstat -an"命令查看到的这些 Socke 套接字虽然不是网络服务,但是同样会占用端口,并在网络中传递数据。
参考文献:
Linux系统服务及其分类