目次


Linux の 101 試験対策

ハードウェア設定の構成

Linux 用にシステムを準備する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Linux の 101 試験対策

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Linux の 101 試験対策

このシリーズの続きに乞うご期待。

概要

このチュートリアルでは、Linux システム用にハードウェアを構成し、その構成を確認する方法を学びます。チュートリアルで説明する内容は以下のとおりです。

  • 統合されている周辺機器を有効に (または無効に) する方法
  • 外部周辺機器 (キーボードなど) を使用して (または使用しないで) システムを構成する方法
  • さまざまなタイプの大容量ストレージ・デバイスの相違点
  • コールド・プラグ・デバイスとホット・プラグ・デバイスの違い
  • デバイスが使用するハードウェア・リソースを把握する方法
  • ツールを使用してデバイスを一覧表示して操作する方法
  • sysfs、procfs、udev、dbus の概要

コンピューター・ハードウェア

最近のコンピューターは、1981年に登場した IBM PC から大きな進化を遂げています。速度、メモリー、ストレージ容量の飛躍的な増加を別とすると、最も顕著に変わった点は、おそらく構成とセットアップにあります。このチュートリアルでは、最近のコンピューター上で皆さんが行う可能性がある一般的なハードウェア設定をいくつか取り上げ、ハードウェアを一覧表示して管理するために Linux で使用するコマンドを詳しく探ります。

このチュートリアルは、LPIC-1: Linux Server Professional Certification 101 試験における主題 101 の項目 101.1 に備える上で役に立ちます。この項目は、重要度が 2 とされています。

前提条件

このシリーズのチュートリアルを最大限に活用するには、Linux の基礎知識と、チュートリアルに記載されたコマンドを演習できる実際の Linux システムが必要です。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。このチュートリアルに記載する例は、従来の BIOS (Basic Input-Output Services) またはそれよりも新しい UEFI (Universal Extensible Firmware Interface) がインストールされた 64 ビットのシステムを使用したものです。

ハードウェア設定

一般に、設定を構成するには BIOS ファームウェアまたは UEFI ファームウェアのいずれかを使用します。このチュートリアルでは、UEFI 固有の設定でない限り、「BIOS 設定」という言葉で BIOS 設定と UEFI 設定の両方を表します。

BIOS の設定には、コンピューターの電源をオンにしたときにアクセスすることができます。BIOS の設定にアクセスする通常の方法は、コンピューターの電源をオンにした後、オペレーティング・システムのロードが始まる前に Del、F1、F8 などのキーを押すというものです。マシンが高速化し、ソリッド・ステート・ドライブ (SSD) によってブート時間が数秒にまで短縮されたことから、システムで BIOS 設定にアクセスするための特殊なボタンまたはキー・シーケンスを使用する場合もあります。BIOS 設定にアクセスする方法については、使用しているシステムのドキュメントを調べてください。このセクションの例では、皆さんが目にする可能性がある各種の BIOS 設定を示していますが、皆さんの BIOS インターフェースの実際のレイアウトとは、おそらく異なることと思います。

図 1 に例として示すのは、私が構築したシステムの BIOS メイン画面です。この画面で、システムの日付と時刻を変更することができます。また、昔ながらのフロッピー・ドライブを使っているとしたら、そのパラメーターも変更することができます。この画面には、搭載されているドライブの概要も表示されています。私のシステムには SATA ドライブしか搭載されていませんが、IDE ドライブも、オンボード・コントローラーを介してサポートされます。

図 1. 日付と時刻を設定できる BIOS のメイン画面
日付と時刻を設定できる BIOS メイン画面のスクリーンショット
日付と時刻を設定できる BIOS メイン画面のスクリーンショット

皆さんのシステムが周辺機器のレガシー・インターフェースをサポートしている場合、それらのインターフェースを構成する場所があるはずです。私のシステムでは、「Advanced (詳細設定)」メニューを使用して、シリアル・ポートおよびパラレル・ポートの割り込み要求 (IRQ) と I/O ポートの開始アドレスを構成できるようになっています。図 2 に、私のシステムの詳細設定を示します。レガシーのシリアル・ポートとパラレル・ポートを構成できる他、オンボード LAN コントローラーと 1394 (FireWire) コントローラーを有効または無効に設定できることにも注目してください。LAN コントローラーにはブート ROM もありますが、私は無効に設定しています。システムがリモート・サーバーから LAN 経由でロードを行うようにするには、ブート ROM を有効にしてください。キオスク・マシンを使用している場合や、多数のシステムのイメージ再作成を行う場合は、ブート ROM を有効にする必要があります。

図 2. シリアル・デバイス、パラレル・デバイス、オンボード・デバイスを構成できる BIOS 画面
シリアル・デバイス、パラレル・デバイス、オンボード・デバイスを構成できる BIOS 画面のスクリーンショット
シリアル・デバイス、パラレル・デバイス、オンボード・デバイスを構成できる BIOS 画面のスクリーンショット

BIOS によっては、キーボードやマウスを使わずにブートするために使用できる設定もあります。ブート・エラーが発生した場合、あるいは構成が変更されている場合 (メモリーの追加など)、多くのシステム (特に古いシステム) ではキーを押して BIOS セットアップに切り替えるよう要求してきますが、システムにキーボードがなかったとしたら、どうなるのでしょう?最近では、USB (Universal Serial Bus) キーボードを接続するという方法も考えられますが、PS2 キーボード・コネクターを使用している古いシステムは、キーボードを接続すると壊れる可能性があります。そのため、多くの BIOS システムでは、キーボード自体を無効にするか、あるいはキーボードが存在しない場合に表示される警告を無効にするかの、いずれかが可能です。私のシステムではキーボードを使っているので、「Wait for 'F1' If Error (エラー発生時に「F1」を待機)」設定は有効にしてあります (図 3 を参照)。

図 3. キーボードまたはキーボード・ブート・エラーを無効に設定できる BIOS 画面
キーボードまたはキーボード・ブート・エラーを無効に設定できる BIOS 画面のスクリーンショット
キーボードまたはキーボード・ブート・エラーを無効に設定できる BIOS 画面のスクリーンショット

構成する必要があるかもしれない重要な設定としては、ブート・デバイスの順序も挙げられます。図 4 に示すように、私のシステムは、1 番目のフロッピー・ドライブ、次に 1 番目の SATA ドライブ、そして最後に CD または DVD をチェックするように設定されています。私がフロッピー・ドライブを使わなくなってから数年経っているので、この順序からフロッピー・ドライブを省いたとしても問題はないはずです。ハード・ディスク・ドライブが機能していなければ、その代替手段として CD または DVD を使用することができます。CD または DVD から一度だけブートするように選択する方法については、チュートリアル「Linux の 101 試験対策: システムのブート」を参照してください。

図 4. ブート・デバイスの順序を構成できる BIOS 画面
ブート・デバイスの順序を構成できる BIOS 画面のスクリーンショット
ブート・デバイスの順序を構成できる BIOS 画面のスクリーンショット

UEFI システムでも、日付と時刻、オンボード・デバイスを有効または無効にするかなどを含め、多くの設定は従来の BIOS での設定と同様です。図 5 に、Lenovo Yoga 2 Pro での例を示します。

図 5. 日付、時刻、オンボード・デバイスを構成できる UEFI 画面
日付、時刻、オンボード・デバイスを構成できる UEFI 画面のスクリーンショット
日付、時刻、オンボード・デバイスを構成できる UEFI 画面のスクリーンショット

BIOS との大きな違いの 1 つは、UEFI システムでは当然、UEFI ブートがサポートされることです。システムが UEFI ブートのみをサポートしている場合もあれば、レガシー BIOS のようなブートもサポートしている場合もあります。私のシステムでは、「Boot Mode (ブート・モード)」パラメーターに 2 つの選択肢があります (図 6 を参照)。「Legacy Support (レガシー・サポート)」を選択すると、レガシー・システムまたは UEFI システムをブートすることができます。「UEFI」を選択すると、システムは UEFI システムのブートのみを行うようになります。

図 6. UEFI のブート・モード選択画面
UEFI のブート・モード選択画面のスクリーンショット
UEFI のブート・モード選択画面のスクリーンショット

