Debian - 找不到「命令」指令

Debian - 找不到「命令」指令

我的 shell bash 給了我一個bash : ... : command not found錯誤,我不知道如何開始解決它。另外,我不知道應該選擇除了“bash”“Debian”之外的女巫標籤。

我是 root,這兩個程式也已經安裝了。作業系統是 Debian Buster 並且是新安裝的。在安裝過程中,我取消勾選了 Tasksel 設定步驟中的所有選項。我認為更多地與我的Shell有關。

這是我的路徑的輸出: 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

然後重新啟動系統。

相關內容