0

0

如何在Linux中禁止服务启动 Linux systemctl mask锁定

P粉602998670

P粉602998670

发布时间:2025-08-19 11:40:02

|

499人浏览过

|

来源于php中文网

原创

使用 systemctl mask 命令可彻底禁止服务启动,它通过将服务链接到 /dev/null 使其无法被加载或执行,比 disable 更彻底,disable 仅禁用开机自启但仍允许手动启动。

如何在linux中禁止服务启动 linux systemctl mask锁定

要在Linux中彻底禁止一个服务启动,甚至阻止它被手动启动,最可靠且推荐的方法是使用

systemctl mask
命令。它通过将服务的单元文件符号链接到
/dev/null
来实现“掩蔽”效果,让系统无法找到并启动该服务。

解决方案

禁止服务启动,特别是那些你确定不需要,甚至可能造成安全隐患或资源浪费的服务,

systemctl mask
是一个非常强力的工具。它比
systemctl disable
更进一步,后者只是阻止服务在系统启动时自动运行,但你依然可以手动启动它。而
mask
则是釜底抽薪,无论你尝试手动还是自动启动,系统都会因为找不到真正的服务文件而拒绝执行。

要使用它,命令很简单:

sudo systemctl mask <服务名称>

例如,如果你想彻底禁用一个名为

example.service
的服务:

sudo systemctl mask example.service

执行后,你会发现即使你尝试

sudo systemctl start example.service
,系统也会告诉你服务已被掩蔽。

如果将来你需要重新启用这个服务,或者只是想解除它的“掩蔽”状态,可以使用

unmask
命令:

sudo systemctl unmask <服务名称>

sudo systemctl unmask example.service

这会移除指向

/dev/null
的符号链接,让服务单元文件恢复正常,之后你就可以像往常一样
enable
start
它了。

systemctl mask
systemctl disable
有何不同?

说真的,这个问题经常困扰初学者,甚至一些老手有时也会混淆。我个人觉得,理解它们的根本差异,是管理Systemd服务的关键一步。

systemctl disable
的作用是阻止服务在系统启动时自动运行。它通常通过在
/etc/systemd/system/multi-user.target.wants/
或其他
.wants
目录中移除服务的符号链接来实现。这意味着,服务不会随系统开机启动,但如果你需要,完全可以通过
sudo systemctl start <服务名称>
手动启动它。这就像是把一个应用的“开机自启”选项关掉了。

systemctl mask
则完全不同。它将服务的单元文件直接符号链接到
/dev/null
。这意味着,当Systemd尝试查找并加载这个服务单元文件时,它找到的只是一个空洞的“黑洞”。无论你是想让它开机自启,还是手动敲命令
start
它,Systemd都会因为找不到真正的服务定义而拒绝执行。这就像是直接把应用程序的执行文件删掉了一样,你根本没法运行它。在我看来,
mask
更像是一种“永久禁止”或“彻底移除”的策略,适用于那些你明确知道永远不需要,或者出于安全考虑必须完全禁用的服务。比如,某些你觉得可能被滥用的调试服务,或者在你看来完全多余的系统组件。

如何查看已被
mask
的服务列表?

想要知道系统中有哪些服务被你“掩蔽”了,这其实挺重要的,尤其是在排查问题或者回顾配置的时候。毕竟,你可能不记得之前对哪些服务动过手脚。最直接的方法是查看服务的状态,如果一个服务被

mask
了,
systemctl status
命令会明确告诉你。

比如,如果你想检查

example.service

蛙蛙写作——超级AI智能写作助手
蛙蛙写作——超级AI智能写作助手

蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具。

下载

systemctl status example.service

输出中会有一行显示

Loaded: masked (/dev/null; bad)
或类似的字样,表明它已经被
mask
了。

但如果你想列出所有被

mask
的服务,那就要用到
systemctl list-unit-files
命令,并结合
grep
来筛选了:

systemctl list-unit-files --state=masked

这个命令会列出所有处于

masked
状态的单元文件,包括服务(
.service
)、套接字(
.socket
)等等。这能让你一览无余地看到哪些系统组件被你“锁”住了。我个人觉得,定期检查一下这个列表是个好习惯,特别是当你接手一台新的Linux服务器,或者对系统进行过大量调整之后。有时候,一些不经意的操作可能就导致了某个关键服务被误
mask
,然后排查起来会很头疼。

mask
了关键服务怎么办?

这绝对是每个Linux用户都可能遇到的“心跳骤停”时刻。我个人就经历过几次,手滑或者没搞清楚依赖关系,一不小心就把一些看似不重要,实则系统核心依赖的服务给

mask
了。结果就是系统启动异常,或者某些关键功能直接罢工。遇到这种情况,别慌,
systemctl mask
是可逆的。

恢复的命令是

systemctl unmask <服务名称>

sudo systemctl unmask <误mask的服务名称>

执行这个命令后,Systemd会移除之前创建的指向

/dev/null
的符号链接,让服务的原始单元文件重新生效。但请注意,
unmask
之后,服务并不会自动启动,也不会自动设置为开机自启。你可能还需要手动启动它:

sudo systemctl start <服务名称>

如果这个服务原本就需要开机自启,你还需要重新

enable
它:

sudo systemctl enable <服务名称>

关键在于,在执行

mask
操作之前,一定要非常清楚这个服务的具体作用以及它是否有其他服务依赖它。一个简单的
systemctl status <服务名称>
就能给你很多信息,比如它的描述、依赖关系等等。如果实在不确定,或者服务名称看起来就很核心(比如和网络、日志、文件系统相关的),最好还是先查阅一下文档,或者选择
disable
而不是
mask
。毕竟,
disable
的恢复成本要低得多,而且不至于让系统陷入无法启动的境地。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

436

2024.03.01

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

572

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

545

2023.07.20

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

2

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号