UEFI ブートのみを選択すると、図 5 に示されている USB レガシー・サポートのオプションを含め、レガシー・サポート関連の項目は表示されなくなります。その一方で、おそらくセキュア・ブートのサポートに関するオプションは表示されます。セキュア・ブートでは、署名付きバイナリーだけをブートすることができます。図 7 に、UEFI ブートのみを選択すると表示されるセキュリティー・オプションの例がいくつか示されています。私のシステムでは、変更できるステータス値とオプションの両方が表示されます。例えば、「Platform Mode (プラットフォーム・モード)」が「User Mode (ユーザー・モード)」に設定されていると、セキュリティー・キーがインストール済みであることが確認されます。セキュリティー・キーがインストールされていない場合には、この値は「Setup Mode (セットアップ・モード)」になるはずです。新しいキーをインストールするには、「Reset to Setup Mode (セットアップ・モードにリセット)」を使用することができます。あるいは、「Restore Factory Keys (工場出荷時のキーを復元)」を使用してプリインストールされた出荷時のキーを復元することもできます。

図 7. UEFI でのセキュア・ブートのオプション
UEFI でのセキュア・ブートのオプションを表示する画面のスクリーンショット
UEFI でのセキュア・ブートのオプションを表示する画面のスクリーンショット

大容量ストレージ・デバイス

コンピューターが使用する大容量ストレージにはいくつかのタイプがあり、大容量ストレージを接続する方法もさまざまです。最近では、ほとんどの大容量ストレージ・デバイスが標準インターフェースを使用しており、デバイスを接続した時点でデバイスが検出されるか、BIOS 構成の大分部が自動になっているかのいずれかです。デバイスに必要なリソースを判断する方法については、このチュートリアルの後の方で説明することとして、まずは一般的な大容量ストレージ・デバイスのさまざまなタイプについて見て行きましょう。

ハード・ディスク・ドライブ

ハード・ディスク・ドライブは、1980年代初頭から PC でのデータ・ストレージの主力製品となってきました。ハード・ディスク・ドライブには密閉ユニットが備わっていて、複数の記録面 (プラッター) が収容されています。1980年に発表された ST-506 は、5 MB の容量があり、コントローラー・カードを使用して、コンピューターからの要求をディスク・プラッター上のデータにアクセスするために必要な内部コマンドに変換するという仕組みでした。1984年に IBM が発表した IBM PC/AT コンピューターには、後に ISA (Industry Standard Architecture) バスとして知られるようになった、16 ビットの AT バスが使用されていました。ST-506 コマンド・セットとの互換性を維持しつつも、AT 接続インターフェース (ATA) でコントローラー・カードとコンピューターの間のインターフェースを標準化したのです。1980年代初頭に、Western Digital 社はコントローラーの機能を、IDE (Integrated Drive Electronics) と名付けたドライブ・ハウジング内に移しました。以降の標準や用語には、ATA-1、ATA-2、ATA-4、EIDE をはじめとし、ATA や IDE という語が使われているものがあります。2003 年に SATA (Serial ATA) が発表されてからは、当初の ATA インターフェースは PATA (Parallel ATA) という名前で呼ばれるようになりました。

よく使われているディスク接続インターフェースには、SCSI (Small Computer System Interface) もあります。SCSI は、ハード・ディスク・ドライブやプリンターをはじめとする各種デバイスを接続するために 1978年頃に開発されたインターフェース規格です。大規模なサーバーでは今でも SCSI ディスクがよく使われています。

当初の ATA インターフェースはハード・ディスク・ドライブ用に設計されたものです。この ATA インターフェースを他のデバイス (フロッピー・ドライブ、Zip ドライブ、CD ドライブなど) にも使用できるように拡張したのが、ATAPI (ATA Packet Interface) です。ATAPI は、通常のハード・ディスク・ドライブには必要のなかった機能 (例えば、メディアの存在の検出機能、メディアの取り出し機能など) を追加します。ATAPI インターフェースは SCSI コマンドをパケットで受け渡せることから、さまざまなデバイス・タイプをサポートします。

最近の内部ハード・ディスク・ドライブは一般に、SCSI 接続または SATA 接続のいずれかを使用しています。USB、IEEE-1394 (FireWire)、eSATA (External Serial Advanced Technology Attachment)、または Apple の Thunderbolt を使用すれば、ドライブを外付けすることもできます。

ハード・ディスク・ドライブは、異なる用途に応じてその領域を分割するためにパーティション化することも、複数のハード・ディスク・ドライブをアレイという形に束ねて冗長性をもたらすこともできます。さらに、論理ボリューム・マネージャーなどのツールを使用して、複数のハード・ディスク・ドライブをグループ化して束ねることで、容量が比較的小さい複数のディスクを、容量が比較的大きい 1 つまたは複数のディスクのように見せることもできます。

CD ドライブ、DVD ドライブ

CD ドライブ、DVD ドライブ、ブルーレイ・ドライブは、フロッピー・ドライブより遥かに大量のデータを保持するために、光学式ストレージを使用しています。初期の頃の CD ドライブはサウンド・カードを介して接続することが多く、多種多様なインターフェースがありました。その後の CD ドライブ、次いで登場した DVD ドライブは、ATAPI インターフェースに標準化されました。現在、CD ドライブは SATA を使用して内部に接続されるか、ハード・ディスク・ドライブに使われるような類のインターフェースを使用して外部に接続されます。ソフトウェア・パッケージは CD や DVD で配布されることがよくあります。CD と DVD は当初、読み取り専用のメディアでしたが、今ではデバイスやメディアを使用して、ユーザーがバックアップやデータ・ストレージ用に独自の CD と DVD を作成すること (焼くこと) が可能になっています。

フラッシュ・ドライブまたはサム・ドライブ

現在、データを交換するのに最も一般的な手段となっているのは、フラッシュ・ドライブとも呼ばれているサム・ドライブでしょう。サム・ドライブは、不揮発性 RAM を使用してデータを保管します。フロッピー・ディスクに比べ、サム・ドライブは遥かに信頼性が高く、高速で、容量も遥かに上回ります。しかも CD メディアや DVD メディアとは異なり、何度も再利用することができます。サム (thumb) ドライブはその名のとおり、大抵は人間の親指サイズで、通常は USB ポートに接続します。ほとんどのサム・ドライブがサポートしているのは、最大速度 480 Mbps の USB 2.0 です。新しいデバイスになると、最大速度 5 Gbps の USB 3.0 をサポートしています。このチュートリアルを作成している時点でのサム・ドライブの標準的なサイズは 1 GB から 256 GB ですが、少数ながらも、512 GB および 1 TB のモデルがあります。サム・ドライブは、ハード・ディスク・ドライブと同じようにパーティション化することができます。新しい Linux ディストリビューションをダウンロードする場合、それを USB サム・ドライブに焼いて、そのデバイスからインストールすることもできます。

ソリッド・ステート・ドライブ

ソリッド・ステート・ドライブ (SSD) は、多くのノートブック・コンピューターで使用されている新しい形のドライブです。従来のハード・ディスク・ドライブと比べると、SSD は軽量かつ高速で、消費電力が少なく、機械的故障が生じることがありません。SSD は、ノートブックのドライブのように内蔵され、これらのドライブと同じインターフェースを使用するのが通常ですが、この仕組みだと、理論上可能な SSD の能力が制限される可能性があります。PCIe (PCI Express) ベースのソリッド・ステート・ドライブ用に開発された、NVMe (NVM Express) という新しい接続仕様は、PCIe でより有効に SSD を活用できるように設計されています。

ホット・プラグとコールド・プラグ

PCMCIA (Personal Computer Memory Card International Association) 仕様とその後の CardBus 仕様に従ってリムーバブル・カードをサポートするノートブック・ハードウェアが登場したことにより、フロッピー・ドライブが CD ドライブへと置き換わったのと同様に、デバイスのホット・プラグが一般的になりました。Linux では 2001年のカーネル 2.4 から、ホット・プラグのサポートを導入しています。一方、「コールド・プラグ」は、ブート時にコンピューターに物理的に接続されているデバイスを指す、似たような言葉として使われています。

USB デバイスと IEEE-1394 FireWire デバイスが登場してからは、ホット・プラグは例外的なことではなく、むしろ標準となりました。最近のハイエンド・サーバーでは、単一システム上で多重化された Linux システムの間でメモリーや CPU などのリソースを動的に移動することができるため、ほとんどすべてのものがホット・プラグとなり得ます。このことから、Linux システムでは現在、システムを起動するために数限られたコールド・プラグ・デバイスのみを使用し、その他すべてのものは、udev ルールを駆動するホット・プラグ・イベントを使ってアクティブにするようになっています。従って、コールド・プラグ・デバイスさえも再スキャンが行われて udev イベントが駆動され、実質的にホット・プラグ・デバイスになります。

