目录

一、简介与分类

1.系统的默认运行级别


2.服务的分类


3.服务与端口

二、服务管理

1.RPM包服务管理


2.源码包服务管理

三、服务管理总结

一、简介与分类

1. 系统的运行级别

1.1 默认运行级别

系统运行级别
0 - 关机
1 - 单用户模式,主要用于系统修复,类似于windows的安全模式
2 - 不完全的命令行模式,不含NFS服务(NFS是Linux之间进行文件共享的服务)
3 - 完全的命令行模式,即标准的字符界面
4 - 系统保留
5 - 图形模式
6 - 重启

1.2 相关命令

[root@localhost~]# runlevel			// 查看系统运行级别
N 3 [root@localhost~]# init n // 可用 init 命令将系统运行级别修改为 n 级别 [root@localhost~]# vi /etc/inittab // 可在该文件中修改系统默认运行级别
id:3:initdefault: # 在CentOS6之前,该文件集成了很多系统启动的相关功能,之后这些相关功能便被分散到系统的各个启动配置文件中了
# 是一个 CentOS 5 和 6 的一个重大区别

2. 服务的分类

2.1 服务管理

系统当中每开启一个服务,都要消耗一定资源,如果能把不需要用到的服务给关掉,则会节省系统资源,提高系统的稳定性和安全性的同时又降低了系统风险。一般我们说对系统进行优化,实际上就是对系统当中的服务进行管理。

2.2 服务分类

根据 Tony 老师的分析,我习惯用 RPM包源码包 来为服务的类型做划分,这样对初学者来说更容易接受,逻辑上更容易区分。而源码包和 RPM 包的区别,在我的另一篇博客上有详细介绍,要看的话可以移步http://www.cnblogs.com/myyd/p/7868608.html

由上图我们可以看到,用 RPM 包安装的服务有可以划分为 独立的服务基于xinetd的服务

2.2.1 RPM 包的服务划分:
  1. 独立的服务:在系统中独立运行并占据一定系统资源服务,是直接在内存中运行的,其优势是响应速度很快,当网络上的客户端对该服务进行访问时,能快速响应;缺点是占用内存和系统相关资源。
  2. 基于xinetd的服务:xinetd服务实际上是一种超级守护进程,即xinetd服务作为一个进程,其管理了很多服务,这些服务并不需要被系统运行,可以直接保存在硬盘中,直到被xinetd服务调用后才进入内存中运行,这些服务就叫做基于xinetd的服务;而基于xinetd的服务被xinetd服务所管理,在客户端对此类服务进行访问时,请求先到达服务器上的xinetd服务,xinetd服务唤醒(调用)基于xinetd的服务后,再由基于xinetd的服务对客户的请求进行响应。其优点是节省内存和系统相关资源。

在我们当前的 Linux 系统中,基于xinetd的服务已经越来越少了,到了 CentOS7 基本上已经淘汰了,CentOS6 中虽然还没淘汰,但是也已经没有多少了。

2.2.2 服务的启动与自启动

服务启动与服务自启动:服务启动顾名思义就是该服务在当前系统中是已经启动了;而服务自启动则代表该服务在下次系统启动时会随着系统启动,与现在是否已经启动无关。

2.2.3 查询服务的命令
[root@localhost~]# chkconfig --list			// 查看系统当前安装了哪些RPM包服务,同时可以看到这些服务的自启动状态

3. 服务与端口

3.1 服务于端口的简介

在网络上,每一台主机或者服务器都对应一个或者多个 IP 地址,这些 IP 地址指定了网络设备在网络中的位置,而端口就是服务器上运行的服务,当我们使用某一台服务器上的某些服务时,就必须在指定 IP 地址的同时指定端口号。如:用户通过 IP 地址找到了某一台服务器,而该台服务器上既搭建了 http 服务,又搭建了 SMTP 和 FTP 服务,那服务器应该提供哪些服务给客户端呢?这就由端口号来决定,如果用户访问的是该 IP 上的 80 号端口,那就是网页服务。所以端口实际上就是传输层向应用层传递数据的一个接口。


常见的服务于端口的对应关系如下图所示:

  1. DNS 既是基于 TCP 协议,也是基于 UDP 协议,在 DNS 服务器之间进行信息同步的时候使用 TCP 协议,而在响应用户的 DNS 请求的时候用 UDP 协议
  2. TCP 和 UDP 是两个不同的传输层协议,两个协议都分别有 0~65535 个端口号,但是一般将某个服务分配给某个协议的某个端口后,另一个协议对应的该端口也被保留起来不对外使用了。
  3. 所以我们一般说服务器上的 HTTP 服务是属于 80 端口,而不会强调 HTTP 协议是基于 TCP 还是 UDP,因为大家都知道这是基于 TCP 协议的服务,而 UDP 的 80 端口没有被分配给其他服务。

