在Linux中,service 和 systemctl 是两个至关重要且极其相似的命令。它们如此相似,以至于人们很容易想知道它们之间有何不同,是否可以互换使用。
了解 service 和 systemctl 的细节将使您能够无缝地使用它们。
什么是Linux中的service命令?
使用 service 命令检查防火墙状态
在Linux中,service 命令是一个包装脚本,允许用户轻松配置和与系统服务交互。它在 systemd 之前,并主要与位于 /etc/init.d 中的脚本一起工作。
尽管 systemctl 在很大程度上取代了 service 的先前重要性,但它通过许多遗留功能仍然保持相关性。
相关初始化系统从 SysVinit 到 systemd 的转变引起了争议,但原始init系统功能的挑战不断增加,这使得这种转变变得必要。
systemd 以并行方式启动服务,而不是串行顺序,使其启动时间比 SysVinit 更快,并且通过命令行界面(CLI)提供了对系统守护程序的略微更复杂的控制。
什么是 Linux 中的 systemctl 命令?
在终端中使用 systemctl 检查防火墙状态
与service 类似,systemctl 是一个非常多用途的命令,允许您启用、重新加载、启动、停止以及检查正在运行在 Linux 系统上的服务的状态。
systemctl 充当一个易于使用且功能强大的界面,用于配置 systemd 中的文件,例如,使用 systemctl 仅需一两个命令即可在启动时禁用一个服务。
systemctl 向后兼容初始化系统 SysVinit,主要与 service 一起使用。systemctl 并不是 service 的直接继承者,但在管理系统服务的工具方面更为多样灵活。
您可以在一两行命令中完成屏蔽或禁用服务等任务。
service 和 systemctl 之间的区别
service 和 systemctl 在很大程度上具有相同的目的。它们之间许多相似之处都是有意为之的,以使用户能够更轻松地从 service 过渡到 systemctl。
然而,在开始使用 Linux 上的初始化系统时,您应该了解两者之间的一些区别。
不同的初始化系统
service 和 systemctl 之间最显著的区别是它们属于不同的初始化系统。service 属于SysVinit(System V Init),也就是经典的 Linux 初始化进程。systemctl 属于systemd,是 SysVinit 的继任者,也是许多 Linux 系统上使用的现代初始化进程。
由于service 和 systemctl 是不同初始化进程的一部分,它们在不同目录中操作初始化系统文件。service 与位于 /etc/init.d 中的初始化系统文件一起工作,而 systemctl 与位于 /lib/systemd 中的初始化系统文件一起工作。
通常,您在开箱即用的Linux安装中会遇到 systemd 初始化系统,因此您会希望熟悉使用 systemctl 与之交互。
如果您打算在 2010 年 systemd 发布之前或与之同时工作的系统上使用,熟悉使用 service 命令也无妨。
兼容性
从兼容性的角度来看,service 仍然是一个非常有用的命令——作为一个包装命令,它可以重定向到不同系统上使用的服务管理器。如果您将与各种Linux系统一起工作,您应该计划学习并将其纳入您的工具库中。
底层功能
systemctl 和 service 之间的另一个关键区别在于它们的操作方式。service 是一个高级命令,会重定向到特定系统上使用的底层服务管理器,这意味着它在不同系统之间非常通用。它可能会重定向到 /etc/init.d、upstart,甚至是 systemctl。与此同时,systemctl 命令直接与 systemd 交互。
能力
在可实现的任务方面,可以肯定地说 systemctl 在功能上远远超过了 service。除了基本功能(如启动、停止、启用或禁用特定服务)之外,您还可以使用 systemctl 设置高级配置。
由于 service 必须与其所依赖的底层服务管理器兼容,因此其功能更有限。
在 Linux 上有效地配置系统服务
service 和 systemctl 都是管理系统服务的极为重要的命令。无论您只是想充分利用您的 Linux 系统,还是打算在企业网络上工作,熟悉这两个命令都是至关重要的。
幸运的是,存在许多出色的教程可以帮助您在终端中成为使用systemctl和service的高手。