ハードウェアおよびシステムの情報を格納するための仮想ファイル

いくつかの仮想ファイル・システムは、カーネルから見たシステムの情報をインメモリーで提供します。これらのファイル・システムは、ストレージ・デバイス上に実際のファイルが存在しないという意味で「仮想的」ですが、正しい意味では、これらの仮想ファイル・システムは、カーネル・データ構造とシステム・ハードウェアに関する情報を提供します。

sysfs と /sys

sysfs は、Linux カーネルがカーネル・オブジェクトに関する情報をユーザー空間で実行中のプロセスにエクスポートするために使用する仮想ファイル・システムです。sysfs は2.6 カーネルで導入されました。その基になっているのは、2.4 カーネルで導入された ramfs です。インメモリー・ファイル・システムである sysfs は、仮想ファイル・システムとして /sys にマウントされます。初期化中に /etc/fstab 内のエントリーによってマウントされなかったとしても、以下のコマンドを使うことで、随時 sysfs をマウントすることができます。

mount -t sysfs sysfs /sys

sysfs は、オブジェクトの属性を表すファイルを格納する、単純なファイル・システムです。オブジェクト自体は、ディレクトリーによって表されます。オブジェクト間の関係は、シンボリック・リンクによって表されます。sysfs の最上位ディレクトリーが表すのは、主要なサブシステムです。リスト 1 に、最上位の /sys ディレクトリーと、その下にある /sys/bus および /sys/devices ディレクトリーの例を示します。

リスト 1. sysfs ファイル・システムのエントリーの例
[ian@atticf22 ~]$ ls /sys
block  class  devices   fs          kernel  power
bus    dev    firmware  hypervisor  module
[ian@atticf22 ~]$ ls /sys/bus
acpi         edac          i2c           mipi-dsi     platform  usb
clockevents  event_source  machinecheck  node         pnp       usb-serial
clocksource  firewire      mdio_bus      pci          scsi      workqueue
container    hdaudio       media         pci_express  serio     xen
cpu          hid           memory        pcmcia       snd_seq   xen-backend
[ian@atticf22 ~]$ ls /sys/devices/
breakpoint  ibs_fetch  LNXSYSTM:00  platform  software  tracepoint
cpu         ibs_op     pci0000:00   pnp0      system    virtual

/sys/block を調べると、ブロック・デバイスが見つかります。私が使用している 3 つのハード・ディスク・ドライブはそれぞれ、sda、sdb、sdc で、CD/DVD ドライブは sr0 です。これらは実際には、/sys/devices ディレクトリーの下にあるディレクトリーへのリンクになっています。これらのリンクを辿ることで、sda のパーティションが見つかります。ファイル・サイズを見ると、このディスクには 2,040,192 のセクターがあることがわかります。この値は、fdisk -l で確認することができます (リスト 2 を参照)。

リスト 2. /sys 内のブロック・デバイス
[ian@atticf22 ~]$ ls /sys/block
sda  sdb  sdc  sr0
[ian@atticf22 ~]$ ls -l /sys/block
total 0
lrwxrwxrwx. 1 root root 0 Sep  9 12:11 sda -> 
../devices/pci0000:00/0000:00:11.0/ata1/host0/target0:0:0/0:0:0:0/block/sda
lrwxrwxrwx. 1 root root 0 Sep  9 12:11 sdb -> 
../devices/pci0000:00/0000:00:11.0/ata2/host1/target1:0:0/1:0:0:0/block/sdb
lrwxrwxrwx. 1 root root 0 Sep  9 12:11 sdc -> 
../devices/pci0000:00/0000:00:11.0/ata3/host2/target2:0:0/2:0:0:0/block/sdc
lrwxrwxrwx. 1 root root 0 Sep 10 20:30 sr0 -> 
../devices/pci0000:00/0000:00:14.1/ata6/host5/target5:0:0/5:0:0:0/block/sr0
[ian@atticf22 ~]$ ls /sys/"devices/pci0000:00/0000:00:11.0/ata1/host0/target0:0:0/0:0:0:0/block/sda"
alignment_offset   events             power      sda10  sda5  slaves
bdi                events_async       queue      sda11  sda6  stat
capability         events_poll_msecs  range      sda12  sda7  subsystem
dev                ext_range          removable  sda2   sda8  trace
device             holders            ro         sda3   sda9  uevent
discard_alignment  inflight           sda1       sda4   size
[ian@atticf22 ~]$ ls /sys/"devices/pci0000:00/0000:00:11.0/ata1/host0/target0:0:0/0:0:0:0/block/sda"/sda1
alignment_offset  discard_alignment  inflight   power  size   stat       trace
dev               holders            partition  ro     start  subsystem  uevent
[ian@atticf22 ~]$ cat \
> /sys/"devices/pci0000:00/0000:00:11.0/ata1/host0/target0:0:0/0:0:0:0/block/sda"/sda1/size
2040192
[ian@atticf22 ~]$ su -
Password: 
[root@atticf22 ~]# fdisk -l /dev/sda1
Disk /dev/sda1: 996.2 MiB, 1044578304 bytes, 2040192 sectors

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos

tree コマンドは、/sys を探索するのに役立つツールです。コロン (:) などの特殊文字は引用符で囲むか、バックスラッシュ文字 (¥) を使用してエスケープする必要があることにも注意してください。

procfs と /proc

procfs ファイル・システムは、多くのカーネル・データ構造を知る手掛かりとなるだけでなく、臨機応変にカーネル・データ構造のいくつかに変更を加えるために使用できる場合もあります。procfs は /proc にマウントされるのが一般的です。リスト 3 は、私のシステム上の /proc をリスト表示したものです。

リスト 3. /proc のリスト表示
[ian@atticf22 ~]$ ls /proc
1     1274  1891  2155  254   460   559   7651       devices      mtrr
10    1278  19    2160  255   468   56    768        diskstats    net
107   1281  1903  2174  256   47    562   7745       dma          pagetypeinfo
1080  1287  1947  2185  257   48    565   7885       driver       partitions
1083  13    1951  22    26    488   57    799        execdomains  sched_debug
11    1326  1952  2243  2604  490   570   8          fb           scsi
1120  14    1957  2261  2650  495   585   8077       filesystems  self
1121  15    1959  2264  266   496   588   8159       fs           slabinfo
1144  1548  1971  2289  27    5     590   8182       interrupts   softirqs
1181  1557  1990  23    2711  50    599   8189       iomem        stat
1187  1561  1996  2310  28    51    603   859        ioports      swaps
1192  1591  1999  2327  285   512   6243  9          irq          sys
1195  1659  2     2338  286   513   64    940        kallsyms     sysrq-trigger
1199  1662  20    2341  29    517   66    942        kcore        sysvipc
12    17    2040  2342  3     518   669   947        keys         thread-self
1206  1728  2046  24    30    52    67    949        key-users    timer_list
1226  1734  2052  2438  31    53    68    973        kmsg         timer_stats
1230  1789  2057  2440  32    539   6896  acpi       kpagecount   tty
1232  1792  21    2442  33    54    69    asound     kpageflags   uptime
1243  1796  2111  2444  36    548   7     buddyinfo  loadavg      version
1246  18    2117  2448  37    549   749   bus        locks        vmallocinfo
1249  1804  2119  25    375   55    7505  cgroups    mdstat       vmstat
1254  1808  2122  250   392   551   751   cmdline    meminfo      zoneinfo
1256  1828  2126  251   407   5525  753   consoles   misc
1265  1836  2133  252   411   553   759   cpuinfo    modules
1269  1853  2153  253   459   557   762   crypto     mounts

ご覧のように、名前が番号になっているディレクトリーが多数あります。これらのディレクトリーは、システム上で実行中のプロセスごとに 1 つ存在します。ディレクトリーに付けられている番号は、プロセス ID (PID) です。リスト 4 に、現在実行中の bash コマンド・プロンプト (PID=$$ は、現在実行中の PID です) に関する最初のいくつかのエントリーを示します。procfs ファイル・システムのほぼすべてのエントリーは、空でないとしてもその長さは 0 であることに注意してください。cat コマンドを使用すると、データを確認することができます。ほとんどのエントリーは改行文字で終了していないので、リスト 4 では明確にするために echo コマンドを使用しています。

