Linux学习-61-Linux系统服务管理

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-61-Linux系统服务管理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

14 Linux系统服务管理

  • 系统服务:服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。Linux 中常见的服务有那些,这些服务怎么分类,服务如何启动,服务如何自启动,服务如何查看?这都是我们需要知道的。 Linux 中服务的分类比较多,而且每种服务又有多种启动和自启动方法,所以容易混淆。同时,常见网络服务的端口号也是必须掌握的基础知识。

14.1 Linux系统服务及其分类

  • 系统服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。我们把这些应用程序称作服务,也就是 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 中的大多数服务都是独立的服务,如 apache 服务、FTP 服务、Samba 服务等。
    • 基于 xinetd 的服务:这种服务就不能独立启动了,而要依靠管理服务来调用。这个负责管理的服务就是 xinetd 服务。xinetd 服务是系统的超级守护进程,其作用就是管理不能独立启动的服务。当有客户端请求时,先请求 xinetd 服务,由 xinetd 服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动 xinetd 服务,而其他基于 xinetd 的服务只有在需要时才被启动,不会占用过多的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以响应时间相对较长。
  • 源码包安装的服务。这些服务是通过源码包安装的,所以安装位置都是手工指定的。由于不能被系统中的服务管理命令直接识别,所以这些服务的启动与自启动方法一般都是源码包设计好的。每个源码包的启动脚本都不一样,一般需要查看说明文档才能确定。

  • 查询已经安装的服务和区分服务:知道 Linux 服务的分类,那如何区分这些服务。首先要区分 RPM 包默认安装的服务和源码包安装的服务。源码包安装的服务是不能被服务管理命令直接找到的,而且一般会安装到 /usr/local/ 目录中。也就是说,在 /usr/local/ 目录中的服务都应该是通过源码包安装的服务。RPM 包默认安装的服务都会安装到系统默认位置,所以是可以被服务管理命令(如 service、chkconfig)识别的。其次,在 RPM 包默认安装的服务中怎么区分独立的服务和基于 xinetd 的服务?这就要依靠 chkconfig 命令了。chkconfig 是管理 RPM 包默认安装的服务的自启动的命令,这里仅利用这条命令的查看功能。使用这条命令还能看到 RPM 包默认安装的所有服务。命令格式如下:

[root@localhost ~]# chkconfig --list [服务名]
  • 选项:
    • –list:列出 RPM 包默认安装的所有服务的自启动状态;
