Linux システム内のすべてのハードウェアを読みやすい形式で表示できるコマンドがあったとしたらどうでしょうか? lshw へようこそ。この素晴らしいツールは、熟練した Linux 専門家でも見落とされがちです。
lshw とは何ですか?
lshw
、Linux のインストール時にデフォルトでインストールされるユーティリティまたはそれより優れたツールで、システム内にあるハードウェアのリストを提供します。人は次のように考えることで
lshw
を思い出すことができます
ls
(ディレクトリの内容を一覧表示できるコマンド) および
hw
ハードウェア用。
このツールには多数のフォーマット オプションがあり、検出したデバイスについて詳細な出力が得られ、多数のデバイス タイプを検出できますが、経験豊富な Linux 専門家でもこのツールのことを聞いたことがないかもしれません。おそらく、他のツールが検索エンジンなどで前面に掲載されすぎているのでしょう。
現在、このツールは DMI (x86 および IA-64)、OpenFirmware デバイス ツリー (PowerPC)、PCI/AGP、CPUID (x86)、IDE/ATA/ATAPI、PCMCIA、SCSI、および USB デバイスを検出できます。
別のパッケージ、つまり
lshw-gtk
を使用して、同じツールのグラフィカル バージョンをインストールすることもできます。
lshw
インストールする必要はなく、デフォルトで Linux に組み込まれていますが、コマンド ライン (この記事ではこれに焦点を当てます) ではなく GUI でハードウェアを探索することに興味がある場合は、
lshw-gtk
をインストールします。
lshw-gtkの インストール
Debian/Apt ベースの Linux ディストリビューション (Ubuntu や Mint など) に lshw-gtk をインストールするには、ターミナルで次のコマンドを実行します。
sudo apt install lshw-gtk
RedHat/Yum ベースの Linux ディストリビューション (RHEL、Centos、Fedora など) に lshw-gtk をインストールするには、ターミナルで次のコマンドを実行します。
sudo yum install lshw-gtk
最終的に
lshw-gtk
をインストールする場合は、このツールには予期しないいくつかの奇妙な点があることに注意してください。まず、使用することをお勧めします
sudo lshw-gtk
端末のプロンプトで
lshw-gtk
を起動してください。そうしないと、すべてのハードウェア情報が利用できない可能性があります。
次に、ツールを開始したら、
lshw-gtk
デフォルトではハードウェアをスキャンせず、オンデマンドでのみスキャンするため、上部近くの
[更新]
ボタンをクリックします。
最後に、数秒後にハードウェアがスキャンされると、左端の列にある 1 台の デスクトップ コンピューター を除いて出力が欠落しているように見えます。これをダブルクリックし、次に 2 列目の マザーボード などをダブルクリックします。私自身の経験では、この GUI ツールは作業中に少し制限があることがわかりました。
クラッシュとエラーとアサートの違いを知っていますか?この違いについては 、「アサート、エラー、クラッシュ」 の記事で説明しています。
Linux ターミナルで lshw を探索する
Linux ターミナルで
lshw
を実行すると (通常は、
Windows Key
+
T
キーボードで を押すか、オペレーティング システムのメイン アイコン (Linux Mint の緑の丸のような) を押して
「ターミナル
」と入力すると、ハードウェアの長く冗長な出力が表示されます。
lshw
指示されたことを実行しました。すべてのハードウェアをリストします。
出力を関心のあるものに限定することで、この動作をもう少し改善しましょう。まず、利用可能な出力のハードウェア クラスを調査する必要があります。
これは
lshw -short
を使用して行うことができ、同時にハードウェアの概要をより短く、より読みやすく表示します。ただし、端末の設定によっては、出力リストの長さが 1 ~ 2 ページになる場合があります。
また、この時点では、常に
lshw
sudo
とともに使用することを忘れないでください。これにより、出力が不完全または不正確になることがなくなります。
lshw
Linux オペレーティング システムのコア配布ファイルにデフォルトで含まれているため、
sudo
として
lshw
を実行するのは安全です (有名な最後の言葉!)。それが徹底的に評価されたことを望む人もいるでしょう。
sudo lshw -short |頭 -n6
ここでは、
lshw -short
を使用してすべてのハードウェアの短いリストを要求し、
sudo
を使用して root スーパーユーザーとして実行し、
head -n6
を使用して出力の最初の 6 行に制限しました。 Linux パイプ
|
を使用して、出力を
lshw
から
head
に
パイプしました
。これは、ツールによってレンダリングされた情報を、必要なほぼすべての形式に事後解析する非常に便利な方法です。
これを VirtualBox で実行すると、すぐに興味深い情報が表示されます。lshw
lshw
、システムとバスが
VirtualBox
ベースであることを認識しています。また、この VM (仮想マシン) には 8 GiB のメモリが割り当てられていることがわかります。
また、重要な点として、デバイスのクラスがリストされていることがわかります。これは、次の
lshw
例で使用するものです。
lshw
で使用されるデバイス クラス名は単純で覚えやすいです。
system
、
bus
、
memory
、
bridge
、
generic
、
multimedia
、
disk
、
input
、
volume
、
display
、
network
、
processor
、そして潜在的には他にもいくつかあります。
lshw でクエリを実行するためのデバイス クラスの使用
デバイスのクラス名がわかったので、同じものを
-class
オプション (
-C
と省略できます) と組み合わせて使用して、関心のある特定のデバイスのみをクエリします。使用しているシステムが特に VirtualBox で実行されている仮想化マシンかどうかを検出する簡単な方法はありますか?
sudo lshw -short -C システム
sudo lshw -short -C システム 2>/dev/null | grep -o ‘VirtualBox’
if [ “$(sudo lshw -short -C system 2>/dev/null | grep -o ‘VirtualBox’)” == ‘VirtualBox’ ];次に、「VirtualBox を使用しています!」をエコーします。 else echo ‘これは VirtualBox VM ではありません!’;フィ
ここでは複数のコマンドを実行し、そのたびにコマンドをより複雑に構築しました。最初のコマンドでは、前と同じ方法で単純に
lshw
をクエリします。ただし、今回は
system
クラスのデバイスのみをリストする追加の
-C system
オプションを使用します。
簡単にスキャンすると (スキャンが完了すると出力が消えるため、スクリーンショットには示されていません)、システム クラスのデバイスが表示されます。この場合は VirtualBox システムです。
次のコマンドでは、(
-o
オプションのおかげで) 単語「VirtualBox」のみを grep (選択) します。出力に「VirtualBox」が含まれていない場合、コマンドは何も出力しません。
また、
sudo lshw
エラーを表示する奇妙なケースに備えて、
2>/dev/null
/dev/null
への
stderr
(標準エラー出力) リダイレクトも追加しました。これは、あるコマンドから別のコマンドに情報をパイプするときによく使用されるスクリプト手法ですが、おそらくここではエラーが発生する可能性はほとんどありません (ただし、不可能ではありません)。
最後のコマンドでは、このコードをサブシェル (
$(...)
) に挿入し、次に
if
ステートメントに挿入します。基本的に、
Bash
インタープリターに 2 番目のコマンドの出力が「VirtualBox」と一致するかどうかを確認するように依頼しています。
もしそうなら、私たち
は VirtualBox を使用していると自信を持って言えます。
。コマンド ライン インタープリター/シェルとして
Bash,
VirtualBox を使用していないと仮定して、このコードをマシン上で実行すると、出力は
次のようになります。「This is not a VirtualBox VM!」
その代わり。
まとめ
この記事では、コマンド ラインおよびデスクトップ上の GUI 内から詳細なハードウェアおよびシステム情報を取得するための Linux ツールである
lshw
および
lshw-gtk
について説明しました。
lshw
デバイス クラスを調べた後、
lshw
情報を直接使用して、VirtualBox 内で実行しているかどうかを確認しました。
この記事を読んで気に入った場合は、次の 「strace を使用してシステム コールとシグナルをトレースする方法」を 読んでください。