リスト 4. 現在実行中のプロセスの /proc エントリーの表示
[ian@atticf22 ~]$ ls -l /proc/$$/ | head -n 15
total 0
dr-xr-xr-x. 2 ian ian 0 Sep 10 22:44 attr
-rw-r--r--. 1 ian ian 0 Sep 10 22:44 autogroup
-r--------. 1 ian ian 0 Sep 10 22:44 auxv
-r--r--r--. 1 ian ian 0 Sep 10 22:44 cgroup
--w-------. 1 ian ian 0 Sep 10 22:44 clear_refs
-r--r--r--. 1 ian ian 0 Sep 10 20:35 cmdline
-rw-r--r--. 1 ian ian 0 Sep 10 22:44 comm
-rw-r--r--. 1 ian ian 0 Sep 10 22:44 coredump_filter
-r--r--r--. 1 ian ian 0 Sep 10 22:44 cpuset
lrwxrwxrwx. 1 ian ian 0 Sep 10 22:44 cwd -> /home/ian
-r--------. 1 ian ian 0 Sep 10 22:44 environ
lrwxrwxrwx. 1 ian ian 0 Sep 10 20:35 exe -> /usr/bin/bash
dr-x------. 2 ian ian 0 Sep 10 20:08 fd
dr-x------. 2 ian ian 0 Sep 10 22:44 fdinfo
bash[ian@atticf22 ~]$ # Now display our command line
bash[ian@atticf22 ~]$ cat /proc/$$/cmdline;echo ""
bash

procfs ファイル・システムで値を設定することによって制御できるパラメーターは、sysctl コマンドを使って制御することもできます。詳細については、sysctl および procfs の man ページを参照してください。

procfs ファイル・システムは、システムで使用している割り込みリソース、ダイレクト・メモリー・アクセス (DMA) リソース、および I/O ポート・リソースに関する情報も提供します。

リスト 5 に、私のシステム上の /proc/interrupts の中身を示します。ISA バスを使用した従来型のシングル・プロセッサーのコンピューターは、ある有名な割り込み (IRQ) リソース、I/O ポート・リソース、DMA リソースを使用します。これらのリソースとして提供される量は限られているので、IRQ 5 を必要とするサウンド・カードを追加すると、同じく IRQ 5 を必要とする 2 つ目のパラレル・ポートを使用できなくなる場合があります。PCI バスには MSI (Message Signalling Interrupt) の機能が組み込まれているため、従来型のシステムに見られるリソースの制約は大幅に緩和されました。ISA バスのデバイス割り込みには 0 から 15 までの番号が付いています。このシステムには IRQ7 を使用するプリンター・パラレル・ポートがありますが、一般に IRQ3 または IRQ4 を使用するシリアル・ポートはありません。エラー・メッセージを受け取った場合、またはデバイスが機能せず、割り込みの競合が疑われる場合には、/proc/interrupts を調べることが、問題解決の糸口になります。

リスト 5. /proc/interrupts のリスト表示
[ian@atticf22 ~]$ cat /proc/interrupts 
           CPU0       CPU1       
  0:        133          0   IO-APIC-edge      timer
  1:          0          2   IO-APIC-edge      i8042
  7:          0          0   IO-APIC-edge      parport0
  8:          0          1   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          1          4   IO-APIC-edge      i8042
 14:          0          0   IO-APIC-edge      pata_atiixp
 15:        157     166172   IO-APIC-edge      pata_atiixp
 16:        752     764097   IO-APIC  16-fasteoi   ohci_hcd:usb3, ohci_hcd:usb4, snd_hda_intel
 17:        125      74351   IO-APIC  17-fasteoi   ehci_hcd:usb1, firewire_ohci
 18:          0          3   IO-APIC  18-fasteoi   ohci_hcd:usb5, ohci_hcd:usb6, ohci_hcd:usb7
 19:          4       1264   IO-APIC  19-fasteoi   ehci_hcd:usb2, snd_hda_intel
 22:        286     186458   IO-APIC  22-fasteoi   0000:00:11.0
 27:       1073    1250614   PCI-MSI-edge      enp3s0
 28:       7457   10965287   PCI-MSI-edge      nvkm

NMI:        850        888   Non-maskable interrupts
LOC:   25779766   25467714   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:        850        888   Performance monitoring interrupts
IWI:          0          2   IRQ work interrupts
RTR:          0          0   APIC ICR read retries
RES:   40628246   39894661   Rescheduling interrupts
CAL:        823        986   Function call interrupts
TLB:    1972576    2052293   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:        568        568   Machine check polls
HYP:          0          0   Hypervisor callback interrupts
ERR:          0
MIS:          0

DMA は、ISA バス・システムで使用されていた手法です。これによって、ハード・ディスク・ドライブなどの高速デバイスは、プロセッサーを関与させることなく、コンピューターのメモリーにデータを転送することができました。DMA によって、デバイスに対してデータの読み取り/書き込みを行っている間、プロセッサーは他の処理のために解放されます。これと同じような目的を実現するために、PCI バス・アーキテクチャーではバス・マスタリングを使用しています。リスト 6 に、私のシステム上の /proc/dma の中身を示します。ISA バス・リソースがある場合、通常はこれよりも多くの情報が表示されます。それらの情報は、競合を診断する助けとしてこの情報が必要になる場合があります。

リスト 6. /proc/interrupts のリスト表示
[ian@atticf22 ~]$ cat /proc/dma
 4: cascade

問題を解決する助けとして利用できるリソース・リストには、/proc/ioports 内の I/O ポートのリストもあります。ISA バス・システムで使用されるいくつかの I/O ポートは、一般に一番目のパラレル・ポートに使用される 0378 から 037a までの範囲のポートなど、よく知られているものです。ポートは 16 進数で指定されることに注意してください。.

リスト 7. /proc/ioports のリスト表示
[ian@atticf22 ~]$ cat /proc/ioports
0000-0cf7 : PCI Bus 0000:00
  0000-001f : dma1
  0020-0021 : pic1
  0040-0043 : timer0
  0050-0053 : timer1
  0060-0060 : keyboard
  0061-0061 : PNP0800:00
  0064-0064 : keyboard
  0070-0071 : rtc0
  0080-008f : dma page reg
  00a0-00a1 : pic2
  00c0-00df : dma2
  00f0-00ff : PNP0C04:00
    00f0-00ff : fpu
  0170-0177 : 0000:00:14.1
    0170-0177 : pata_atiixp
  01f0-01f7 : 0000:00:14.1
    01f0-01f7 : pata_atiixp
  0230-023f : pnp 00:07
  0290-029f : pnp 00:07
  0300-030f : pnp 00:07
  0376-0376 : 0000:00:14.1
    0376-0376 : pata_atiixp
  0378-037a : parport0
  03c0-03df : vga+
  03f6-03f6 : 0000:00:14.1
    03f6-03f6 : pata_atiixp
  03f8-03ff : serial
  040b-040b : pnp 00:06
  04d0-04d1 : pnp 00:06
  04d6-04d6 : pnp 00:06
  0800-0803 : ACPI PM1a_EVT_BLK
  0804-0805 : ACPI PM1a_CNT_BLK
  0808-080b : ACPI PM_TMR
  0810-0815 : ACPI CPU throttle
  0820-0827 : ACPI GPE0_BLK
  08ff-08ff : ACPI PM2_CNT_BLK
  0900-090f : pnp 00:06
  0910-091f : pnp 00:06
  0a30-0a3f : pnp 00:07
  0b00-0b3f : pnp 00:06
    0b20-0b2f : pnp 00:06
  0c00-0c01 : pnp 00:06
  0c14-0c14 : pnp 00:06
  0c50-0c51 : pnp 00:06
  0c52-0c52 : pnp 00:06
  0c6c-0c6c : pnp 00:06

  0c6f-0c6f : pnp 00:06
  0cd0-0cd1 : pnp 00:06
  0cd2-0cd3 : pnp 00:06
  0cd4-0cd5 : pnp 00:06
  0cd6-0cd7 : pnp 00:06
  0cd8-0cdf : pnp 00:06
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
  8000-800f : 0000:00:11.0
    8000-800f : ahci
  9000-9003 : 0000:00:11.0
    9000-9003 : ahci
  a000-a007 : 0000:00:11.0
    a000-a007 : ahci
  b000-b003 : 0000:00:11.0
    b000-b003 : ahci
  c000-c007 : 0000:00:11.0
    c000-c007 : ahci
  d000-dfff : PCI Bus 0000:01
    dc00-dc7f : 0000:01:00.0
  e000-efff : PCI Bus 0000:03
    e800-e8ff : 0000:03:00.0
      e800-e8ff : r8169
  fe00-fefe : pnp 00:06
  ff00-ff0f : 0000:00:14.1
    ff00-ff0f : pata_atiixp

