技術ノート Linux Linux で where コマンドを使用する方法

Linux で where コマンドを使用する方法

Linux で where コマンドを使用する方法

Linux の which コマンドは、シェルにコマンドを発行したときに起動される実行可能バイナリを識別します。コンピュータ上に同じプログラムの異なるバージョンがある場合は、どのバージョンをシェルが使用するかを調べるために、 which を使用できます。

バイナリとパス

ターミナル ウィンドウからプログラムまたはコマンドを実行しようとすると、シェル (通常、最新のディストリビューションでは Bash ) がそのコマンドを見つけて起動する必要があります。 cd history pwd などの一部のコマンドはシェルに組み込まれているため、Bash がこれらを見つけるのにそれほど苦労する必要はありません。

しかし、Bash はどのようにして他のコマンド、プログラム、外部スタンドアロン バイナリを見つけるのでしょうか? Bash はパスを使用しますが、これは実際にはパスのコレクションであり、それぞれがディレクトリを指します。次に、これらの各ディレクトリで、実行しようとしているコマンドまたはプログラムに一致する実行可能ファイルを検索します。見つかった場合、Bash はそれを起動し、検索を放棄します。

使用できます

echo

を確認するために

$PATH

環境変数を参照して、パス内のディレクトリを確認します。これを行うには、次のように入力して Enter キーを押します。

エコー $PATH

出力リストは、各パスをコロン (:) で区切ります。私たちが使用しているコンピューターでは、Bash は次のディレクトリをこの順序で検索します。

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /user/games
  • /usr/local/games
  • /snap/bin

ファイル システムには /sbin および /bin という名前のフォルダーが多数あるため、混乱が生じる可能性があります。

Linux で where コマンドを使用する方法

それらの道を見守ってください

htg というプログラムの更新バージョンがあるとします。これは現在のディレクトリにあり、次のコマンドを入力して実行できます。

./htg

これは大したプログラムではありません。バージョン番号を出力して終了するだけです。新しいバージョンは 1.2.138 です。

現在の作業ディレクトリでプログラムを実行するには、プログラム名の前に「./」を入力する必要があります。これにより、プログラムがどこにあるかを Bash が認識できるようになります。

この特定のプログラムを任意のディレクトリから実行したいため、実行可能ファイルを /usr/bin ディレクトリに移動します。 Bash はパス内でそのプログラムを見つけて実行します。

現在のディレクトリに実行可能ファイルを置く必要はありません。また、以下に示すように、プログラム名の前に「./」を入力する必要もありません。

 sudo mv htg /usr/bin

次に、次のように入力してプログラムを実行してみましょう。

 htg

何かが実行されますが、それは新しく更新されたプログラムではありません。むしろ、それは古いバージョン、1.2.105 です。

Linux で where コマンドを使用する方法

どのコマンド

上で示した問題は、 which コマンド が設計されたの かということです。

この例では、 which 使用し、調査しているプログラムの名前をコマンド ライン パラメーターとして渡します。

どのhtg

which /usr/local/bin ディレクトリに htg のバージョンが見つかったことを報告します。この場所は、更新された htg を移動したディレクトリの前のパスにあるため、Bash はその以前のバージョンのプログラムを使用します。

ただし、以下に示すように -a (all) オプションを使用すると、一致するものが見つかった場合でも which が続行されます。

どの -htg

次に、パス内のいずれかのディレクトリにある一致するものをすべてリストします。

つまり、それが問題です。パッチ内にもあるディレクトリに、以前のバージョンのプログラムが存在します。そして、そのディレクトリは、プログラムの新しいバージョンをドロップしたディレクトリよりも前に検索されます。

確認するには、次のように入力し、プログラムの各バージョンを明示的に実行します。

 /usr/local/bin/htg

 /usr/bin/htg

これで問題の説明がつき、解決策は簡単です。

実際には、オプションがあります。 /use/local/bin ディレクトリ内の古いバージョンを削除するか、 /usr/bin から /usr/local/bin に移動します。

Linux で where コマンドを使用する方法

結果を見てください

2 つの結果は、必ずしも 2 つのバイナリ ファイルを意味するわけではありません。

-a (all) オプションを指定して which コマンドを使用し、 less プログラムのバージョンを探す例を見てみましょう。

どちらが少ないですか

which less プログラムのバージョンを収容する 2 つの場所を報告していますが、それは本当でしょうか? Linux コンピュータに、 less の 2 つの異なるバージョン (または複数の場所に同じバージョン) がインストールされているのは奇妙です。したがって、 which からの出力を受け入れるつもりはありません。代わりに、もう少し深く掘り下げてみましょう。

ls -l (長いリスト)、および -h (人間が判読できる) オプションを使用して、何が起こっているかを確認できます。

 ls -lh /usr/bin/less

ファイル サイズは 9 バイトと報告されています。それは間違いなく、 less の完全なコピーではありません。

リストの最初の文字は「l」です。通常のファイルの最初の文字はハイフン (-) です。 「l」はシンボリックリンクを意味する記号です。詳細を見逃した場合は、 --> 記号もこれが シンボリック リンク であることを示しており、一種のショートカットと考えることができます。これは、 /bin 内の less のコピーを指します。

/bin にある less のバージョンを使用して再試行してみましょう。

 ls -lh /bin/less

このエントリは明らかに「本物の」バイナリ実行可能ファイルです。リストの最初の文字はハイフン (-) であり、これは通常のファイルであり、ファイル サイズが 167 KB であることを意味します。したがって、 less のコピーは 1 つだけインストールされますが、別のディレクトリからそのコピーへのシンボリック リンクがあり、Bash がパスを検索するときにこれも見つけます。

Linux で where コマンドを使用する方法

複数のコマンドを一度に確認する

複数のプログラムやコマンドを渡す which 、それらを順番にチェックします。

たとえば、次のように入力すると、

どの ping 猫の稼働時間の日付の頭

which 指定したプログラムとコマンドのリストを処理し、それぞれの結果をリストします。

Linux で where コマンドを使用する方法

どっちがどっち?

どうしてもその気になれば、次のように入力して which 自体を使用することもできます。

どれどれ

好奇心から Linux ファイル システムを調べてみることは別として、 which 、コマンドやプログラムからある動作セットを期待していても、別の動作セットが得られる場合に最も役立ちます。

このような場合は、 which 使用して、Bash が起動しているコマンドが使用したいものであることを確認できます。

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · · mkdir · du · ln · パッチ · 変換 · rclone · シュレッド · srm · scp · gzip · chattr · カット · 検索 · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld

関連: 開発者と愛好家のための最高の Linux ラップトップ

「Linux で where コマンドを使用する方法」に関するベスト動画選定!

【Linux入門】初心者向け!Linuxの基本的なコマンド操作を学ぼう!  〜 Ubuntu 環境で実演〜
【ワンポイントレクチャー】Linuxでの圧縮と解凍のコマンド解説【Linux初心者:第6回】