コマンドを実行しようとしているとき(sudo
の有無にかかわらず) )そして「コマンドが見つかりません」というエラーメッセージが表示されます。これは、実行しようとしているスクリプトまたはファイルがPATH変数で指定された場所に存在しないことを意味します。この変数とは何ですか。また、見つからないコマンドを実行するにはどうすればよいですか?
環境変数を理解する
コンピューティングでは、変数 変更可能な値のプレースホルダーです。通常のスピーチでは変数を毎日使用しますが、そのようには考えていません。 「私のラップトップ」と言うときは、Lenovo、Mac、またはRaspberry Piのいずれであるかに関係なく、携帯しているコンピューターの汎用変数またはプレースホルダーとして「ラップトップ」を使用しています。
環境変数 ログインセッションに関する情報を含む特別な変数です。これらの変数の多くは、インストール時またはユーザー作成時にデフォルトで設定されます。これらは、コマンドの実行時に使用するシステムシェル、アプリケーション、およびスクリプト用に保存されます。
グローバル変数またはシステム定義変数とローカル変数またはユーザー定義変数があります。
グローバル変数
グローバル変数はログインシェルで事前定義されていますが、不変ではなく、好みに応じて変更または削除できます。 printenv
を使用できます またはenv
システムの環境変数を表示するコマンド:
$ env
SHELL=/bin/bash
SESSION_MANAGER=local/kiwi.homelinux.local:@/tmp/.ICE-unix/1906,unix/kiwi.homelinux.local:/tmp/.ICE-unix/19
06
WINDOWID=153092103
COLORTERM=truecolor
XDG_CONFIG_DIRS=/home/tux/.config/kdedefaults:/etc/xdg:/etc/kde/xdg
LESS=-XR
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
HISTCONTROL=:ignorespace:ignoredups:ignorespace:ignoredups
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
[...]
env
コマンドは、すべてのグローバル環境変数を出力します。変数では大文字と小文字が区別され、すべてのLinuxディストリビューションではデフォルトで環境変数名に大文字が使用されます。
[お気に入りのGitコマンド、エイリアス、ヒントを手元に置いておきます。 Gitチートシートをダウンロードします。 ]
ローカル変数
ローカル変数は特定のシェル内にのみ存在します。したがって、ローカル変数を定義すると、現在のシェルでのみ使用できます。グローバル変数としてエクスポートしない限り、新しいシェルセッションに伝播または永続化されません。
ローカル変数は、同じ名前のグローバル変数を上書きしないように、小文字で定義されることがよくあります。
PATH環境変数
PATHグローバル環境変数は、システムが有効な実行可能コマンドを検索するディレクトリを一覧表示します。デフォルトでは、通常は/usr/bin
などの実行可能ファイルを格納する標準ディレクトリが含まれています 、/usr/local/bin
、など。
grep
などのコマンドを入力する場合 またはvim
、システムは、同じ名前の実行可能ファイルが見つかるまで、PATH変数にリストされているすべてのディレクトリをリストされている順序で検索します。見つからない場合は、「コマンドが見つかりません」エラーが発生します。
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
$ env $PATH
env: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
「コマンドが見つかりません」エラーを修正する5つの方法
この問題を解決する方法はいくつかあります。そのうちの5つです。
1。パスを含める
実行したいすべてがパスにある必要はありません。実行するファイルへのパスを指定することにより、ファイルを直接実行できます。ファイルの場所を特定することで、システムがパスを検索する必要性を完全に回避できます。
たとえば、hello
というスクリプトがあるとします。 実行したいこと。これはホームディレクトリにあり、chmod +x
で実行可能としてマークされています。 :
$ ~/hello
hello world
システムにファイルの場所を通知することにより、PATH変数が関与することはなく、ファイルは期待どおりに実行されます。
2。新しいパスを追加する
または、PATHに新しいディレクトリを追加することもできます。実行可能ファイルをそのディレクトリに追加すると、パスを手動で指定しなくても実行できます。
$ cp ~/hello ~/.local/bin
$ export PATH=$PATH:$HOME/.local/bin
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin
.bashrc
に含めることで、新しいPATH環境変数をログインシェルに追加することができます。 新しい設定としてファイルします。
3。ファイルを既存のパスの場所にコピーします
バイナリファイルまたはスクリプトを実行する場合は、PATH環境変数にすでにリストされているディレクトリパスのいずれかにコピーします。
$ sudo cp ~/hello /usr/local/bin/
$ hello
hello world
4。 Bashにどこを見ればよいか教えてください
おそらく最も簡単なオプションは、特に1回限りのスクリプトやアプリケーションの場合、BashにPATHを考慮するのではなく、「ここを見る」ように指示することです。これを行うには、コマンド、スクリプト、またはアプリケーション名の前にドットとスラッシュを配置します。 hello
の場合 スクリプト、次のようになります:
$ sudo ./hello
hello world
システムに永続的な変更は加えられません。これは、スクリプトを作成していて、通常の保存場所(おそらくPATHに沿って)にコピーまたは移動する前にスクリプトをテストする場合に便利です。
5。パッケージをインストールする
コマンドを使おうとすると、Bashに「コマンドが見つかりません」というエラーが表示されることがあります。これは、プログラムがシステムにインストールされていないことが原因である可能性があります。コマンドを含むソフトウェアパッケージをインストールして、これを修正します。たとえば、Nmapがインストールされていない場合は、nmap
コマンドを端末に入力すると失敗します:
$ nmap
nmap: command not found
$ sudo dnf install --assumeyes --quiet nmap
$ nmap
Nmap 7.92 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
[...]
[もっと知りたいですか? RedHatのカリキュラムへのフルアクセスの無料トライアルにサインアップしてください。 ]
パスに固執する
PATH変数は、システムがコマンドに応答する方法をカスタマイズするために使用できる強力なツールです。そのため、慣れるために少し時間がかかります。コマンドを実行してコマンドの実行可能ファイルを見つけるときによく使用されます。
このチュートリアルでは、端末で「コマンドが見つかりません」エラーを修正する5つの方法を学びました。そのうちの3つはPATH変数に依存しています。変数とは何か、コマンド実行可能ファイルがどのように見つかるかがわかったので、画面に「コマンドが見つかりません」というエラーが表示されても、それほど不思議に思うことはありません。