lsdev コマンド

procinfo パッケージに含まれている lsdev コマンドは、デバイスごとの DMA、IRQ、I/O ポートの情報を単純な表形式に集約することによって、/proc からの情報を簡潔に表示します。リスト 8 に、私のシステム上の lsdev の出力を示します。

リスト 8. lsdev の出力
[ian@atticf22 ~]$ lsdev
Device            DMA   IRQ  I/O Ports
------------------------------------------------
0000:00:11.0             22  8000-800f 9000-9003 a000-a007 b000-b003 c000-c007
0000:00:14.1                 0170-0177 01f0-01f7 0376-0376 03f6-03f6 ff00-ff0f
0000:01:00.0                 dc00-dc7f
0000:03:00.0                 e800-e8ff
acpi                      9 
ACPI                         0800-0803 0804-0805 0808-080b 0810-0815 0820-0827 08ff-08ff
ahci                         8000-800f 9000-9003 a000-a007 b000-b003 c000-c007
cascade             4       
dma                          0080-008f
dma1                         0000-001f
dma2                         00c0-00df
enp3s0                   27 
firewire_ohci            17 
fpu                          00f0-00ff
i8042                  1 12 
keyboard                     0060-0060 0064-0064
nvkm                     28 
ohci_hcd:usb7            18 
parport0                  7  0378-037a
pata_atiixp           14 15  0170-0177 01f0-01f7 0376-0376 03f6-03f6 ff00-ff0f
PCI                          0000-0cf7 0cf8-0cff 0d00-ffff d000-dfff e000-efff
pic1                         0020-0021
pic2                         00a0-00a1
pnp                          0230-023f 0290-029f 0300-030f 040b-040b 04d0-04d1 04d6-04d6 0900-090f 
                             0910-091f 0a30-0a3f 0b00-0b3f 0b20-0b2f 0c00-0c01 0c14-0c14 0c50-0c51 
                             0c52-0c52 0c6c-0c6c 0c6f-0c6f 0cd0-0cd1 0cd2-0cd3 0cd4-0cd5 0cd6-0cd7 
                             0cd8-0cdf fe00-fefe
PNP0800:00                   0061-0061
PNP0C04:00                   00f0-00ff
r8169                        e800-e8ff
rtc0                      8  0070-0071
serial                       03f8-03ff
snd_hda_intel         16 19 
timer                     0 
timer0                       0040-0043
timer1                       0050-0053
vga+                         03c0-03df

procinfo パッケージには、/proc からの DMA、IRQ、I/O ポート以外の情報を要約する procinfo コマンドも含まれています。詳細については、実際にこのコマンドを試してみるか、man ページを参照してください。

udev と /dev

udev は、ホット・プラグ・デバイスに必要となる動的なデバイス管理を行うツールです。構成済みのアクティブなデバイスに関する情報は、/dev 仮想ファイル・システムに格納されます。システムにデバイスが追加されたとき、あるいはシステムからデバイスが取り外されたとき (つまりシステムの状態が変更されたとき) には、カーネルは、udev イベントを管理する systemd-udevd.service デーモンにイベントを送信します。すると、このデーモンはデバイスを識別するために、構成済みのルールを検索して、イベントをルールと突き合わせます。カーネルが通常割り当てる名前は、意味がある名前ではなく、入力しやすいものでもないことから、udev が割り当てるのは、より意味のある一貫した名前であるのが一般的です。

udev ルールは /usr/lib/udev/rules.d 内にあり、他のローカル・ルールは /etc/udev/rules.d 内にあります。追加のルールは、揮発性の /run/udev/rules.d ディレクトリーに作成することができます。udev を構成するには、/etc/udev/udev.conf ファイルを使用します。

/dev ファイル・システムは、システム上のデバイスを記述します。長いリストには、最初の列に以下の 4 つの値のうちのいずれかが示されます。

b
ブロック・デバイス (ディスク・ドライブなど) を表します。
c
キャラクター・デバイス (端末またはプリンターなど) または特殊デバイス (null など) を表します。
d
ディレクトリーを表します。
l
/dev、/proc、または /run のいずれかにある、別のファイル・ディレクトリーへのシンボリック・リンクを表します。

リスト 9 に、私のシステム上の /dev のリストを一部抜粋して示します。ここに、各タイプのエントリーの例が示されています。

リスト 9. /dev のリスト表示の一部
[ian@atticf22 ~]$ ls -l /dev| head -n 60
total 0
crw-------. 1 root root     10, 235 Sep  9 12:11 autofs
drwxr-xr-x. 2 root root         620 Sep 11 06:05 block
drwxr-xr-x. 2 root root         140 Sep 11 06:05 bsg
crw-rw----. 1 root disk     10, 234 Sep  9 12:11 btrfs-control
drwxr-xr-x. 3 root root          60 Sep  9 12:11 bus
lrwxrwxrwx. 1 root root           3 Sep  9 12:11 cdrom -> sr0
drwxr-xr-x. 2 root root        3820 Sep 11 09:59 char
crw-------. 1 root root      5,   1 Sep  9 12:12 console
lrwxrwxrwx. 1 root root          11 Sep  9 12:11 core -> /proc/kcore
drwxr-xr-x. 4 root root         100 Sep  9 12:11 cpu
crw-------. 1 root root     10,  62 Sep  9 12:11 cpu_dma_latency
drwxr-xr-x. 8 root root         160 Sep 11 06:05 disk
drwxr-xr-x. 2 root root         100 Sep  9 12:11 dri
crw-rw----. 1 root video    29,   0 Sep  9 12:11 fb0
lrwxrwxrwx. 1 root root          13 Sep  9 12:11 fd -> /proc/self/fd
crw-rw-rw-. 1 root root      1,   7 Sep  9 12:11 full
crw-rw-rw-. 1 root root     10, 229 Sep  9 14:46 fuse
crw-------. 1 root root    249,   0 Sep  9 12:11 fw0
crw-------. 1 root root    250,   0 Sep  9 12:11 hidraw0
crw-------. 1 root root    250,   1 Sep 11 09:59 hidraw1
crw-------. 1 root root     10, 228 Sep  9 12:11 hpet
drwxr-xr-x. 3 root root           0 Sep  9 12:11 hugepages
crw-------. 1 root root     10, 183 Sep  9 12:11 hwrng
lrwxrwxrwx. 1 root root          25 Sep  9 12:11 initctl -> /run/systemd/initctl/fifo
drwxr-xr-x. 4 root root         420 Sep 11 09:59 input
crw-r--r--. 1 root root      1,  11 Sep  9 12:11 kmsg
crw-rw-rw-+ 1 root kvm      10, 232 Sep  9 12:11 kvm
lrwxrwxrwx. 1 root root          28 Sep  9 12:11 log -> /run/systemd/journal/dev-log
crw-rw----. 1 root disk     10, 237 Sep  9 12:11 loop-control
crw-rw----. 1 root lp        6,   0 Sep  9 12:11 lp0
crw-rw----. 1 root lp        6,   1 Sep  9 12:11 lp1
crw-rw----. 1 root lp        6,   2 Sep  9 12:11 lp2
crw-rw----. 1 root lp        6,   3 Sep  9 12:11 lp3
drwxr-xr-x. 2 root root          60 Sep  9 12:11 mapper
crw-------. 1 root root     10, 227 Sep  9 12:11 mcelog
crw-------. 1 root root    247,   0 Sep  9 12:11 media0
crw-r-----. 1 root kmem      1,   1 Sep  9 12:11 mem
crw-------. 1 root root     10,  59 Sep  9 12:11 memory_bandwidth
drwxrwxrwt. 2 root root          40 Sep  9 12:11 mqueue
drwxr-xr-x. 2 root root          60 Sep  9 12:11 net
crw-------. 1 root root     10,  61 Sep  9 12:11 network_latency
crw-------. 1 root root     10,  60 Sep  9 12:11 network_throughput
crw-rw-rw-. 1 root root      1,   3 Sep  9 12:11 null
crw-------. 1 root root     10, 144 Sep  9 12:11 nvram
crw-rw-r--. 1 root lp       99,   0 Sep  9 12:11 parport0
crw-r-----. 1 root kmem      1,   4 Sep  9 12:11 port
crw-------. 1 root root    108,   0 Sep  9 12:11 ppp
crw-rw-rw-. 1 root tty       5,   2 Sep 11 10:33 ptmx
drwxr-xr-x. 2 root root           0 Sep  9 12:11 pts
crw-rw-rw-. 1 root root      1,   8 Sep  9 12:11 random
drwxr-xr-x. 2 root root          60 Sep  9 12:11 raw
crw-rw-r--+ 1 root root     10,  58 Sep  9 14:46 rfkill
lrwxrwxrwx. 1 root root           4 Sep  9 12:11 rtc -> rtc0
crw-------. 1 root root    254,   0 Sep  9 12:11 rtc0
brw-rw----. 1 root disk      8,   0 Sep  9 12:11 sda
brw-rw----. 1 root disk      8,   1 Sep  9 12:11 sda1
brw-rw----. 1 root disk      8,  10 Sep  9 12:11 sda10
brw-rw----. 1 root disk      8,  11 Sep  9 12:11 sda11
brw-rw----. 1 root disk      8,  12 Sep  9 12:11 sda12