以上端口只是比较常见的几个服务所对应的端口,我们说 TCP 和 UDP 都分别有 65536 个端口,那么剩下的端口都是干嘛的?一般来说 10000 以内的端口都是给系统程序预留的,10000 以上的端口可以给用户自定义使用。在 Linux 当中,/etc/services 文件对常规端口的作用全部做了罗列,如果我们不知道某个端口的作用,可以来查看这个文件或者百度。

3.2 netstat 命令

如果我们能知道系统当中开启了哪些端口,就可以知道系统运行了哪些服务。可以使用 netstat 命令来查看:

[root@localhost~]# netstat -tunlp 		// 会列出系统中所有已启动的服务
-t 列出 TCP 服务
-u 列出 UDP 服务
-n 用端口号来显示服务,而不是服务名
-l 列出正在监听的网络服务(不包含已经连接的网络服务)
-p 列出该服务的进程 ID

从上图我们可以看到,第一列是使用的传输层协议;第二三列是发送和缓存队列,如果数值不为 0 则表示该端口比较繁忙;第三四列是本地和对方的 IP 地址+端口号;第五行则是状态。比较有趣的是,我们发现只有 TCP 服务有 LISTEN 状态,而 UDP 没有,这是因为 TCP 是可靠传输,必须要时刻对该端口进行监听,而 UDP 则不用。


netstat -tunl 命令可以看到所有 LISTEN 的服务进程,却不能看到已经建立起了连接(ESTABLISHED)的服务进程,如果我们想要看服务器建立起了哪些连接,可以把选项中的 l 去掉或者用 netstat -an 命令

3.3 命令汇总区分

  1. 查看系统中所有已启动的服务: netstat -tunl
  2. 查看 RPM 包的服务及自启动状态: chkconfig --list

二、服务管理

在对服务进行分类的时候,我们一共分了两大类: RPM 包服务和源码包服务,其中 RPM 包服务又分为独立的服务和基于 xinetd 的服务。我在整理 Linux 知识的博客中反复提到,源码包和 RPM 包在安装后的区别就是安装目录的不同,以此也带来了管理方法上的不同。如下图所示:

下面分别介绍这些服务的管理方法。

1. RPM 包服务管理

其实无论是源码包还是 RPM 包或者是系统命令和自己写的脚本,最原始也是最标准的启动方法是:使用绝对路径。当然了我们在执行系统命令的时候可以在任何位置操作,这是由于环境变量 PATH 的作用。

1.1 独立的服务管理

对于 RPM 包安装的独立的服务,我们有两种启动方法,第一种就是上述的使用绝对路径启动:/etc/init.d/服务名 start|stop|status|restart ;第二种方法是用 service 关键字。一般来说,用 RPM 包安装的服务,其服务名通常在后面加了一个d,如 httpd,这个d一般代表守护进程,可以简单认为 http 服务在 Linux 中就叫做 httpd。

1.1.1 独立服务的启动管理
  1. 对于第一种方法,我们在用 RPM 包安装独立的服务时,都会把服务的管理脚本放在 /etc/init.d/ 目录下,我们只需要在该目录下找到相应的服务名就能够管理该服务。这是标准的服务管理方法
  2. 对于第二种方法,service 关键字实际上就是去搜索 /etc/init.d/ 目录。但是 service 命令并不是 Linux 原生的命令,而是 Redhat 自己为了管理方便而单独开发出来的,所以只对 Redhat 系列的 Linux 起作用。

对于第一种方法,还可以使用 /etc/rc.d/init.d/ 目录来管理服务,这是因为在 Linux 最初的时候,服务的管理脚本是放在这个目录下的,后来开发者觉得这个目录太长了不好记,于是新建了一个 /etc/init.d/ 目录软链接指向 /etc/rc.d/init.d/,如下图所示:

上图梳理了 /etc/init.d//etc/rc.d/init.d 之间的关系,同时也展示了服务自启动的原理。

1.1.2 独立服务的自启动管理

在前面我们已经介绍过了 chkconfig 命令能够查看服务的自启动信息,那我们如果想管理系统中自启动的服务呢?有三种方法。

  1. 使用 chkconfig 命令:实际上 chkconfig 命令还能够修改服务的自启动信息:
	[root@localhost~]# chkconfig --level 2345 httpd on		// 表示若系统运行在 2345 级别下,httpd 服务将会随着系统启动而开启
