aptを使ってaria2cをインストールしたので、aria2c
コピーして手動でインストールしたいと思います。/usr/local/bin
/usr/bin
入力すると、次のいずれかが実行されますかaria2c
?
答え1
実行される実行可能ファイルは、変数のディレクトリの順序によって異なりますPATH
。
/usr/bin
前にリストされている場合は代わりに実行され/usr/local/bin
ます。/usr/bin/aria2c
/usr/local/bin/aria2c
シェルが実行可能ファイルをハッシュしてaria2c
から同じユーティリティをインストールする前にその実行可能ファイルにアクセスした場合は、ディレクトリの順序に関係なくそれを行うことを選択できます。この問題は、ユーティリティを使用して別の場所にインストールし、同じシェルセッションで再利用しようとする特定の場合にのみ発生する可能性があります。このコマンドは、シェルセッションで記憶されたユーティリティの場所を消去します。また、見ることができます/usr/bin
/usr/local/bin
/usr/bin/aria2c
PATH
hash -r
Bashの実行可能ファイルパスキャッシュを消去する方法は?
というエイリアスまたはシェル関数がある場合、シェルは実行可能ファイルを見つけるためにそれを使用する前に使用されますaria2c
。PATH
個人用(Linux以外)システムでは:
$ printf '%s\n' "$PATH" | tr ':' '\n'
/usr/bin
/bin
/usr/sbin
/sbin
/usr/X11R6/bin
/usr/local/bin
/usr/local/sbin
/usr/games
ご覧のとおり、私のシステムでは/usr/local/bin
非常に時間がかかりました。/usr/bin
私はこう設定しました。避ける誤って再定義されました/usr/bin
。ローカル実行可能ファイルが/usr/bin
。
答え2
このSEサイトで回答が見つからないのが不思議です。
PATH
これはシェルによって異なりますが、通常はコマンドを実行するためにシェルが確認するディレクトリを含む環境変数があります。これらのディレクトリはセミコロンで区切られています:
。
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/wine/bin:/home/birdie/bin
バイナリは左から右に検索されます。つまり、私の例では、同じバイナリがある場合は、/usr/local/bin
その/bin
うちの1つが/usr/local/bin
優先順位を持ちます。
また、シェルにエイリアスがある場合、サポートされている機能が最初に実行されます(エイリアスが定義されている場合)。alias
とを実行して表示できますset
。別のカテゴリコマンドがありますbuilt-in
。したがって、順序は次のようになります。
- ニックネーム
- 機能
- 組み込みコマンド
$PATH
左から右に検索されるバイナリファイル
最後に注目する価値があるのはエイリアスです。いいえシェルスクリプトで動作します(定義されていません)。
答え3
より簡単な解決策は、which
実行されるプログラムを見ることです。
マンページ...
このパラメータがシェルプロンプトに入力されると、実行される実行可能ファイルのフルパスが標準出力に出力されます。
例:
[~] echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin:/usr/lib/llvm/12/bin
[~] echo '#!/bin/bash' > hello_world.sh
[~] echo 'echo "Hello World"' >> hello_world.sh
[~] chmod 755 hello_world.sh
[~] sudo cp hello_world.sh /bin/
[~] sudo cp hello_world.sh /usr/bin/
[~] sudo cp hello_world.sh /usr/local/bin/
[~] which hello_world.sh
/usr/local/bin/hello_world.sh
次へ追加
hash
コマンドの実行方法を変更できることが私の注目を集めました。ただし、ほとんどの場合、プログラムはパフォーマンスを向上させるためにハッシュされません。私のハッシュリストには常に2つのコマンドしかありません。
[~] hash
hits command
3 /usr/bin/man
1 /bin/bash
コマンドをハッシュしない限り、which
コマンドは問題ありません。または代わりに使用してくださいtype -p hello_world.sh
。このコマンドも同様のtype
部分です。なんだかお互いにコミュニケーションになると思います。bash
hash
保存するには、hash
パラメータなしでコマンドを呼び出してすべてのハッシュプログラムを表示できます。