Debian - 「コマンド」コマンドが見つかりません

Debian - 「コマンド」コマンドが見つかりません

私のシェル bash でエラーが発生しbash : ... : command not found、それを解決する方法がわかりません。また、「bash」「Debian」以外のどのタグを選択すればよいのかわかりませんでした。

私はルートで、これら 2 つのプログラムはすでにインストールされています。OS は Debian Buster で、新しくインストールされました。インストールのプロセス中に、Tasksel 構成ステップのすべてのオプションのチェックを外しました。これは私のシェルにもっと関連していると思います。後で、Awesome のタイル ウィンドウをインストールするために使用します。

私のパスの出力は次のとおりです: root@machine:~# echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

ここに 2 つの例があります: 最初にプログラムを実行してみました。次に、プログラムがインストールされているかどうかを確認します。

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/usr/sbin$HOME/.bashrc

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

動作するかどうかを確認してください。動作するなら に追加し$HOME/.bashrc、すべてのユーザーが利用できるようにするには、/etc/profile@GAD3R の提案に従って に追加します。

PS.$はコマンド プロンプトです。コンソールには入れません。コマンドがシェルで使用されていることを示します。一般に、 は一般ユーザーに対して$シェル プロンプト インジケーターとして使用され、 は#ですroot。これは root だけでなく一般的な問題になる可能性があるため、 を使用しました$。この場合、$ が # に「なる」場合でもroot、すでに root としてログインしているため、何も変更されないことに注意してください。

答え2

Debian は Debian 10 ("Buster") でコマンドの別のブランチに切り替えたことに注意してください。以前のバージョンの Debian とは異なり、プレーンを使用して root になったときに、、およびが自動的にsu追加されなくなりました。/sbin/usr/sbin/usr/local/sbin$PATHsu

これには多くの人が驚きました。

su -代わりに を使用すると、ルート ユーザーに切り替えるときに環境を明示的に完全に再初期化できます。これにより.../sbin、ディレクトリが に含まれるようになります$PATH

$PATHあるいは、ルートになるたびにディレクトリの追加を自動化することもできます。GAD3Rの回答で示唆されているように


また、次の方法でコンピューターを再起動できることに気付きました:

root@machine:~# 再起動

の代わりに。

root@machine:~# systemctl 再起動

(注: Stack Exchange では、質問投稿ごとに 1 つの質問のみをするのが慣例となっています。このように複数の質問をすると、同じ問題を抱えている他のユーザーが適切な回答を見つけるのが難しくなります。)

これは、多くの長期 Linux/Unix 管理者の筋肉記憶に深く根付いている可能性のある、従来の SysV スタイルのシャットダウン/再起動コマンドを引き続き使用できるようにする互換性ラッパーです。

答え3

実行ファイルの場所を確認することができます:$ which modprobeそして$ which openvpn

suコマンドは

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

それsu -

# modprobe
# openvpn

つまり、完全なルート権限 / ルートの PATH のみが提供されます。これは、su -一部のコマンドに必要です: Debian 10。/sbin//usr/sbin/

答え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

その後、システムを再起動します。

関連情報