对于 Linux 用户(尤其是像 Ubuntu 这样的现代发行版)来说,最强大、最方便的工具之一是 系统控制命令。该命令行实用程序通常用于与 systemd、系统和服务管理器交互。
通过该命令,您可以管理系统服务、查看其状态、启动或停止它们以及在系统启动时启用和禁用它们。非常方便,对吧?但是如果 systemctl 命令没有找到或未被识别,你将面临 “sudo:systemctl:找不到命令” 错误。
那么,我们来谈谈“systemctl:找不到命令”错误的含义、遇到此错误的各种原因以及如何修复此错误。
systemctl:未找到命令是什么意思?
简而言之,“systemctl:找不到命令”错误意味着 systemctl 命令行实用程序在当前环境中不可用或不可访问。这可能是由于多种原因造成的,所有这些原因都可以归结为环境是非系统环境或系统上未安装 systemd 软件包。
基本上,systemd 软件包没有安装,或者你的 Linux 发行版或版本没有使用 systemd;相反,它使用较旧的服务管理系统,例如 init.d。另一种可能性是 PATH 环境变量不包含 systemctl 所在的目录,这意味着您的 shell 无法找到它。
现在您已经了解系统可能出现什么问题,从而导致“systemctl:找不到命令”错误,让我们看看如何验证问题所在以及如何修复它。
修复 systemctl:找不到命令错误
在接下来的步骤中,我们将验证您的系统是否安装了systemd并使用了systemctl,并检查systemctl的路径。一旦我们验证了问题,我们将采取必要的步骤来修复错误。
1. 验证您的系统是否使用 systemd
由于只有安装了 systemd 软件包才能使用 Ubuntu systemctl,因此我们首先要通过运行以下命令来检查您的系统是否应该使用 systemd:
ps -p 1 -o comm=
或者您可以使用以下命令检查 systemd 版本:
systemd --version
如果输出是 systemd,则 systemd 是您的 init 系统,并且应该安装了 Ubuntu systemctl。但是,如果输出是 init 或其他进程管理器,则意味着您的系统正在使用替代初始化系统,并且 systemctl 将无法工作,除非您迁移到 systemd。
如果您看到 Upstart 或 SysVinit 等较旧的初始化系统,并希望切换到 systemd 以使用 systemctl,请按照以下步骤操作:
1. 通过使用以下命令安装 systemd 来安装 systemctl:
sudo apt install systemd-sysv
2. 通过运行以下命令重新启动系统:
sudo reboot
3. 检查您的系统现在是否正在使用 systemd:
ps -p 1 -o comm=
现在输出应该是systemd。
2.确保systemd安装正确
正常情况下,当 systemd 安装并作为 init 系统运行时,systemctl 命令应该可以正常工作。如果不是,则意味着 systemd 软件包丢失或安装不正确。
请注意,如果您使用的是最小版本的 Ubuntu,例如 Docker 容器或云实例,则默认情况下可能尚未安装 systemd。要通过安装 systemd 来安装 systemctl,请运行以下命令:
sudo apt update sudo apt install systemd
安装后,检查 systemctl 命令是否可用。
3.检查systemctl的PATH
systemctl 未找到错误的一个常见问题是 systemctl 可以安装,但它不在系统的 PATH 中。要检查 systemd 二进制文件是否存在于其所在的典型目录中,例如 /bin、/usr/bin 或 /usr/local/bin,可以使用以下命令:
which systemctl
如果在 PATH 中列出的任何目录中找到 systemctl,您应该得到如下输出:
/usr/bin/systemctl
如果在 PATH 中的任何目录中都没有找到 systemctl,则 which 命令将不返回任何内容。
但是,即使在您的目录中找到了 systemctl,它也可能仍然无法工作。这是因为 systemctl 可能位于未包含在 PATH 中的目录中。在这种情况下,您必须使用以下命令来验证 systemctl 所在的目录是否是您系统的一部分:
echo $PATH
输出应该是这样的:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
现在,您所要做的就是检查 systemctl 所在的目录(从 which 命令获得的目录)是否包含在 echo $PATH 命令的输出中列出的目录中。
如果 systemctl 的目录未包含在 echo $PATH 的输出中,则必须将其添加到 PATH 变量中。为此,您必须运行以下命令:
为了 Bash shell 用户,在文本编辑器中打开 ~/.bashrc 文件:
nano ~/.bashrc
在文件末尾添加以下行:
export PATH=$PATH:/usr/bin
/usr/bin 是本示例中 systemctl 所在的典型目录。
现在,按 CTRL + X 保存并关闭文件,然后按 Y 确认,然后按 Enter 保存。
为了 Zsh 用户,在文本编辑器中打开 ~/.zshrc 文件:
nano ~/.zshrc
在文件末尾添加以下行:
export PATH=$PATH:/usr/bin
/usr/bin 是本示例中 systemctl 所在的典型目录。
现在,按 CTRL + X 保存并关闭文件,然后按 Y 确认,然后按 Enter 保存。
完成上述步骤后,使用 echo $PATH 命令来验证 systemctl 的目录是否已添加到您的 PATH 中。现在,您应该能够运行 systemctl,而不会遇到“systemctl:找不到命令”错误。
4. 重新安装系统
如果之前的修复不起作用,并且您仍然遇到命令未找到错误,则完全重新安装 systemd 可能会解决该问题。为此,请运行以下命令:
sudo apt purge systemd sudo apt install systemd
然后,使用以下命令重新启动系统:
sudo reboot
检查 systemctl 是否有效。
5. 验证 systemd 是否配置正确
有时,问题可能很简单,就像 systemd 安装配置错误一样,导致“systemctl:找不到命令”错误。要解决此问题,您所需要做的就是运行以下命令,然后就完成了:
sudo dpkg-reconfigure systemd
6. 过时的 Windows Linux 子系统 (WSL)
如果您正在使用 Ubuntu WSL(适用于 Linux 的 Windows 子系统) 您应该知道,WSL 的旧版本(例如 WSL 1)本身并不支持 systemctl,因此无论您使用之前的哪个修复程序,都将无法运行 systemctl。
如果你想利用 systemctl 的功能,你必须升级到 WSL 2,它对 systemd 有更好的支持。如果您不确定是否使用 WSL,可以使用以下命令进行检查:
uname -a
如果输出提到 WSL,那么这就是您看到“systemctl:命令未找到”错误的原因。
7. 使用 sudo 服务替代 systemctl
如果由于系统不使用 systemd 而遇到“systemctl: command not found”错误,则可以使用 sudo service 命令来管理服务。此命令适用于较旧的 init 系统,例如 SysVinit 或 Upstart。这对于依赖 init 脚本而不是 systemd 的 Ubuntu 系统很有用。
例如,要启动服务,您可以运行:
sudo service <service_name> start
最后的想法
systemd 及其 systemctl 命令行实用程序已经取代了大多数其他较旧的 init 系统,例如 SysVinit 和 Upstart。虽然由于其整体设计和非 Unix 哲学,systemd 可能不是每个人都喜欢的 init 系统茶,但 systemd 仍然普遍被认为是普遍的选择。因此,希望您能够解决 systemctl 命令不可用错误,因为无法使用 systemd 的命令行实用程序会严重限制其功能。
常问问题
什么是 systemctl 以及 systemctl: Command Not Found 是什么意思?
systemctl 是一个命令行工具,用于管理运行 systemd 的 Linux 系统(例如 Ubuntu)中的服务。当该工具不可用或不可访问时,会出现“systemctl:找不到命令”错误,通常是因为系统不使用 systemd 或未安装 systemd 软件包。
systemctl 在所有版本的 Ubuntu 上都可用吗?
不可以,systemctl 并非在所有版本的 Ubuntu 上都可用。 systemctl 是 systemd init 系统的一部分,它是大多数现代 Ubuntu 版本(从 15.04 开始)的默认设置。旧版本或某些最小安装可能会使用 SysVinit 或 Upstart 等替代初始化系统。