其中:[--level 2345] 可以省略
  1. 修改 /etc/rc.d/rc.local 文件(推荐使用,因为源码包的自启动管理只能用此方法):该文件实际上是系统每次开机的时候,用户登录之前最后读取的文件,会将该文件中的所有命令都执行一遍,若我们将服务的启动命令加入到该文件中,则可以让系统每次开机的时候自动启动该服务。该文件也有一个软链接 /etc/rc.local
  1. 使用 ntsysv 命令:用图形界面的方法来实现服务的自启动管理,可以管理所有通过 RPM 包安装的服务(包括独立的服务和基于xinetd的服务),与第一种方法共享自启动信息。Redhat 系列专有命令。
	[root@localhost~]# ntsysv 		// 进入图形界面后可以勾选某个服务,则系统会将该服务设为自启动服务(仅对当前系统级别生效)

1.2 基于 xinetd 的服务管理

要管理基于 xinetd 的服务,先安装 xinetd 软件: yum -y install xinetd。这种服务已经越来越少,万一碰到,我们只需要知道怎么使用就行了。

1.2.1 基于 xinetd 的服务的特点
  1. 基于 xinetd 的服务也有启动与自启动之说,但是我们将此类服务开启或关闭的同时其自启动状态也会随之开启或关闭,将此类服务的自启动状态开启或关闭的同时其当前服务也会随之开启或关闭。
  2. 基于 xinetd 的服务于系统运行级别无关:用 chkconfig --list 命令可以看到,此类服务并没有与系统的运行级别相关联,因为此类服务的自启动级别取决于 xinetd 服务,所以我们在管理此类服务的时候不能够为其指定系统运行级别。
1.2.2 基于 xinetd 的服务的启动方法

基于 xinetd 的服务,它们的启动脚本都放在了 /etc/xinetd.d/ 目录下,若我们需要修改此类服务的启动与自启动状态,可以修改它们的启动脚本,如:

  1. vi /etc/xinetd.d/rsync
  2. 再将 disable = yes 改为 disable = no 即可将其设置为启动;
  3. 最后重启 xinetd 程序 service xinetd restart 即可开启该服务。(因为基于xinetd的服务不是独立的服务,所以不能用service rsync restart)。
1.2.3 基于 xinetd 的服务的自启动方法

因为与独立的服务一样都是 RPM 包安装的服务,所以其自启动方法与独立的服务相类似,都可以用 chkconfig rsync on 或者 ntsysv 来启动,但是不能用 service 方法来启动。

2. 源码包服务管理

2.1 源码包的启动管理

源码包的安装位置是我们在安装的时候手工指定的,在我们没有将源码包服务的启动脚本拷贝(链接)到 /etc/init.d/ 目录下之前,就不能用 service chkconfig ntsysv 等管理 RPM 包服务的命令来管理源码包服务。所以对于源码包服务,我们需要用 Linux 中最标准的调用服务的方式:绝对路径法。但是要注意,不同的源码包的启动脚本不同,需要查看源码包的安装说明,来获取脚本的启动方法。如 apache 服务的启动就是 /usr/local/apache2/bin/apachectl start

2.2 源码包的自启动管理

因为不能用管理 RPM 包服务的命令来管理源码包服务,所以只能将启动源码包服务的命令写入 /etc/rc.d/rc.local 文件内来让系统自动启动该服务。

  1. 如果我强行想让 service 命令能够管理源码包服务启动行为,那么我可以将源码包的启动脚本拷贝(链接)到 /etc/init.d/ 目录下:ln -s /usr/local/apache2/bin/apachectl /etc/init.d/
  2. 如果我强行想让 chkconfigntsysv 命令能够管理源码包服务自启动行为,就要比上面复杂一点:
	1. [root@localhost~]# vi /etc/init.d/apachectl		// 修改刚刚链接过来的启动脚本
2. 往该文件中添加两句内容:
1. # chkconfig:35 86 76
2. # description:source package apachectl
其中:
第 1. 句的 chkconfig 代表将该服务加入 chkconfig 的管理;35 代表该服务的自启动的级别;86 和 76 代表启动顺序和关闭顺序
第 2. 句的内容是对第 1. 句的描述,些什么都行,但是一定要写
3. [root@localhost~]# chkconfig --add apachectl // 将 apachectl 添加到 chkconfig 的管理中才能生效
  1. chkconfig 命令与 ntsysv 命令是共享自启动信息的,所以我们经过以上步骤,就可以用 ntsysv 命令来管理源码包服务了

三、服务管理总结

非常有用!不多说了一张图清晰明了。