[root@CncLucZK ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd 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

  • 这条命令的第一列为服务的名称,后面的 0~6 代表在不同的运行级别中这个服务是否开启时自动启动。这些服务都是独立的服务,因为它们不需要依赖其他任何服务就可以在相应的运行级别启动或自启动。但是没有看到基于 xinetd 的服务,那是因为系统中默认没有安装 xinetd 这个超级守护进程,需要我们手工安装。安装命令如下:
[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 --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd 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

xinetd based services:
	chargen-dgram: 	off
	chargen-stream:	off
	daytime-dgram: 	off
	daytime-stream:	off
	discard-dgram: 	off
	discard-stream:	off
	echo-dgram:    	off
	echo-stream:   	off
	tcpmux-server: 	off
	time-dgram:    	off
	time-stream:   	off
  • 在刚刚的独立的服务之下出现了一些基于 xinetd 的服务,这些服务没有自己的运行级别,因为它们不是独立的服务,到底在哪个运行级别可以自启动,则要看 xinetd 服务是在哪个运行级别自启动的。

14.2 linux端口及查询方法

  • 服务是给系统提供功能的,在系统中除了有系统服务,还有网络服务。而每个网络服务都有自己的端口,一般端口号都是固定的。IP 地址是计算机在互联网上的地址编号,每台联网的计算机都必须有自己的 IP 地址,而且必须是唯一的,这样才能正常通信。也就是说,在互联网上是通过 IP 地址来确定不同计算机的位置的。知道了一台服务器的 IP 地址,我们就可以找到这台服务器。但是这台服务器上有可能搭建了多个网络服务,比如 WWW 服务、FTP 服务、Mail 服务,那么我们到底需要服务器为我们提供哪个网络服务呢?这时就要靠端口(Port)来区分了,因为每个网络服务对应的端口都是固定的。WWW 服务对应的端口是 80,FTP 服务对应的端口是 20 和 21,Mail 服务对应的端口是 25 和 110。

  • 为了统一整个互联网的端口和网络服务的对应关系,以便让所有的主机都能使用相同的机制来请求或提供服务,同一个服务使用相同的端口,这就是协议。

  • 计算机中的协议主要分为两大类:

    • 面向连接的可靠的TCP协议(Transmission Control Protocol,传输控制协议);
    • 面向无连接的不可靠的UDP协议(User Datagram Protocol,用户数据报协议);
  • 这两种协议都支持 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

...

网络服务的端口也能够修改,不过一旦修改了端口,那么客户机在访问服务器时很难知道服务器对应的端口是什么,也就不能正确地获取服务了。所以,除非在实验环境下,否则不要修改网络服务对应的端口。

  • 查询系统中已经启动的服务:每个网络服务对应的端口是固定的,可以通过查询服务器中开启的端口,来判断当前服务器开启了哪些服务,虽然判断服务器中开启的服务还有其他方法(如通过ps命令),但是通过端口的方法查看最为准确。命令格式如下:
[root@localhost ~]# netstat 选项
  • 选项:
    • -a:列出系统中所有网络连接,包括已经连接的网络服务、监听的网络服务和 Socket 套接字;
    • -t:列出 TCP 数据;
    • -u:列出 UDF 数据;
    • -l:列出正在监听的网络服务(不包含已经连接的网络服务);
    • -n:用端口号来显示而不用服务名;
    • -p:列出该服务的进程 ID (PID);
[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 

执行这条命令会看到服务器上所有已经开启的端口,也就是说,通过这些端口就可以知道当前服务器上开启了哪些服务。

  • 解释一下命令的执行结果:
    • Proto:数据包的协议。分为 TCP 和 UDP 数据包;
    • Recv-Q:表示收到的数据已经在本地接收缓冲,但是还没有被进程取走的数据包数量;
    • Send-Q:对方没有收到的数据包数量;或者没有 Ack 回复的,还在本地缓冲区的数据包数量;
    • Local Address:本地 IP : 端口。通过端口可以知道本机开启了哪些服务;
    • Foreign Address:远程主机:端口。也就是远程是哪个 IP、使用哪个端口连接到本机。由于这条命令只能查看监听端口,所以没有 IP 连接到到本机;
    • State:连接状态。主要有已经建立连接(ESTABLISED)和监听(LISTEN)两种状态,当前只能查看监听状态;
    • PID/Program name:进程 ID 和进程命令;
[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”命令能査看更多的信息,在 Stated 中也看到了已经建立的连接(ESTABLISED)。这是 ssh 远程管理命令产生的连接,ssh 对应的端口是 22。还看到了 Socket 套接字。在服务器上,除网络服务可以绑定端口,用端口来接收客户端的请求数据外,系统中的网络程序或我们自己开发的网络程序也可以绑定端口,用端口来接收客户端的请求数据。这些网络程序就是通过 Socket 套接字来绑定端口的。也就是说,网络服务或网络程序要想在网络中传递数据,必须利用 Socke 套接字绑定端口,并进行数据传递。

使用”netstat -an”命令查看到的这些 Socke 套接字虽然不是网络服务,但是同样会占用端口,并在网络中传递数据。

  • Socket 套接字的输出各字段值:
    • Proto:协议,一般是unix;
    • RefCnt:连接到此Socket的进程数量;
    • Flags:连接标识;
    • Type:Socket访问类型;
    • State:状态,LISTENING表示监听,CONNECTED表示已经建立连接;
    • I-Node:程序文件的 i 节点号;
    • Path:Socket 程序的路径,或者相关数据的输出路径;

参考文献:
Linux系统服务及其分类

下一篇:Linux学习-62-独立服务和基于xinetd服务的管理方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123730.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!