Debian - 找不到“命令”命令

Debian - 找不到“命令”命令

我的 shell bash 给了我一个bash : ... : command not found错误,我不知道如何开始解决它。另外,我不知道应该选择除了“bash”“Debian”之外的女巫标签。

我是 root,这两个程序也已经安装了。操作系统是 Debian Buster 并且是新安装的。在安装过程中,我取消勾选了 Tasksel 配置步骤中的所有选项。我认为更多地与我的Shell有关。后来,我用来安装Awesome tiling windows。

这是我的路径的输出: root@machine:~# echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

这里有两个例子:首先我尝试运行该程序。其次,我检查该程序是否已安装。

root@machine:~# modprobe --verbose
bash: modprobe: command not found

root@adrien:~# apt-get install kmod 
Reading package lists... 
Done Building dependency tree
Reading state information... 
Done kmod is already the newest version (26-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

root@machine:~# openvpn 
bash: openvpn: command not found

root@adrien:~# apt-get install openvpn 
Reading package lists... Done Building dependency tree
Reading state information... 
Done openvpn is already the newest version (2.4.7-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

答案1

检查一下你的$PATH里面是否有这些程序。

$ echo $PATH

应该显示您的系统搜索路径是什么。与什么比较

$ dpkg-query -L <package_name>

会告诉你的。

$ command -v program

会告诉您程序的完整/绝对路径。

如果您无法通过这种方式找到它,请尝试:

find /sbin modprobe
find /usr/sbin modprobe

Modprobe 驻留在/sbin(或者可能位于/usr/sbin)并且是到 的符号链接/bin/kmod。如果您没有 modprobe 所在目录的路径,您将无法使用它,除非您提供完整路径,例如$ /sbin/modprobe.

您可以发送结果$ set | grep PATH,我们可能会看看有什么问题。

由于您的输出PATH表明您没有/sbinand /usr/sbin,因此您必须将其添加到您的$HOME/.bashrc.要测试它,首先使用:

$ export PATH=$PATH:/sbin:/usr/sbin

并检查它是否有效。如果是这样,则将其添加到$HOME/.bashrc,如果您希望每个用户都可以使用它,则将其添加到/etc/profile@GAD3R 建议的位置。

附言。$是命令提示符,你不把它放在控制台中,它表明命令是在shell中使用的。一般来说,for 普通用户$用作 shell 提示符,而#for root.因为这可能是一般问题,而不仅仅是 root,所以我使用了$.请记住,在您的情况下,当您root$“成为”# 但由于您已经以 root 身份登录,因此不会改变任何内容。

答案2

请注意,Debiansu在 Debian 10 中切换到了该命令的另一个分支(“Buster”)。与以前版本的 Debian 不同,当您使用 plain成为 root时,它不再自动将/sbin,/usr/sbin和添加/usr/local/sbin到您的系统中。$PATHsu

这让不少人感到惊讶。

您可以su -在切换到 root 用户时使用显式完全重新初始化环境:这将导致.../sbin目录包含在$PATH.

$PATH或者,您可以在成为 root 时自动添加目录,正如 GAD3R 的答案中所建议的


我还注意到我可以使用以下命令重新启动计算机:

root@机器:~# 重新启动

代替。

root@machine:~# systemctl restart

(注意:Stack Exchange 的惯例是在每个问题帖子中仅提出一个问题。像这样的多个问题将使其他有相同问题的人更难找到适用的答案。)

这是一个兼容性包装器,允许您仍然使用经典的 SysV 风格的关闭/重新启动命令,这可能深深嵌入许多长期 Linux/Unix 管理员的肌肉记忆中。

答案3

您可以检查可执行文件的位置:$ which modprobe$ which openvpn

命令su

# /usr/sbin/modprobe
# /sbin/openvpn

有了su -它就变成了

# modprobe
# openvpn

即只会su -提供完整的 root 权限/root 的 PATH。某些/sbin/命令需要它/usr/sbin/:Debian 10。

答案4

编辑/etc/profile如下(前 6 行):

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

然后重新启动系统。

相关内容