Linux基础四(服务管理)的更多相关文章

  1. Linux软件安装——服务管理的命令

    Linux软件安装——服务管理的命令 摘要:本文主要学习了Linux系统中服务管理的命令. service命令 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启 ...

  2. Linux服务器,服务管理--systemctl命令详解,设置开机自启动

    Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了. 摘要: syst ...

  3. Linux软件安装——服务管理

    Linux软件安装——服务管理 摘要:本文主要学习了Linux中有关服务管理的知识. 什么是服务 服务一般是放置在后台运行的一个或多个进分程,为用户或系统提供某项特定的服务,有些是系统服务,有些则是独 ...

  4. linux 学习 12 服务管理

      第十二讲 Linux服务管理 12.1 Linux服务管理-服务分类 ——Linux服务 ----RPM包默认安装的服务 ————独立的服务 ————基于xinetd服务 ----源码包安装的服务 ...

  5. linux基础-ssh服务

    SSH ssh 服务是实现管路服务器的一种方式: 本地管理(安装系统,故障修复),ssh 远程连接 linux 可以是实现远程连接的方式:ssh 命令 windows 可以实现远程连接方式: xshe ...

  6. Linux基础四:软件包管理

    四.软件包管理器: 1.概念 红帽有两款软件包管理器,分别是rpm和yum. 1.rpm软件包管理器  ->  用来安装单个包  ->  .rpm文件 红帽的安装包文件,都放在Packag ...

  7. linux基础之磁盘管理与文件系统

    上面一篇文章(https://www.cnblogs.com/ckh2014/p/7224851.html)介绍了硬盘的基本结构,那么一块磁盘如何应用取存储数据呢? 它的步骤是这样的: 识别硬盘 -- ...

  8. linux基础之权限管理

    本节内容 1. 权限类别 属主(owner) 属组(group) 其他人(other) 2. 查看权限 ls -l 十位: 第一位文件类型-,d,l, 3. 设置权限 chmod 选项 权限模式 fi ...

  9. Linux基础四

    vim编辑器 vi编辑器的增强版,语法高亮等扩展功能 vim三种工作模式  a,i,o等键输出模式 命令模式,输入模式,末行模式 模式间的切换 a:当前行插入 i:当前行插入 o:全新一行插入 :键末 ...

随机推荐

  1. 【转】1.2 CDN的基本工作过程

    1.2  CDN的基本工作过程 使用CDN会极大地简化网站的系统维护工作量,网站维护人员只需将网站内容注入CDN的系统,通过CDN部署在各个物理位置的服务器进行全网分发,就可以实现跨运营商.跨地域的用 ...

  2. jupyter中添加conda环境

    安装完Anaconda利用conda创建了虚拟环境,但是启动jupyter notebook之后却找不到虚拟环境. 实际上是由于在虚拟环境下缺少kernel.json文件,解决方法如下: 首先安装ip ...

  3. 谷歌开源漏洞跟踪工具 Monorail 存在跨站点搜索漏洞

    一名安全研究员表示,在谷歌开源漏洞跟踪工具 Monorail 中找到一个漏洞,可被用于执行跨站点搜索 (XS-Search) 攻击. Monorail 用于检查和 Chromium 相关项目中的问题, ...

  4. C++之内联函数

    C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展. 采用内联函数可以有效避免函数调用的开销,程序执行效 ...

  5. day53

    JS常用类 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | -Infinity 2.常用进制 二进制:0b1010 八进制 ...

  6. linux系统下php通过php_oci8扩展连接oracle数据库 Nginx

    相关版本信息: PHP Version 5.6.30 nginx version: nginx/1.10.3 Linux version 2.6.32-358.el6.x86_64 (mockbuil ...

  7. Drupal性能优化:蜜蜂培训性能优化一

    大家一直都说Drupal的性能不怎么样,跑起来慢,即使不是在用户量大的时候,最近公司的蜜蜂培训产品在一个客户的使用过程中,由于用户量及数据量的激增,就遇到了比较大的性能问题,这篇文章就记录了整个优化过 ...

  8. .NetCore Session.Redis (转载)

    首先创建ASP.NET CORE Web项目,然后按如下顺序操作. 1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.D ...

  9. Bat 批处理杀死进程 重新启动程序

    @echo offset pa=%cd%taskkill /F /IM wgscdTool.exeecho %pa%\wgscdTool.exeping /n 2 127.1>nulstart ...

  10. 20155210 EXP6 信息搜集与漏洞扫描

    20155210 EXP6 信息搜集与漏洞扫描 信息搜集 外围信息搜集 通过DNS和IP挖掘目标网站的信息 whois 域名注册信息查询 我们通过输入whois qq.com可查询到3R注册信息,包括 ...