リスト 10 に、ハード・ディスク・ドライブ・パーティションにカーネルが割り当てた名前と、よりわかりやすい名前との間のリンクを示します。

リスト 10. わかりやすいハード・ディスク・ドライブ名へのシンボリック・リンク
[ian@atticf22 ~]$ ls -l /dev/block/8\:?
lrwxrwxrwx. 1 root root 6 Sep  9 12:11 /dev/block/8:0 -> ../sda
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:1 -> ../sda1
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:2 -> ../sda2
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:3 -> ../sda3
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:4 -> ../sda4
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:5 -> ../sda5
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:6 -> ../sda6
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:7 -> ../sda7
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:8 -> ../sda8
lrwxrwxrwx. 1 root root 7 Sep  9 12:11 /dev/block/8:9 -> ../sda9
[

udev イベントを管理またはモニターするには、udevadm コマンドを使用することができます。詳細については、man ページを参照してください。

ツールとユーティリティー

PCI デバイスおよび USB デバイスに関する情報を判断するには、いくつかの有用なツールを使用することができます。ここでは、そのうちの lspcilsusb について見ていきましょう。

PCI と lspci

オプションを指定しないで lspci を使用すると、PCI デバイスの基本的なリストが表示されます。表示される内容は、使用しているシステム・ハードウェアによって異なります。リスト 11 は、このチュートリアルの大部分で使用してきた Fedora 22 デスクトップ・システム上の PCI デバイスのリストです。

リスト 11. lspci を使用したデスクトップ PCI デバイスの表示
[ian@atticf22 ~]$ # Fedora 22
[ian@atticf22 ~]$ lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS780 Host Bridge
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780 PCI to PCI bridge (ext gfx port 0)
00:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 1)
00:06.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780 PCI to PCI bridge (PCIE port 2)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller 
        [IDE mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 3a)
00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor HyperTransport 
        Configuration
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Link Control
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)
02:00.0 FireWire (IEEE 1394): JMicron Technology Corp. IEEE 1394 Host Controller
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit 
        Ethernet Controller (rev 02)

リスト 12 は、Lenovo Yoga 2 Pro ノートブック上で稼働している Ubuntu 15.04 システム上の PCI デバイスのリストです。

リスト 12. lspci を使用したノートブック PCI デバイスの表示
ian@ubuntu:~$ # Ubuntu 15.04
ian@ubuntu:~$ lspci
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation Device 0a03 (rev 09)
00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4)
00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
00:1f.6 Signal processing controller: Intel Corporation 8 Series Thermal (rev 04)
01:00.0 Network controller: Intel Corporation Wireless 7260 (rev 6b)

lspci コマンドがデータの大部分を検索する場所は、/usr/share/hwdata/pci.ids ファイルです。このファイルには、既知のすべての ID (ベンダー、デバイス、クラス、およびサブクラス) のリストが含まれています。ベンダーとデバイスのコードは、これらに割り当てられている番号です。名前の代わりに番号を表示するには、-n オプションを指定します。ローカル・データベースにまだ格納されていない新しいデバイスがある場合は、DNS ルックアップを使用して中央の PCI ID サーバー・データベースにクエリーを実行するために -q オプションを指定します。そこにデバイスが見つかると、デバイスの情報が ~/.pciids-cache に保存されるため、以降は -q を指定せずにコマンドを実行しても、そのデバイスが認識されます。

PCI トポロジーは、ドメイン、バス、スロット、機能の 4 つのレベルで記述されます。これらのコンポーネントのいずれかを -s オプションで指定することで、出力を制限することができます。-t オプションを指定すると、出力がツリー・ビューに表示されます。lspci のその他のオプションは、出力の詳細とフォーマットを制御するためのものです。より詳細な出力を表示することも、より簡潔な出力を表示することも、出力をマシン向けまたは人間が読むのに適したものにすることもできます。

リスト 13 は、-t および -v オプションを指定して表示した、私のシステム上のスロット 00 のデバイスのトポロジー・ツリーです。

リスト 13. lspci -tv の出力
[ian@atticf22 ~]$ lspci -tvv -s \:00
-+-[0000:03]---00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet
                     Controller
 +-[0000:02]---00.0  JMicron Technology Corp. IEEE 1394 Host Controller
 +-[0000:01]-+-00.0  NVIDIA Corporation GF119 [GeForce GT 610]
 |           \-00.1  NVIDIA Corporation GF119 HDMI Audio Controller
 \-[0000:00]---00.0  Advanced Micro Devices, Inc. [AMD] RS780 Host Bridge

-d オプションを指定して、ベンダー ID、デバイス、またはクラスで出力を制限することもできます。また、-k オプションを指定すると、デバイスを処理しているカーネル・ドライバーと、デバイスを処理可能なカーネル・モジュールがわかります。リスト 14 に、私のシステム上の NVIDIA グラフィックおよびサウンド・デバイスに関する出力を記載します。NVIDIA のベンダー ID は 10de です。これは、lspci-nn オプションを指定することで調べることができます。

リスト 14. -d オプションと -k オプションを指定した lspci の出力
[ian@atticf22 ~]$ lspci -d 10de\:
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)
[ian@atticf22 ~]$ lspci -d 10de\: -k
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1)
	Subsystem: ASUSTeK Computer Inc. Device 8496
	Kernel driver in use: nouveau
	Kernel modules: nouveau
01:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)
	Subsystem: ASUSTeK Computer Inc. Device 8496
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

lspci のその他多数のオプションについては、man ページを参照してください。他のオプションの中には、PCI デバイスに関する詳細な情報にアクセスできるものもあります。また、root ユーザーが PCI デバイスを照会および構成するために使用できる、setpci コマンドもあります。このコマンドの詳細についても、man ページを参照してください。

USB と lsusb

USB デバイスに関する情報を表示するには、lsusb コマンドを使用します。lspci の場合と同じく、-t オプションを指定すると、ツリー・レイアウトで情報が表示されます (リスト 15 を参照)。

リスト 15. lsusb のツリー出力
[root@atticf22 ~]# lsusb -t
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 12M
        |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 4: Dev 15, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 5: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 13, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 6: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 6: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 6: Dev 4, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 6: Dev 4, If 3, Class=Audio, Driver=snd-usb-audio, 480M

USB デバイスはハブに接続します。ツリーの最上位にあるルート・ハブは、USB 1、2、または 3 をサポートすることができます。OHCI (または UHCI) ドライバーは USB 1.1 (12 Mbps) をサポートし、EHCI ドライバーは USB 2.0 (480 Mbps) を、XHCI ドライバーはUSB 3.0 (5 Gbps) をサポートします。USB 3.0 用に開発された、より高速なUAS (USB Attached SCSI) プロトコルは、USB 2.0 の速度もサポートします。UAS は、カーネル 3.15 で Linux に導入されました。

接続デバイスは、以下のクラスに分類されます。

  • ヒューマン・インターフェース・デバイス: このクラスに分類されるのは、キーボードやマウスなどのデバイスです。
  • 通信デバイス: モデム、シリアル/イーサネット/WiFi インターフェースが含まれます。
  • 大容量ストレージ・デバイス: ハード・ディスク・ドライブ、CD および DVD ドライブ、フラッシュ・ドライブ、メモリー・カード・リーダー、カメラなどです。
  • オーディオ・デバイス: サウンド・カード、MIDI デバイス、スピーカー、マクロフォンが含まれます。
  • 赤外線通信を使用する IrDA デバイス: 医療機器やテスト装置などが含まれます。
  • プリンター・デバイス: プリンターの他、数値制御マシンなどのデバイスが含まれます。
  • ビデオ・デバイス: Web カメラが含まれます。

