我的 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
表明您沒有/sbin
and /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
到您的系統中。$PATH
su
這讓不少人感到驚訝。
您可以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
然後重新啟動系統。