私のシェル 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
$PATH
su
これには多くの人が驚きました。
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
その後、システムを再起動します。