接続された多くのデバイスはクラス・ドライバーを使用します。例えば、ストレージ・デバイスには usb-storage が使用され、マウスやキーボードなどのヒューマン・インターフェース・デバイスには usbhid、カスケード接続されたハブには hub が使用されます。リスト 15 に記載するリストには、2 つのヒューマン・インターフェース・デバイス (マウスとキーボード) と、ストレージ・デバイス (サム・ドライブ) が接続された USB 2.0 ハブが含まれています。特化されたデバイスには、そのデバイス固有のドライバーが必要になることもあります。

PCI デバイスの場合と同じく、出力を制限するには、USB トポロジーを基準にするか、ベンダー ID またはデバイス ID を基準にすることができます。リスト 16 に、それぞれの例を示します。

リスト 16. lsusb の出力の制限
[ian@atticf22 ~]$ lsusb -d 046d:
Bus 001 Device 004: ID 046d:081b Logitech, Inc. Webcam C310
Bus 003 Device 015: ID 046d:c50e Logitech, Inc. Cordless Mouse Receiver
[ian@atticf22 ~]$ lsusb -s 01:
Bus 001 Device 004: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

USB 情報をグラフィックで表示するために使用できる、usbview コマンドもあります。この場合、データは左ペインのツリー・ビューに表示されます。エントリーを選択すると、その詳細が右ペインに表示されます。図 8 の例では、USB ドライブの詳細が表示されています。

図 8. usbview の使用
usbview を使用した場合のスクリーンショット
usbview を使用した場合のスクリーンショット

メッセージ・パッシングと D-Bus

新しいハードウェアが接続されたとき、あるいはプリンターが用紙切れになったときに、ユーザーへの通知が必要になることはよくあります。D-Bus (別名 dbus) は、freedesktop.org 主導の下で開発されたメッセージ・パッシング・バスです。D-Bus では単一のシステム・デーモンによって、カーネル空間とユーザー空間の間で、新規ハードウェアの検出などといったイベントに関する通信ができるようになります。例えば、CD または DVD がドライブに挿入された際、あるいは USB サム・ドライブが接続された際に D-Bus メッセージでユーザーに通知を配信すると、通知の受け取り側アプリケーションはファイル・ブラウザーを開くなどといったアクションを提案することができます。

また、ログインした時点で起動される、ユーザーごとのセッション・デーモンもあります。このユーザー・デーモンは、ユーザー・アプリケーション間のプロセス間通信を行います。D-Bus プロトコルは一般的な 1 対 1 のメッセージ・パッシング・フレームワークです。このフレームワークを使用すると、メッセージ・パッシングを使用せずに dbus デーモンによって、2 つのアプリケーションが通信できる場合もあります。

D-Bus の詳細については、「関連トピック」を参照してください。

カーネル・モジュール

かなり昔に遡ると、コンピューターのオペレーティング・システムは、接続されている特定のハードウェア一式を処理するように構成され、構築されていました。デバイスがオペレーティング・システムのカーネルに組み込まれていなければ、そのデバイスを追加したり使用したりするのは不可能でした。デバイスの多様性が増大し、ホット・プラグで動的にデバイスを追加する必要性が高まったことから、このモデルはもはや機能しなくなりました。現在、カーネルは最小限に抑えられ、デバイスのサポートは、ローダブル・カーネル・モジュール (LKM) によって構成されるようになっています。通常は、ブート・プロセスの一環としてロードされる初期 RAM ディスクに、デバイス・サポート・モジュールの基本セットが含まれています。システムが稼働状態になった時点で、カーネルがシステムを詳細に調べ、新しいデバイスが検出された時点で必要なデバイス・モジュールをロードします。

カーネル・モジュールを調べて操作するために使用するコマンドはいくつかあります。そのうち、ここでは lsmodmodinfo、および modprobe を取り上げます。初期の insmod コマンドおよび rmmod コマンドの機能は、今ではそれよりも強力な modprobe コマンドで置き換わっています。

lsmod の使用

lsmod コマンドは、/proc/modules からの情報のフォーマットを整えて、Linux システム内にあるモジュールの現在のステータスを示します。lsmod コマンドにオプションはありません。リスト 17 に、私のシステム上のモジュールのステータスをリスト表示した一部を抜粋します。

リスト 17. lsmod によるモジュール・ステータスのリスト表示の一部
[ian@atticf22 ~]$ lsmod 
Module                  Size  Used by
vfat                   24576  1
fat                    69632  1 vfat
uas                    24576  0
usb_storage            65536  2 uas
xt_CHECKSUM            16384  1
ipt_MASQUERADE         16384  3
nf_nat_masquerade_ipv4    16384  1 ipt_MASQUERADE
nf_conntrack_netbios_ns    16384  0
nf_conntrack_broadcast    16384  1 nf_conntrack_netbios_ns
ip6t_rpfilter          16384  1
ip6t_REJECT            16384  2
nf_reject_ipv6         16384  1 ip6t_REJECT
xt_conntrack           16384  22
ebtable_nat            16384  1
ebtable_broute         16384  1
ebtable_filter         16384  1
ebtables               32768  3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_nat           16384  1
nf_conntrack_ipv6      20480  12
nf_defrag_ipv6         36864  1 nf_conntrack_ipv6
nf_nat_ipv6            16384  1 ip6table_nat
ip6table_mangle        16384  1
ip6table_security      16384  1
ip6table_raw           16384  1
ip6table_filter        16384  1
ip6_tables             28672  5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,
                                ip6table_raw
iptable_nat            16384  1
nf_conntrack_ipv4      16384  12
nf_defrag_ipv4         16384  1 nf_conntrack_ipv4
nf_nat_ipv4            16384  1 iptable_nat
nf_nat                 28672  3 nf_nat_ipv4,nf_nat_ipv6,nf_nat_masquerade_ipv4
nf_conntrack          106496  9 nf_conntrack_netbios_ns,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,
                                nf_nat_masquerade_ipv4,nf_conntrack_broadcast,nf_conntrack_ipv4,
                                nf_conntrack_ipv6
iptable_mangle         16384  1
iptable_security       16384  1
iptable_raw            16384  1
bnep                   24576  2
bluetooth             491520  5 bnep
rfkill                 24576  2 bluetooth
fuse                   94208  3
tun                    28672  1
bridge                114688  1 ebtable_broute
ppdev                  20480  0
uvcvideo               90112  0
kvm_amd                65536  0
kvm                   495616  1 kvm_amd
videobuf2_vmalloc      16384  1 uvcvideo
videobuf2_core         49152  1 uvcvideo
videobuf2_memops       16384  1 videobuf2_vmalloc
v4l2_common            16384  1 videobuf2_core
videodev              159744  3 uvcvideo,v4l2_common,videobuf2_core
media                  24576  2 uvcvideo,videodev
snd_usb_audio         180224  3
k10temp                16384  0
btrfs                 974848  0
edac_core              53248  0
...

modinfo の使用

modinfo コマンドは、モジュールに関する情報を入手するために使用します。このコマンドでは、完全なファイル名を指定することも、モジュール名だけを指定することもできます。リスト 18 に、vfat モジュールに関する情報を示します。これは、FAT でフォーマットされたさまざまな形態のドライブを処理するモジュールです。

リスト 18. vfat モジュールに関する情報
[ian@atticf22 ~]$ modinfo vfat
filename:       /lib/modules/4.1.6-200.fc22.x86_64/kernel/fs/fat/vfat.ko.xz
author:         Gordon Chaffee
description:    VFAT filesystem support
license:        GPL
alias:          fs-vfat
depends:        fat
intree:         Y
vermagic:       4.1.6-200.fc22.x86_64 SMP mod_unload 
signer:         Fedora kernel signing key
sig_key:        95:D8:8B:1A:62:3B:BF:DF:EF:E2:58:6B:05:ED:0A:C5:C2:88:C1:3A
sig_hashalgo:   sha256

モジュールの情報には、ファイルへのフル・パスと、モジュールを指すために使用されている他の名前 (エイリアス) に関する情報が含まれます。依存関係が存在する場合は、その情報もリスト表示されます。リスト 18 を見ると、vfat モジュールは fs-vfat とも呼ばれていて、fat という名前の別のモジュールに依存していることがわかります。これらのモジュール名を使用して modinfo を実行してみてください。

-F オプションまたは --field オプションを使用すると、出力を特定のフィールドに制限することができます。このオプションは、スクリプトに役立ちます。

完全なファイル名を指定しなかった場合、modinfo は /lib/modules/<バージョン>/kernel の中でモジュールを検索します。ここで <バージョン> は、uname -r を実行すると表示されるカーネル・リリースです。リスト 18 の例では、vfat.ko.xz ファイル (vfat カーネル・モジュール) が /lib/modules/4.1.6-200.fc22.x86_64/kernel/fs/fat 内で検出されています。リスト 19 に、システム上でモジュール・ファイルの検索を開始する方法を示します。

リスト 19. システム上でのモジュール・ファイルの検索
[ian@atticf22 ~]$ uname -r
4.1.6-200.fc22.x86_64
[ian@atticf22 ~]$ ls /lib/modules/$(uname -r)
build                modules.dep          modules.softdep
kernel               modules.dep.bin      modules.symbols
modules.alias        modules.devname      modules.symbols.bin
modules.alias.bin    modules.drm          source
modules.block        modules.modesetting  updates
modules.builtin      modules.networking   vdso
modules.builtin.bin  modules.order
[ian@atticf22 ~]$ ls /lib/modules/$(uname -r)/kernel
arch  crypto  drivers  fs  kernel  lib  mm  net  security  sound

/lib/modules/$(uname -r) ディレクトリーには、依存関係をリスト表示する modules.dep や、エイリアスをリスト表示する modules.alias など、いくつかのプレーン・テキスト・ファイルも見つかるはずです。modules.builtin ファイルは、カーネルに組み込まれているモジュールをリスト表示します。これらのモジュールには、ほとんどのシステムでコア機能に必要なドライバーが含まれています。lsusb の出力に示されていた ehci-pci ドライバーに関する情報を modinfo で調べようとしても、ehci-pci ドライバーは組み込みドライバーであるため、このドライバーに関する情報は検出されません。リスト 20 に、このシナリオを示します。

リスト 20. 組み込みドライバーの検索
[ian@atticf22 ~]$ modinfo ehci-pci
modinfo: ERROR: Module ehci-pci not found.
[ian@atticf22 ~]$ grep ehci /lib/modules/4.1.6-200.fc22.x86_64/modules.builtin
kernel/drivers/usb/host/ehci-hcd.ko
kernel/drivers/usb/host/ehci-pci.ko

modprobe の使用

lspcilsusblsmodmodinfo の各出力からわかるように、システムは複数のカーネル・モジュールを使用してデバイスを駆動しています。また、出力にはこれらのモジュールの一部に依存関係があることも示されていました。従って、適切なモジュールを正しい順序でロードすることが重要です。以前はシステムにモジュールを挿入するたびに手作業で insmod を実行し、システムからモジュールを削除するときには手作業で rmmod を実行していましたが、幸い、その作業は modprobe コマンドが引き受けるようになっています。

例として、Ubuntu 16.04.1 LTS システム上の irnet モジュールを使用します。このモジュールに関する詳細を表示するには、リスト 21 に示すように modinfo を実行します。

リスト 21. irrnet のモジュール情報
ian@ubuntu:~$ modinfo irnet
ian@attic-u16:~$ modinfo irnet
filename:       /lib/modules/4.4.0-59-generic/kernel/net/irda/irnet/irnet.ko
alias:          char-major-10-187
license:        GPL
description:    IrNET : Synchronous PPP over IrDA
author:         Jean Tourrilhes <jt@hpl.hp.com>
srcversion:     2883ED607A4D54A94830F37
depends:        irda
intree:         Y
vermagic:       4.4.0-59-generic SMP mod_unload modversions 
ian@attic-u16:~$ modinfo -F depends irda
crc-ccitt

ご覧のように、このモジュールは irda に依存しており、irda は crc-ccitt に依存しています。grep を使って modules.dep ファイルで irda または crc-ccitt を検索すると、ドライバー・サポートのモジュール化の値を確認することができます。これらのドライバーのそれぞれが、他の多くのドライバーで使用されます。

ドライバーを手作業でロードまたはアンロードする場合、モジュールをロードつまり挿入するには -a (または --all) オプションを指定して modprobe を実行し、モジュールをアンロードつまり削除するには -r オプションを指定して modprobe を実行します。-n--dry-run、または --show オプションを指定すると、実行される処理をあらかじめ確認することができます。これらのオプションは、-v オプションと一緒に指定して詳細を表示するのが通常です。リスト 22 には、irda モジュールをロードする場合に行われることになる処理内容が示されています。

リスト 22. irnet モジュールのロードのドライ・ラン
ian@attic-u16:~$ modprobe -nav irnet
insmod /lib/modules/4.4.0-59-generic/kernel/lib/crc-ccitt.ko 
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irda.ko 
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irnet/irnet.ko

上記の出力に示されているように、insmod コマンドは依存関係が解決された必須モジュールのそれぞれをロードする必要がありました。

modprobe コマンドは、ロード済みのモジュールを考慮します。リスト 23 では、最初に crc-ccitt モジュールをロードしてから、別のドライ・ランを実行し、最後に irnet モジュールをロードしています。実際にロードまたはアンロードするには root 権限が必要であることに注意してください。

リスト 23. irnet モジュールのロード
ian@attic-u16:~$ sudo modprobe -av crc-ccitt
insmod /lib/modules/4.4.0-59-generic/kernel/lib/crc-ccitt.ko 
ian@attic-u16:~$ modprobe -nav irnet
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irda.ko 
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irnet/irnet.ko 
ian@attic-u16:~$ sudo modprobe -av irnet
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irda.ko 
insmod /lib/modules/4.4.0-59-generic/kernel/net/irda/irnet/irnet.ko 
ian@attic-u16:~$ lsmod | grep "ir[dn]\|ccitt"
irnet                  24576  0
irda                  196608  1 irnet
crc_ccitt              16384  1 irda

モジュールを削除するには、-r オプションを指定して modprobe を実行します。モジュールが使用されている場合は、そのモジュールを削除することはできません。リスト 24 にいくつかの例を記載します。

リスト 24. irnet モジュールのアンロード
ian@attic-u16:~$ modprobe -nvr crc-ccitt
modprobe: FATAL: Module crc_ccitt is in use.
ian@attic-u16:~$ modprobe -nvr irnet
rmmod irnet
ian@attic-u16:~$ sudo modprobe -vr crc-ccitt
modprobe: FATAL: Module crc_ccitt is in use.
ian@attic-u16:~$ sudo modprobe -vr irnet
rmmod irnet
rmmod irda
rmmod crc_ccitt

モジュールのパラメーター

一部のモジュールにはパラメーターがあります。例えば、デバイス・ドライバーは、どの IRQ または I/O ポートを使用するのかを把握する必要があります。リスト 25 に、そのようなパラメーターを持つ nsc-ircc モジュールに関するモジュール情報を記載します。

リスト 25. パラメーターを持つモジュール
ian@attic-u16:~$ modinfo nsc-ircc
filename:       /lib/modules/4.4.0-59-generic/kernel/drivers/net/irda/nsc-ircc.ko
license:        GPL
description:    NSC IrDA Device Driver
author:         Dag Brattli <dagb@cs.uit.no>
srcversion:     9AA374A6DFC1C886D632DC3
alias:          acpi*:IBM0071:*
alias:          pnp:dIBM0071*
alias:          acpi*:HWPC224:*
alias:          pnp:dHWPC224*
alias:          acpi*:NSC6001:*
alias:          pnp:dNSC6001*
depends:        irda
intree:         Y
vermagic:       4.4.0-59-generic SMP mod_unload modversions 
parm:           qos_mtt_bits:Minimum Turn Time (int)
parm:           io:Base I/O addresses (array of int)
parm:           irq:IRQ lines (array of int)
parm:           dma:DMA channels (array of int)
parm:           dongle_id:Type-id of used dongle (int)

モジュールのパラメーターは、モジュールをロードする際に modprobe コマンド・ラインで指定します。パラメーターに関する詳細、および使用可能なその他の modprobe オプションの詳細については、man ページを参照してください。

Tこれで、Linux でのハードウェア設定についての入門チュートリアルを終わります。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1027004
ArticleTitle=Linux の 101 試験対策: ハードウェア設定の構成
publish-date=06292017