LPIC 101 例題集

LPIC 101の例題集を一つにまとめただけのページ

注意: オリジナルは以下のリンク先であることを御承知おき下さい。

LPIC1例題解説(101試験)|Linux技術者認定機関 LPI-Japan [エルピーアイジャパン]

101.1 ハードウェア設定の決定と構成

今回は101試験の試験範囲から「101.1 ハードウェア設定の決定と構成」についての例題を解いてみます。

■例題
Linuxとハードウェアに関する説明として間違っているものを選びなさい。

1. /proc以下の仮想ファイルを見ることで各種ハードウェアの情報を得られる
2. ロード済みのデバイスドライバモジュールはinsmodコマンドで確認できる
3. modprobeコマンドを使うとモジュールの依存関係を解決してロードできる
4. PCIデバイスの確認にはlspciコマンドを使用する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. ロード済みのデバイスドライバモジュールはinsmodコマンドで確認できる です。

Linuxカーネルの重要な役割として、様々なハードウェアを管理し、利用できるようにすることが挙げられます。そのために、Linuxカーネルはハードウェアを認識し、適切なデバイスドライバをロードする必要があります。

Linuxカーネルに認識されているハードウェアの情報は、/procディレクトリ以下にある仮想ファイルシステムによって、仮想ファイルとして見ることができます。情報はcatコマンドなどで見ることができるので、/procディレクトリ以下を色々と覗いてみると面白い発見があるでしょう。

各種ハードウェアデバイスは、デバイスドライバがロードされていてはじめて利用できます。基本的な機能はLinuxカーネル本体に組み込まれていますが、選択肢が多いデバイスではカーネルモジュールとしてデバイスドライバが用意されています。モジュールのロードされている状態はlsmodコマンドで確認できます。必要なモジュールはinsmodコマンドでロードします。

モジュールは、基本的なモジュールとデバイスドライバ個別のモジュールに分割されている場合があります。このような場合、個別モジュールは基本モジュールに依存していることになります。このような依存関係を解決して、モジュールをまとめて一括ロードするには、modprobeコマンドを使用します。

いくつかのデバイスはPCIバスに接続されています。デバイスが認識されているかどうか、あるいはデバイスの種類を確認するためにlspciコマンドでPCIバスに接続されているデバイスを確認するのは、トラブルシューティングでは良く使用する方法です。

○lspci実行例
 lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
(以下略)

101.1 ハードウェア設定の決定と構成

今回は101試験の試験範囲から「101.1 ハードウェア設定の決定と構成」についての例題を解いてみます。

■例題
lsmodの説明として正しいものを選びなさい。

1. カーネルモジュールをロードしたりアンロードしたりするコマンドである。
2. 指定したカーネルモジュールの情報を表示するコマンドである。
3, カーネルモジュールの状態を表示するコマンドである。
4. カーネルモジュールをロードするコマンドである。

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 3, カーネルモジュールの状態を表示するコマンドである。 です。

実際には /proc/modulesの内容を整形し、現在ロードされているカーネルモジュールの表示を行います。

「1. カーネルモジュールをロードしたりアンロードしたりするコマンドである。」は、
modprobeコマンドの説明です。

「2. 指定したカーネルモジュールの情報を表示するコマンドである。」は、
modinfoコマンドの説明です。
"modinfo [オプション] モジュール"
と引数にモジュール名を指定することで、
指定した対象のモジュールの情報を表示します。

「4. カーネルモジュールをロードするコマンドである。」は、
insmodコマンドの説明です。
"insmod カーネルモジュール [モジュールオプション]"
と引数にカーネルモジュールを指定することでカーネルに指定したモジュールをインストールします。
ただし、依存関係は考慮されないため、依存関係を考慮してくれるmodprobeを使う方が望ましいです。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


101.1ハードウェア設定の決定と構成

今回は101試験の試験範囲から「101.1 ハードウェア設定の決定と構成」についての例題を解いてみます。

■例題
接続されているハードディスクのパーティション情報を取得するために利用できる/procディレクトリのファイルを選びなさい。

1. /proc/cpuinfoca
2. /proc/modules
3. /proc/partitions
4. /proc/swaps

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. /proc/partitions です。

ハードディスクは複数の領域(パーティション)に分割して利用できますが、このパーティション情報はハードディスクのパーティションテーブルに書き込まれています。この情報を参照して、どのようなパーティションが存在するか確認できるのが/proc/partitionsファイルです。


○/proc/partitionsの参照例
$ cat /proc/partitions
major minor  #blocks  name

   8     0   31457280 sda
   8     1   31455269 sda1
   8    16  104857600 sdb
   8    17  104856223 sdb1


この例では、/dev/sda、/dev/sdbの2つのハードディスクが接続されており、それぞれおよそ30GB、100GBの容量となっています。それぞれ1つけパーティションが作成されています。

新品のハードディスクを接続した直後など、簡単にデバイス名を知る方法として覚えておくと便利でしょう。

101.1ハードウェア設定の決定と構成

4月1日から、試験の出題範囲がバージョン3.0へと変更されましたので、サンプル問題の出題もリセットし、あらためて101試験の頭から見ていこうと思います。

今回は101試験の試験範囲から、「101.1 ハードウェア設定の決定と構成」についての例題を解いてみます。

■例題
udevについての説明として適切なものを選びなさい。

  1. udevはUSB接続のデバイスを脱着可能にする仕組みである
  2. udevはルールに基づいて様々なデバイスノードを作成する仕組みである
  3. udevはユニバーサルアクセスを実現する仕組みである
  4. udevはUnicodeに対応したデバイスを提供する仕組みである

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. udevはルールに基づいて様々なデバイスノードを作成する仕組みである です。

従来のUNIX的なデバイスの取り扱いは、/devディレクトリの下に様々なデバイスファイルを作成し、このデバイスファイルを経由してデバイスにアクセスする方式を取っていました。たとえばディスクであれば/dev/hdaや/dev/sdbといったデバイスファイルが利用できました。

しかし現在のようにデバイスの種類が増え、また電源を入れたままの脱着が可能なデバイスまでをサポートするにこれまでの方式では困難ということで、udevがカーネル2.6からサポートされるようになりました。

udevの特長としては、各種デバイスの取り扱い方について、/etc/udev/rules.dディレクトリ以下に配置されたルールファイルに記述する方式を取っていることです。
従来のデバイスファイルに比べると可読性も高くなっており、デバイスの設定変更などが行いやすくなっています。

一度、設定ファイルの中を覗いてみてください。

101.1ハードウェア設定の決定と構成

今回は、101試験の出題範囲から「101.1 ハードウェア設定の決定と構成」についての例題を解いてみます。

■例題
使用しているLinuxシステムのIRQを調べるには、どのファイルを参照すればよいか。

1. /proc/cpuinfo
2. /proc/dma
3. /proc/ioports
4. /proc/interrupts
5. /proc/pci


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4になります。

Linuxシステムの様々な設定状態は、/procディレクトリ以下の各種ファイルを参照することで確認できます。
この/procディレクトリは、実際にハードディスクなどの記憶メディアに存在するのではなく、システム起動後に作られる仮想的なファイルシステムとなります。
ファイルの設定は、テキストデータとして参照することができるので、catコマンドなどで設定を確認することができます。

選択肢に出ている各ファイルは、以下の情報を保持しています。

/proc/cpuinfo CPUの情報
/proc/dma DMA転送の情報
/proc/ioports 入出力に使用するI/Oポートの状況
/proc/interrupts IRQの情報
/proc/pci PCIバスの情報
通常のLinuxシステムの使用ではほとんど参照することがないファイルですが、システムによって保持している情報が異なるので、複数のシステムで内容の違いを確認してみるとよいでしょう。

101.2 システムのブート

今回はLPIC101試験の試験範囲から、「101.2 システムのブート」についての例題を解いてみます。

■例題
BIOSから起動されるLinuxシステムのブートプロセスの順序として2番目にあたるものを選びなさい。

1. ルートファイルシステムのマウント
2. ブートローダ
3. initプロセスの起動
4. カーネルイメージとinitramfsのメモリロード
5. BIOSの起動

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「2. ブートローダ」です。

Linuxシステムは以下の順序で実行されます。
1. BIOSの起動
   メモリのチェック、ハードウェア設定の読み込み、起動デバイスのチェック、起動デバイスのMBRに格納されたブートローダを実行します。

2. ブートローダ
   カーネルをメモリにロードし、OSに制御を引き渡します。
   Linuxで使用されるブートローダはGRUB2やGRUBがよく使われていますが、古いディレクトリビューションではLILOが利用されています。
    またDVDやUSBから起動するライブメディアなどは、SYSLINUXが利用されています。

3. カーネルとinitramfsのメモリロード
   まずカーネルの読み込みを行います。
   その後、カーネルはinitramfsのマウントを行い、initramfsに保存されたカーネルモジュールの読み込みを行います。
   カーネルモジュールの読み込みを行うことで、必要なドライバを全て読み込み、ルートファイルシステムのマウントが出来るようになります。

4. ルートファイルシステムのマウント
   ルートファイルシステムの検索、エラーチェック、マウントを行います。

5. initプロセスの起動
   プロセスID1のプロセスinitが起動され、システムの初期化を行います。
   その後、ランレベルに応じたサービスを起動します。
   最近では、initプロセスでなくsystemdによるシステムの起動が行われています。

1~5それぞれで何が行われているかも理解しておくことで、システムの起動時に問題が起きた際の原因特定に役立てることができます。
電源を入れてから起動が完了するまでのプロセスを確認しておきましょう。

◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


101.2システムのブート

今回は101試験の試験範囲から「101.2 システムのブート」についての例題を解いてみます。

■例題
dmesgコマンドで確認できない情報を選びなさい。

1. CPU
2. ディスク
3. ネットワーク
4. ユーザアカウント

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. ユーザアカウント です。

dmesgコマンドはカーネルのログを確認することができます。カーネルのログはリングバッファと呼ばれる領域に書き込まれており、dmesgコマンドはこの領域を参照しています。リングバッファはその名の通りリング上になっているので、容量の末尾まで書き込むと先頭に戻って上書きされていく性質を持っていますが、通常の使用方法でバッファが一杯になることはあまり無いでしょう。

dmesgコマンドはCPUやメモリ、ディスクなどのデバイスについて、システム起動時の初期化の情報を参照することができます。ハードウェアが正常に利用できないような時、そもそも初期化が正常に行えていないようなケースを確認するために活用できます。

○dmesgコマンドの実行例
# dmesg
Linux version 2.6.16.33-xen
(root@vmhost003.internal.bvap001.begi.net) (gcc バージョン 3.4.6
20060404 (Red Hat 3.4.6-3)) #3 SMP Sat Mar 10 19:23:27 JST 2007
BIOS-provided physical RAM map:
 Xen: 0000000000000000 - 0000000080800000 (usable)
1328MB HIGHMEM available.
727MB LOWMEM available.
NX (Execute Disable) protection: active
On node 0 totalpages: 526336
  DMA zone: 186366 pages, LIFO batch:31
  DMA32 zone: 0 pages, LIFO batch:0
  Normal zone: 0 pages, LIFO batch:0
  HighMem zone: 339970 pages, LIFO batch:31
ACPI in unprivileged domain disabled
Built 1 zonelists
Kernel command line:  root=/dev/hda2 ro 3
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
PID hash table entries: 4096 (order: 12, 65536 bytes)
Xen reported: 2266.746 MHz processor.
(以下略)

この例では、Linuxカーネルのバージョン、Xenの仮想環境上で動作していること、メモリ量、ルートパーティションのデバイス名、CPUの性能などの情報を読み取ることができます。

101.2システムのブート

今回は101試験の試験範囲から「101.2 システムのブート」についての例題を解いてみます。

■例題
dmesgの説明として間違っているものを選びなさい。

1. dmesgコマンドはカーネル起動時のメッセージを表示する
2. /var/log/dmesgを参照することでdmesgコマンドの表示と同様のことが行える
3. dmesgにはサービス起動のエラーなども記録されている
4. dmesgの記録はリングバッファのため、一定容量を超えると上書きされる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. dmesgにはサービス起動のエラーなども記録されている です。

Linux上で動作するサービスのログは通常syslogで記録するか、プログラムが独自のログを出力して記録されますが、Linuxカーネル起動時にはsyslogなどは動作していないため、独自のログ記録の仕組みを持っています。このログを参照するためのコマンドがdmesgコマンドです。

dmesgコマンドは、カーネル起動時のハードウェアの認識、初期化などの様子を参照することができるため、特にハードウェア周りのトラブルなどが発生した場合、解決の手がかりとして有用です。

○dmesgコマンドの実行例
# dmesg
Linux version 2.6.9-103.EL (mockbuild@builder10.centos.org) (gcc
version 3.4.6 2
0060404 (Red Hat 3.4.6-11)) #1 Fri Dec 9 04:14:04 EST 2011
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
 BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved)
 BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000bfef0000 (usable)
 BIOS-e820: 00000000bfef0000 - 00000000bfeff000 (ACPI data)
 BIOS-e820: 00000000bfeff000 - 00000000bff00000 (ACPI NVS)
 BIOS-e820: 00000000bff00000 - 00000000c0000000 (usable)
 BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
 BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
 BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
2176MB HIGHMEM available.
896MB LOWMEM available.
found SMP MP-table at 000f6bf0
Using x86 segment limits to approximate NX protection
(以下略)


この実行例では、カーネル起動後、BIOSから物理メモリ領域に関する情報を取得し、その後NX(No eXecute)保護の仕組みを有効にしていることが分かります。省略していますが、その後各種ハードウェアの初期化などが行われている様子が確認できるでしょう。

dmesgで参照している領域は、リングバッファと呼ばれる構造を持っています。通常のログファイルなどと異なり、指定された量を超えると先頭に戻って情報を上書きするようになっています。通常の利用ではバッファが溢れて先頭に戻ることはほとんどありませんが、独自のカーネルを使用している場合などには注意が必要かもしれません。

101.3ランレベルの変更とシステムのシャットダウンまたはリブート

今回は、101試験の出題範囲から「 101.3 ランレベルの変更とシステムのシャットダウンまたはリブート」についての例題を解いてみます。

■例題
システムのデフォルトのランレベルを定義しているファイルとして正しいものを選びなさい。

1. /etc/fstab
2. /etc/grub.conf
3. /etc/inittab
4. /etc/mtab
5. /etc/rc.d/rc.local


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. /etc/inittab です。

Linuxシステムでは、ランレベルによって、システムの状態を設定します。
ランレベルは、以下のように定義されています。

0 システム停止
1 シングルユーザーモード
2 ネットワーク無しマルチユーザーモード
3 マルチユーザーモード
4 未使用
5 Xを使用したGUI
6 再起動
0と6はシステムを停止したり、再起動するために使用されるランレベルで、

0 = shutdown -hの実行
6 = shutdown -rの実行

によってそれぞれのランレベルに移行します。

システム起動時には、/etc/inittabファイルに記述されている値によって起動直後のランレベルが設定されます。

○デフォルトがランレベル3に設定されている例
id:3:initdefault:

この値を書き換えれば、起動時に自動的にX Window Systemを起動するような設定に変更できます。

指定されたランレベルで行う初期化処理は、/etc/inittabの以下の記述によって処理されています。

---
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
---

まず共通の初期化処理として/etc/rc.d/rc.sysinitが実行され、次に指定されたランレベルを引数として/etc/rc.d/rcが実行されます。/etc/rc.d/rcは、内部的に/etc/rc.d/rc○.dの中にあるスクリプトを順次実行するようになっています。
※○はランレベルの数字

これらはすべてシェルスクリプトで記述されているので、流れを逐一追ってみるとよいでしょう。

ちなみに、なぜランレベル5でXが起動するかというと、/etc/inittabファイルに次のような記述があるからです。

○/etc/inittabに記述されたX起動の指示

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

ここで指定されている/etc/X11/prefdmはシェルスクリプトで、好みのディスプレイマネージャー(xdmやgdm、kdmなど)を起動する処理を行っています。

101.3 ランレベルの変更とシステムのシャットダウンまたはリブート

今回は101試験の試験範囲から「101.3 ランレベルの変更とシステムのシャットダウンまたはリブート」についての例題を解いてみます。

■例題
ランレベル変更の説明として間違っているものを選びなさい。

1. ランレベル変更はtelinitコマンドで行う
2. ログインしているユーザーにwallコマンドで通知が行える
3.  runlevelコマンドで現在のランレベルが確認できる
4. ランレベル0にするとシステムが再起動する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. ランレベル0にするとシステムが再起動する です。

ランレベルはシステム状態を数値で表したもので、以下のように定義されています。

○/etc/inittabに記述されたランレベル解説
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

一般的にはランレベル3かランレベル5を使用し、システムのメンテナンスなどを行う場合にはランレベル1のシングルユーザーモード(ユーザーrootのみ作業可能)に変更します。

ランレベルの確認は、/sbin/runlevelコマンドで行います。

○runlevelコマンドの実行例
# runlevel
N 3


この場合、現在ランレベル3、前のランレベルは無いので、起動後にランレベルの変更が行われていないことが分かります。

起動後にランレベルを変更する時、たとえばランレベル3から1、シングルユーザーモードに変更すると、もし他に一般ユーザーとしてログインしているユーザーがいる場合、ログインセッションが終了することになります。
事前にWebやメールなどで通知する他、ログインしているユーザーをwhoコマンドで確認し、場合によってはwriteコマンドやwallコマンドで通知してログアウトさせた上で、シングルユーザーモードに変更するようにするべきでしょう。

ランレベル0はシステム終了(halt)。shutdownコマンドに-hオプションを付けて実行したのと同じとなります。ランレベル6は再起動(reboot)なので、こちらは-rオプション相当となります。

101.3 ランレベル/ブートターゲットの変更とシステムのシャットダウンまたはリブート

今回はLPIC101試験の試験範囲から、「101.3 ランレベル/ブートターゲットの変更とシステムのシャットダウンまたはリブート」についての例題を解いてみます。

■例題
OS起動時のsystemdのターゲットを変更するコマンドを選びなさい

1. systemctl isolate graphical.target
2. systemctl get-default graphical.target
3. systemctl set-default graphical.target
4. systemctl default graphical.target

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「3. systemctl set-default graphical.target」です。

systemdでは、起動時のターゲットを変更する場合には、以下のコマンドを実行します。

#systemctl set-default ターゲット名.target

systemdでは、従来のSysVinit/Upstartのランレベルに相当するターゲットがデフォルトで存在します。
主なターゲットと用途は以下の通りです。

poweroff.target        … システムを停止します
rescue.target        … レスキューモード(シングルユーザモード相当)にシステムを切り替えます。
multi-user.target    … 非グラフィカルなインタフェースで複数ユーザがシステムを利用できる状態に切り替えます
graphical.target    … グラフィカルなインタフェースで複数ユーザがシステムを利用できる状態に切り替えます
reboot.target        … システムを再起動します


それぞれの回答の解説は以下の通りです。

「1. systemctl isolate graphical.target」

isolateサブコマンドを実行すると、現在のターゲットを変更します。
今回は、OS起動時のsystemdのターゲットを変更するコマンドですので、この回答は誤りです。

「2. systemctl get-default graphical.target」

get-defaultサブコマンドは、OS起動時のターゲット(デフォルトターゲット)を確認するための
コマンドです。ターゲットの切り替えや変更は行われないため、この回答も誤りです。

「4. systemctl default graphical.target」

defaultサブコマンドは、現在のターゲットをデフォルトターゲットに切り替えるために利用します。
またdefaultサブコマンドは引数を取りませんので、実際に利用する場合は以下のように実行します。

# systemctl default

systemdはSysVinit/Upstartに比べ、起動処理を並列で行えるため、OSの起動や停止を素早く行えるなどのメリットがあります。
そのため最新のOSでは、initの代わりにsystemdを採用している場合が多くあります。
SysVinit/Upstartとは、概念も操作も大きくことなるため、systemdの操作方法を、詳しく抑えておきましょう。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏



101.3ランレベルの変更とシステムのシャットダウンまたはリブート

今回は101試験の試験範囲から、「101.3 ランレベルの変更とシステムのシャットダウンまたはリブート」についての例題を解いてみます。

■例題
ランレベルの変更の説明として間違っているものを選びなさい。

1. ランレベルの変更はユーザrootのみ行える
2. システム稼働中にランレベルを1に変更すると、その他のユーザはシステムが利用できなくなる
3. システム起動時にランレベルを指定できる
4. ランレベルを元に戻すには再起動しなければならない

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. ランレベルを元に戻すには再起動しなければならない です。

ランレベルはシステムの様々な状態を数値で指定可能としたものです。一般的なLinuxの場合、CUIで使用するならばランレベル3、GUIで使用するならばランレベル5になりますが、システム稼働中でも必要に応じてランレベルは変更できます。

ランレベルを変更するには、ユーザrootでinitプロセスに対して変更後のランレベルを伝えます。telinitコマンドが使用できますが、telinitコマンドはinitコマンドに対するシンボリックリンクになっているので、どちらのコマンドを使用しても良いでしょう。

○telinitコマンドの情報を参照
# ls -l /sbin/telinit
lrwxrwxrwx 1 root root 4  7月  8 01:53 /sbin/telinit -> init

たとえばシステム稼働中にシステムのメンテナンスをしなければならない時には、必要に応じてシングルユーザモードに移行して作業を行う必要があります。シングルユーザモードへの移行は、ランレベルを1にします。

○シングルユーザモードへの移行
# telinit 1
INIT: Sending processes the TERM signal
(以下、起動中のサービスを停止)

sh-3.2# ★シングルユーザモードに移行し、シェルプロンプトが表示される


シングルユーザモードに移行すると、その他のユーザは操作が行えなくなりますが、その時の挙動はやや異なります。

・コンソールでログインしているユーザ → 強制ログアウト
・OpenSSH経由でログインしているユーザ → ランレベル復帰後作業継続可能

OpenSSHで接続した状態でシングルユーザモードに移行し、復帰させると作業が継続できます。お試し下さい。


シングルユーザモードので作業が終わった後は、使用していたシェルを終了(exit)することで、元のランレベルに復帰します。


ランレベルは、システム起動時にカーネルパラメータに渡すことで/etc/inittabで指定されたデフォルトランレベルから変更することができます。

101.3ランレベルの変更とシステムのシャットダウンまたはリブート

今回は、101試験の出題範囲から「101.3 ランレベルの変更とシステムのシャットダウンまたはリブート」についての例題を解いてみます。

■例題
システムを5分後にシャットダウンし、再起動を行いたい。適切なコマンドを選びなさい。

1. init +5
2. init 0 +5
3. init 6 +5
4. shutdown -h +5
5. shutdown -r +5


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 5. shutdown -r +5 です。

shutdownコマンドは、オプションで動作を、さらに時刻指定をすることでシャットダウン作業を行うタイミングを指定することができます。

システムの停止を行う場合には-hオプション(halt)、システムの再起動を行うには-rオプション(reboot)を指定します。

実行タイミングの指定は、「+分数」で実行するまでの時間を指定できます。
よく使用する「now」の指定は、「+0」を指定したのと同じことになります。
また、hh:mmの書式で時刻を指定することもできます。

shutdownコマンドは、実際にはinitに対してランレベルの変更を指示することで停止(ランレベル0)や再起動(ランレベル6)を行っています。
init自体には遅延実行の機能は備わっていないので、このような作業が必要になります。

102.1 ハードディスクのレイアウト設計

今回は101試験の試験範囲から「102.1 ハードディスクのレイアウト設計」についての例題を解いてみます。

■例題
パーティション構成の説明として間違っているものを選びなさい。

1. /(root)ファイルシステムには/varディレクトリが含まれている必要がある
2. /homeファイルシステムを別パーティションとすることでマウントオプションを調整できる
3. スワップパーティションは通常のファイルシステム用パーティションと異なる
4. パーティションを別ディスクに分けることで性能や保護レベルを調整できる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. /(root)ファイルシステムには/varディレクトリが含まれている必要がある です。

Linuxのファイルシステムをより適切に構成するためには、各ディレクトリの役割をきちんと理解し、適切にパーティションに配置する必要があります。

パーティションは、物理ディスク上にファイルシステムを作成できるように分割したものです。1台のハードディスクでも、複数のパーティションに分割し、それぞれに別々のファイルシステムを作成することがあります。

ファイルシステムを分割する理由はいくつかあります。まずRAIDで高速にしたり、冗長構成にしたハードディスクをファイルシステムに割り当てたい場合です。高速なRAID 1+0構成は/varファイルシステムに、RAID 5構成で容量を確保して/homeファイルシステムに割り当てるなどの構成が考えられます。

また、マウントオプションはマウントポイント毎に指定するので、たとえば/homeファイルシステム以下の実行ファイルを実行させたくない場合には、別途noexecオプションをつけてマウントする必要があるため、/rootパーティションなどとは別にしておかなければなりません。

ファイルシステムの構成についてはFHS(Filesystem Hierarchy Standard)を参照しておくとよいでしょう。たとえば/usr、/opt、/varファイルシステムは/(root)ファイルシステムとは別のファイルシステムになっていてもよいと定義されています。

○FHS(Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/

スワップパーティションは通常のファイルシステムとは異なるパーティションとして作成する必要があります。

102.1ハードディスクのレイアウト設計

今回は101試験の試験範囲から「102.1 ハードディスクのレイアウト設計」についての例題を解いてみます。

■例題
以下のディレクトリのうち、パーティションを分割しなくてもよいと考えられるディレクトリを1つ選びなさい。

1. /dev
2. /home
3. /var
4. /boot

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. /dev です。

/devディレクトリは様々なデバイスファイルが格納されるディレクトリですが、個別に何か特別な性能や保護が必要となるわけではないので、/パーティションと同一のパーティションに格納されていても大丈夫と考えられます。

/homeディレクトリはユーザー個別のファイルが保存されますので、カーネルや各種バイナリと分けて格納しておいてもよいでしょう。できれば、データ保護の為にRAID 1(ミラーリング)などの保護を行った方がいいでしょう。

/varディレクトリはシステム動作時に様々なファイルが作成されます。高速な処理を行うには、大量のファイル書き込みが行えないといけないので、RAID 0(ストライピング)などの高速処理対応が必要な場合もあります。

/bootディレクトリは新しいハードウェアでは容量制限などに当たる可能性は無くなりましたが、ファイルシステムの論理的な破壊、他のパーティションをext2やext3以外のファイルシステムにする場合にシステム起動時の問題点切り分けを容易にするなどの観点から、パーティションを分割することが習慣となっています。

102.1ハードディスクのレイアウト設計

今回は、101試験の出題範囲から「102.1 ハードディスクのレイアウト設計」についての例題を解いてみます。

■例題
次のディレクトリのうち、システムを利用するユーザのデータが格納されるディレクトリを選びなさい。

1. /(ルート)
2. /var
3. /proc
4. /home
5. /bin


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. /home です。

Linuxのファイルシステムは、各ディレクトリ毎に役割が決められています。
これらの役割は、FHS(Filesystem Hierarchy Standard)という形で標準としてまとめられています。

ユーザのデータは、/homeディレクトリの下に格納されます。useraddコマンドに-mオプションをつけて実行すれば、自動的に/homeの下にユーザ名でホームディレクトリが作成されるようになっています(最近では-mオプションはデフォルトになっていて、指定しないでもそのように動作することが多い)。

/(ルート)ディレクトリは、ファイルシステムの大元ということもあり、基本的に何もファイルを置きません。

/procは、システムの状態などを仮想ファイルという形で見せてくれる、特殊なディレクトリです。そのため、ハードディスク上ではなく、起動後にメモリ上に作られます。

/varは、ログなどシステムが動作する中で作られたファイルが格納されます。

/binは、基本的なユーザコマンド(lsコマンドなど)が格納されます。

FHSには、これらの他にも主要なディレクトリが定義されているので、一通りその役割を確認しておくと良いでしょう。

102.1ハードディスクのレイアウト設計

今回は、101試験の出題範囲から「101.2 システムのブート」についての例題を解いてみます。

■例題
カーネル起動中に出力されたエラーメッセージを確認するコマンドとして適切なものを選びなさい。

  1. dmesg
  2. kernmsg
  3. kernellog
  4. kerneldump
  5. tail

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. dmesg です。

Linuxシステムでは、様々なログはプログラムそのものがログを生成するか、syslogの仕組みを使ってログを記録します。しかしカーネル起動中はどちらの仕組みもまだ起動しておらず使用できないため、独自の方法でログを記録しておく必要があります。そこで、Linuxカーネルはバッファ上にログを記録しておき、そのバッファのログを読み出すにはdmesgコマンドを使用します。

dmesgコマンドが読み出すバッファは「リングバッファ」と呼ばれるバッファになっており、一定量のログが書き込まれると、以降古いログから順番に上書きされていきます。ですから、システム起動後のログは、システム稼働時間が長くなると上書きされてしまうことがあります。

システム起動後は、リングバッファは/proc/kmsgとして参照することができます。

参考)ITmediaエンタープライズの記事

ハードウェア障害など、トラブル解決の手段として重要なポイントになるので、しっかりと仕組みを理解すると共に、どのようなメッセージが出力されているのか確認しておきましょう。

102.1ハードディスクのレイアウト設計

今回は101試験の試験範囲から、「102.1 ハードディスクのレイアウト設計」についての例題を解いてみます。

■例題
以下の各ディレクトリのうち、一番保護の必要性の高いディレクトリを選びなさい。

1. /(ルート)
2. /boot
3. /var
4. /tmp
5. /mnt

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. /var です。

Linuxのファイルシステムは、/(ルート)を頂点とした階層構造となっており、各ディレクトリは必要に応じて別のディスクに分けていくことができます。より重要なシステムでは、いくつかのディレクトリを別ディスクとして保護や性能向上を図ります。

解答となった/varディレクトリは、サーバープロセスなどの使用するディレクトリです。たとえば動作ログなどは/var/logディレクトリに保管されるため、後からログを解析するなどの処理を考えると、ディスク障害で失ってしまうわけにはいきません。また、高速な処理が要求される場合には、/var以下への書き込みが高速である必要があるので、RAID 1(ミラーリング)や、RAID 1+0(ミラーリング+ストライピング)などを行っているディスクを割り当てます。

/(ルート)ディレクトリは、Linuxでは基本的に何も格納しません。また、ディレクトリ毎にディスクを分けている場合、/ディレクトリ以下に配置されているディレクトリは再インストールを行うことで戻せるディレクトリがほとんどになるため、場合によっては高い保護レベルは必要とならないかもしれません。/boot、/tmp、/mntなども同様です。

ただ、最近ではローカルディスクをすべてRAID 5などでまとめてしまうことも多いようですが、RAID 5にすると容量は稼げる反面、RAID 1+0などに比べると性能は落ちますから、性能要求が満たされているかどうかを確認しておく必要があるでしょう。

102.2 ブートマネージャのインストール

今回は101試験の試験範囲から「102.2 ブートマネージャのインストール」についての例題を解いてみます。

■例題
ブートマネージャーの説明として間違っているものを選びなさい。

1. MBRはハードディスクの先頭部分にあり、起動時に最初に読み込まれる
2. Linuxを起動する際に使用するカーネルやinitrdを切り替えることができる
3. 起動時のランレベルを指定することができる
4. GRUBを導入した環境ではWindowsは起動できない

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. GRUBを導入した環境ではWindowsは起動できない です。

ブートマネージャーは、システム起動を行うソフトウェアです。電源投入後に呼び出され、Linuxカーネルをメモリの読み込み、実行可能にするまでを担当します。IAアーキテクチャのマシン(一般的なPC)でLinuxを起動する場合にはGRUB 2(以下、GRUBと記述)が主に使用されています。以下の解説は、一般的なPCであることを前提にしています。

PCは電源投入後、BIOSが起動し、起動に使用するデバイスを選択します。ほとんどの場合はハードディスクでしょう。ハードディスクの先頭部分(512バイト)の領域をMBRと呼びます。MBRには、ディスクのパーティション情報と、一番最初に呼び出されるIPL(Initial Program Loader)が記録されています。GRUBはこのMBRにインストールされますが、非常に小さい領域のため、起動するためのカーネルやinitrdを切り替えたりする機能を持つ本体を別途呼び出すようにしています。GRUBの動作の仕組みについての詳細は、以下のアドレスに詳しいので参考にして下さい。

○GRUB - Wikipedia
http://ja.wikipedia.org/wiki/GRUB


GRUB本体が起動すると、/boot/grub/menu.lstの内容に基づいた起動メニューが提供されます。必要に応じて起動項目をその場で編集して起動することもできます。たとえばシングルユーザーモードで起動する指示も、Linuxカーネルをロードする前のこのタイミングで指定できます。

GRUBが起動した後、Windowsの起動を選択することもできます。この場合、GRUBからWindowsがインストールされているパーティションの先頭部分(起動セクタ)を読み込み、Windowsのブートマネージャー(Windows Boot ManagerかNTLDR)に制御を渡す事でWindowsが起動できるようになる、2段階起動になります。LinuxとWindowsのデュアルブート環境を作りたい場合には、このような方式を取ることになります。設定が大変のように感じますが、先にWindowsをインストールしておき、後からLinuxをインストールすると、ディストリビューションにもよりますが、GRUBのインストール時にWindowsも起動できるようにGRUBの設定ファイルを作成してくれるので、試してみると良いでしょう。

102.3 共有ライブラリを管理する

今回は101試験の試験範囲から「102.3 共有ライブラリを管理する」についての例題を解いてみます。

■例題
共有ライブラリの説明として間違っているものを選びなさい。

1. プログラムが利用している共有ライブラリはlddコマンドで確認できる
2. 共有ライブラリの配置されているパスは/etc/ld.so.confに記述する
3. ldconfigコマンドを利用すると共有ライブラリのバージョンが管理できる
4. ユーザー独自の共有ライブラリ指定には環境変数LD_LIBRARY_PATHを使用する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. ldconfigコマンドを利用すると共有ライブラリのバージョンが管理できる です。

共有ライブラリは、様々な機能をプログラムに提供することで、プログラムの開発を容易にするものです。OSの基本的な機能も、共有ライブラリによって提供されていますし、暗号化のような高度な機能も共有ライブラリが用意されています。プログラムがどのような共有ライブラリを必要としているかは、lddコマンドで確認できます。

標準的な共有ライブラリはデフォルトパスである/libまたや/usr/libに配置されますが、それ以外のディレクトリに配置された場合には/etc/ld.so.confファイルにライブラリパスを記述し、ldconfigコマンドを
実行します。ldconfigコマンドはライブラリパスを検索し、/etc/ld.so.cacheファイルを作成します。プログラムはこのキャッシュファイルを参照して共有ライブラリを見つけます。つまり、/etc/ld.so.confファイルに記述しただけでは有効にはならず、ldconfigコマンドの実行が必要です。

ldconfigコマンドにはライブラリのバージョンを管理する機能はありません。

ldconfig -pコマンドを実行すると、/etc/ls.so.cacheファイルの中身を表示できます。

○ldconfig -pコマンドの実行例
# ldconfig -p
571 libs found in cache `/etc/ld.so.cache'
    libz.so.1 (libc6) => /usr/lib/libz.so.1
    libz.so (libc6) => /usr/lib/libz.so
    libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1
    libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2
    libxml2.so (libc6) => /usr/lib/libxml2.so
    libxmlsec1.so.1 (libc6) => /usr/lib/libxmlsec1.so.1
    libxmlsec1.so (libc6) => /usr/lib/libxmlsec1.so
    libxmlsec1-openssl.so.1 (libc6) => /usr/lib/libxmlsec1-openssl.so.1
    libxmlsec1-openssl.so (libc6) => /usr/lib/libxmlsec1-openssl.so
    libxkbui.so.1 (libc6) => /usr/X11R6/lib/libxkbui.so.1
(以下略)


共有ライブラリのパスを指定するもう1つの方法が、環境変数LD_LIBRARY_PATHを指定する方法です。/etc/ld.so.confファイルがシステム全体に対して有効であるのに対して、環境変数はユーザー別に適用されるので、特定のユーザーだけに共有ライブラリを使わせる必要があるプログラムの実行に有効です。

共有ライブラリは以下の順番で検索されます。

1. 環境変数LD_LIBRARY_PATH
2. /etc/ld.so.cacheファイル
3. /lib、/usr/libディレクトリ

102.3共有ライブラリを管理する

今回は101試験の試験範囲から「102.3 共有ライブラリを管理する」についての例題を解いてみます。

■例題

lddコマンドの役割として正しいものを選びなさい。

1. 共有ライブラリがインストールされている場所を指定する
2. プログラムが必要とする共有ライブラリを表示する
3. 共有ライブラリの依存関係を更新する
4. 共有ライブラリが32ビット用か64ビット用かを確認する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. プログラムが必要とする共有ライブラリを表示する です。

共有ライブラリは、プログラム的な処理を様々なプログラムから呼び出し可能にしたものです。共有ライブラリを活用する事で、プログラムを作る開発者は面倒なプログラム処理を独自に開発しないで済みます。

たとえば高度な暗号化のルーチンなどは、SSL通信をサポートする「OpenSSL」が提供する共有ライブラリを使うことで利用できます。

lddコマンドは、引数として与えられたプログラムファイルが必要とする共有ライブラリを表示します。

○httpd
$ ldd /usr/sbin/httpd
(略)
    libssl.so.4 => /lib/libssl.so.4 (0xb7c20000)
    libcrypto.so.4 => /lib/libcrypto.so.4 (0xb7b36000)
    /lib/ld-linux.so.2 (0x80000000)
(略)

この例では、libssl.so.4が必要とされており、共有ライブラリとして/lib/libssl.so.4を使用することが分かります。

Linuxでは、パッケージの依存関係が必要とする共有ライブラリをきちんと導入してくれます。ただし、ファイルシステムに障害が発生したような場合など、共有ライブラリを正しく利用できなくなってしまう場合もあるので、プログラムがうまく実行できなくなった場合には、共有ライブラリについても疑ってみるべきでしょう。

102.3共有ライブラリを管理する

今回は101試験の試験範囲から、「102.3 共有ライブラリを管理する」についての例題を解いてみます。

■例題
lddコマンドについての説明として適切なものを選びなさい。

  1. 必要な共有ライブラリをロードする
  2. 必要な共有ライブラリを静的リンクする
  3. 必要な共有ライブラリが存在するか確認する
  4. 必要な共有ライブラリを表示する
  5. 必要な共有ライブラリの依存関係を解決する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. 必要な共有ライブラリを表示する です。

共有ライブラリには、ビルド時にあらかじめ実行形式のファイルに組み込んでしまう「静的リンク」と、実行時に読み込む「動的リンク」の2種類があります。

静的リンクは、実行ファイルをコピーするだけでよいので、共有ライブラリの有無を確認する必要がありませんが、共有ライブラリの分、ファイルが大きくなってしまうデメリットがあります。

動的リンクは、実行時に共有ライブラリを読み込むので、ファイルサイズは小さくて済みますし、メモリ上にロードされた共有ライブラリをほかのプログラムと共有できるのでメモリ使用量も抑えることができますが、反面、必要となる共有ライブラリがシステムに用意されていないと実行することができません。

lddコマンドは、動的リンクに指定された実行ファイルから、必要となる共有ライブラリの情報を調べて表示する役割を持っています。もし実行ファイルがうまく実行ができないような場合には、該当する実行ファイルをlddコマンドにかけて共有ライブラリの情報を確認し、該当するライブラリがインストールされているかどうか確認する必要があります。

○lddコマンドの実行例

$ ldd /bin/ls
    linux-gate.so.1 =>  (0xbfffe000)
    librt.so.1 => /lib/tls/librt.so.1 (0x48080000)
    libacl.so.1 => /lib/libacl.so.1 (0xb7f5d000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x47d3e000)
    libc.so.6 => /lib/tls/libc.so.6 (0x47b70000)
    libpthread.so.0 => /lib/tls/libpthread.so.0 (0x47d11000)
    /lib/ld-linux.so.2 (0x47b56000)
    libattr.so.1 => /lib/libattr.so.1 (0xb7f59000)

lsコマンドは、他に8つの共有ライブラリを必要としていることが分かります。

102.3共有ライブラリを管理する

今回は、101試験の出題範囲から「102.3 共有ライブラリを管理する」についての例題を解いてみます。

■例題
Linux上で実行したいプログラムが必要としている共有ライブラリを調べるために実行するコマンドを選びなさい。

1. ldd
2. ldconfig
3. lsld
4. lsmod
5. modprobe


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. ldd です。

Linux上で動作するプログラムには、コンパイル時にライブラリを組み込んでおく「静的リンク」と、実行時にライブラリを読み込む「動的リンク」の2種類が存在します。現在では多くの場合、動的リンクの形でプログラムは作成(ビルド)されています。

静的リンクと違い、動的リンクは実行される時に必要となる共有ライブラリがシステムに導入されていないといけないので、標準的でない共有ライブラリを使用するようなプログラムの時には特に、そのプログラムが必要とする共有ライブラリを調べられなくてはいけません。そのために使用するのがlddコマンド
です。

○lddコマンドの実行例(※結果は環境により異なります)
$ ldd /bin/ls
linux-gate.so.1 => (0xbfffe000)
librt.so.1 => /lib/tls/librt.so.1 (0x486af000)
libacl.so.1 => /lib/libacl.so.1 (0xb7fee000)
libselinux.so.1 => /lib/libselinux.so.1 (0x4836d000)
libc.so.6 => /lib/tls/libc.so.6 (0x481a5000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x48340000)
/lib/ld-linux.so.2 (0x4818b000)
libattr.so.1 => /lib/libattr.so.1 (0xb7fea000)

$ ldd /usr/bin/ssh
linux-gate.so.1 => (0xbfffe000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0xb7ede000)
libutil.so.1 => /lib/libutil.so.1 (0xb7eda000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7eca000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7eb3000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7e85000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb7e77000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7e62000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7dfd000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7ddc000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7dd9000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7dc6000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7c9a000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c95000)
/lib/ld-linux.so.2 (0x4818b000)

実行例では、標準的に使用されるlsコマンドと、暗号化通信が必要となるsshコマンドをlddコマンドで調べてみました。
簡単な動作をしているように見えるlsコマンドでも、沢山の共有ライブラリが使用されているのが分かります。
sshコマンドは、暗号化を行う必要があるので、"crypt"というキーワードが入ったライブラリなどが見えるのが分かるでしょうか。

Linuxディストリビューションでは、パッケージ管理システムが必要となる共有ライブラリを依存性で管理してくれるため、必要となる共有ライブラリが無い、という事態はあまり起きませんが、プログラムをソースコードからコンパイルしてインストールしているような場合には、これらの問題に直面するかもしれません。特に、実際に使用する環境でビルドするのではなく、ビルドしたバイナリーファイルだけを別環境に移すような場合には、共有ライブラリが無い、ということが起きやすいので、注意が必要でしょう。

102.4Debianパッケージ管理を使用する

今回は101試験の試験範囲から「102.4 Debianパッケージ管理を使用する」についての例題を解いてみます。

■例題
dpkg-reconfigureコマンドの機能として正しいものを選びなさい。

1. インストールしたパッケージの再設定を行う
2. インストールしたパッケージの再構築を行う
3. インストールしたパッケージの依存関係を再設定する
4. 指定したパッケージを自動的にインストールする

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. インストールしたパッケージの再設定を行う です。

apt-getなどでパッケージをインストールする際に、対話的に設定などが行える場合があります。これらの設定をインストールした後に再度実行したい場合には、dpkg-reconfigureコマンドを使用します。

以下の例は、日付や単位などを定義しているロケール(locales)の再設定を行っている様子です。

○localesパッケージの再設定
# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... done
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
  ja_JP.UTF-8... up-to-date
Generation complete.

すべてのパッケージが再設定可能ではありませんが、Samba(samba-common)パッケージなどで再設定が可能なので、試してみてください。

102.4Debianパッケージ管理の使用

今回はLPIC101試験の試験範囲から、「102.4 Debianパッケージ管理の使用」についての例題を解いてみます。

■例題
Debianでパッケージの検索を行うコマンドを次の内から選びなさい

1. apt-get search <パッケージ名>
2. apt-get check
3. apt-cache search <パッケージ名>
4. apt-cache show <パッケージ名>

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「3. apt-cache search 」です。

apt-getコマンドはパッケージのインストール、アップデート、削除を行います。
また、apt-cacheコマンドはaptのパッケージキャッシュの操作を行います。
パッケージの存在を検索したい場合はapt-cacheコマンドを使用します。

それぞれの選択肢について、以下の操作を実施します。

・「apt-get search <パッケージ名>」
   apt-getの引数にsearchを与えることは出来ません。
   apt-getの誤った使用方法となります。

・「apt-get check」
   パッケージキャッシュの更新の有無、壊れた依存関係を診断します。

・「apt-cache search <パッケージ名>」
   指定されたパッケージを検索します。
   パッケージ名は正規表現を指定することが可能で、指定された正規表現により利用可能なパッケージの全文検索を行います。

・「apt-cache show <パッケージ名>」
   指定したパッケージの詳細を表示します。

Debianのパッケージ管理ツールはapt-get, apt-cacheだけでなく、aptitudeコマンド、dpkgコマンドなど他にも様々なものがあります。
必要に応じて使い分けることができるよう、apt-get, apt-cache以外のパッケージ管理ツールについても確認しておきましょう。

102.4Debianパッケージ管理を使用する

今回は、101試験の出題範囲から「102.4 Debianパッケージ管理を使用する」についての例題を解いてみます。

■例題
OBJECTIVE: 2.2.5 TYPE: mc 
How can you add package information from a file Packages to the
database of available Debian packages?

1. dpkg --merge-avail Packages
2. dpkg --update-avail Packages
3. dpkg --record-avail Packages
4. dpkg -U Packages

■例題の翻訳(意訳)
Packagesファイルから、既存のDebianパッケージデータベースにパッケージ情報を追加するにはどうすればよいですか?

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1.になります。

dpkgに実際に存在するオプションは1.の --merge-avail と、2.の --update-avail の2つです。どちらも動作が似ていますが、--merge-availはPackagesファイルから既存のパッケージデータベースに存在しない新しいパッケージ情報を追加するのに対して、--update-availは既存のパッケージデータベースに存在するパッケージ情報のみ更新し、存在しない新しいパッケージ情報は追加しません。

問題文では「追加する」と質問されているので、答えは追加を行う --merge-availの方となります。

102.5 RPMおよびYUMパッケージ管理の管理

今回は101試験の試験範囲から「102.5 RPMおよびYUMパッケージ管理の管理」についての例題を解いてみます。

■例題

以下の中からyumコマンドで特定のファイルが入っているパッケージを検索するときに使用するサブコマンドを選びなさい。

1. search
2. repolist
3. check
4. provides

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「4. provides」です。

yumコマンドはRed Hat Enterprise LinuxやCentOSで使用されているパッケージマネージャです。

yumコマンドを使うことでrpmパッケージの依存関係を自動で解決してインストールを行うことができるため、利用することが多いでしょう。

指定するサブコマンドを変更することでパッケージをインストールするだけでなく、削除やパッケージの検索、yumの設定の確認などを行うこともできます。

yumコマンドはリポジトリと呼ばれるパッケージの保存されている場所を参照してパッケージの取得などを行っています。

現在使用可能なリポジトリを確認するためのサブコマンドが「2. repolist」です。

実際に使用する例としては以下となります。

$ yum repolist

repolistを指定することで、yumコマンドを実行した時に参照可能なリポジトリ名やリポジトリ単位で取得が可能なパッケージ数を表示することができるため、どのようなリポジトリをyumが参照するのかを確認したい時に使います。


「1. search」と「4. provides」は、ともにパッケージの検索を行うサブコマンドですが、検索方法が異なります。

searchは指定した場合、パッケージ名またはパッケージの説明文に指定されたキーワードを含むパッケージを一覧で表示します。

使用例としては以下となります。

$ yum search httpd

上記を実行した場合、パッケージ名またはパッケージの説明文に「httpd」を含むパッケージの一覧が表示されます。

一方、providesは指定したファイルを含んでいるパッケージを検索して表示するサブコマンドです。

providesでは、「*」といったワイルドカードを使って指定をすることができるため、以下のようにコマンドを実行することができます。

$ yum provides */httpd

searchやprovidesはパッケージをインストールしようとしたが、パッケージ名が分からない場合や、必要なファイルを含むパッケージがわからない場合に使用します。


「3. check」はrpmdbと呼ばれるパッケージのインストール情報を管理するデータベースファイルのチェックを行う時に使用するサブコマンドです。

yumコマンドを使ってインストールをするパッケージは、rpmコマンドでも管理をすることができるため、パッケージ情報を共通のデータベースファイルに保存をしています。

このrpmdbが破損すると、yumを使ってパッケージのインストールをしようとしてもエラーが発生する場合があります。

そのような場合にcheckを実施することでrpmdbの状態を確認することができます。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏

102.5RPMおよびYUMパッケージ管理を使用する

今回は101試験の試験範囲から、「102.5 RPMおよびYUMパッケージ管理を使用する」についての例題を解いてみます。

■例題
yumコマンドについての説明として間違っているものを選びなさい。

  1. yumコマンドはパッケージのインストールなどを行うツールである
  2. yumコマンドはインターネット上からパッケージをダウンロードできる
  3. yumコマンドはリポジトリを参照してパッケージを管理する
  4. yumコマンドはCDやDVDなどに保存されているパッケージも参照できる
  5. yumコマンドはパッケージの依存関係を自動的に解消できないので、必要なパッケージをすべて指定する必要がある

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 5. yumコマンドはパッケージの依存関係を自動的に解消できないので、必要なパッケージをすべて指定する必要がある です。

yumは「Yellow dog Updater, Modified」の頭文字を取ったコマンドです。
「Yellow Dog Linux」というPowerPCアーキテクチャ用のLinuxディストリビューションで開発されたRPMパッケージを管理するためのコマンドです。
通常のRPMコマンドと異なり、パッケージの依存関係を自動的に解消したり、リポジトリと呼ばれるパッケージを格納したサイトなどからパッケージをダウンロードしてインストール、アップデートを行えます。ちょうど、Debian GNU/Linuxなどで利用されているaptのシステムと同じようなことが行えるため、RPMパッケージを利用しているディストリビューションで採用されるケースが増えています。

yumコマンドの利用は比較的簡単ですが、ポイントとなるのは参照するリポジトリの設定です。設定は/etc/yum.repos.dディレクトリに格納されている設定ファイルで行っています。yumでは、ディストリビューションに含まれないRPMパッケージを提供しているリポジトリを追加で利用することもできます。たとえば「RPMforge」などがあります。

○RPMforgeのWebサイト

https://rpmrepo.org/RPMforge

102.5RPMおよびYUMパッケージ管理を使用する

今回は101試験の試験範囲から「102.5 RPMおよびYUMパッケージ管理を使用する」についての例題を解いてみます。

■例題
/etc/yum.repos.d/ディレクトリの説明として正しいものを選びなさい。

1. yumコマンドの参照するリポジトリ設定を追加する
2. yumコマンドのデフォルト設定を行う
3. yumコマンドのドキュメントが格納されている
4. yumコマンドがダウンロードしたRPMパッケージが格納されている

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. yumコマンドの参照するリポジトリ設定を追加する です。

yumコマンドの基本的な設定ファイルは/etc/yum.confですが、個別に参照したいリポジトリ(yumコマンドが利用するRPMパッケージの格納されている場所)の設定は、/etc/yum.repos.d/ディレクトリの中に個別設定ファイルを作成します。

たとえば、CentOSでは、以下のようなファイルが用意されており、DVDなどのメディアをyumコマンドのリポジトリとして参照出来るようになっています。

○個別のリポジトリ設定の例
# cat CentOS-Media.repo
# CentOS-Media.repo
#
# This repo is used to mount the default locations for a CDROM / DVD on
#  CentOS-5.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c5-media [command]
#  
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=?* --enablerepo=c5-media [command]
 
[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


この設定では、enabledの設定が0になっているため、デフォルトでは使用されませんが、コマンドラインで--enablerepoオプションを付けることで利用可能になります。参照先として設定されているbaseurlのいずれかのディレクトリをリポジトリとして参照しますから、インターネット上にあるリポジトリが参照できなくても、DVDメディアからのRPMパッケージのインストールをyumコマンドを使って行うことができます。

yumコマンドのメリットは、rpmコマンドと違って依存関係を自動的に解消してくれる点にあります。ただし、リポジトリが参照できなければyumコマンドを使ったパッケージのインストールができないので、覚えておいて欲しいテクニックです。

102.5RPMおよびYUMパッケージ管理を使用する

今回は、101試験の出題範囲から「102.5 RPMおよびYUMパッケージ管理を使用する」についての例題を解いてみます。

■例題
OBJECTIVE: 2.2.6 TYPE: mc 
You need to find out which package owns a file called /etc/paper.config.
Which command will answer this question?

1. rpm -qf /etc/paper.config
2. rpm -qa|grep /etc/paper.config
3. rpm -Fq /etc/paper.config
4. rpm -q /etc/paper.config
5. rpm --requires /etc/paper.config

■例題の翻訳(意訳)
/etc/paper.configがどのパッケージに含まれていたのか調べなくてはならない。どのコマンドを使えばこの答えが分かるか?

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1.になります。

rpmコマンドでパッケージに関する情報を調べるには-qオプションを使用します。

2.はインストールされているパッケージの一覧を表示するので、パッケージに含まれているファイルまでは分かりません。
その他の選択肢のような使い方はしませんので、間違いと言うことになります。

他によく使うオプションとして、以下の物があります。

rpm -ql パッケージ パッケージに含まれるファイルを表示
rpm -qi パッケージ パッケージの情報を表示
パッケージは一種のデータベースです。そこから情報を引き出す方法について一通り覚えておくことは、他の人がセットアップしたシステムを管理しないといけないような時には特に重要になってきます。しっかりと理解しておきましょう。

103.1コマンド行で操作する

今回は101試験の試験範囲から、「103.1 コマンド行で操作する」についての例題を解いてみます。

■例題
環境変数PATHに関する説明として間違っているものを選びなさい。

  1. 環境変数PATHはユーザーが自由に定義可能
  2. 環境変数PATHに定義されたパスから順番に実行コマンドを探す
  3. 環境変数PATHに定義されていないパスのコマンドを実行するには、そのディレクトリをカレントディレクトリにするしかない
  4. 環境変数PATHにパスを複数定義するには「:」で区切って記述する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. 環境変数PATHに定義されていないパスのコマンドを実行するには、そのディレクトリをカレントディレクトリにするしかない です。

環境変数PATHは、シェルからコマンドを実行する際に、そのコマンドのファイルが格納されているディレクトリを探すための情報が定義されています。
定義されている情報は、コマンドファイルを探したいディレクトリを順番に「:」で区切って記述していきます。

○環境変数PATHの例
$ printenv PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/user/bin

たまにある勘違いとして、環境変数PATHはsuコマンドに-を付けずに実行すると、そのままの内容が引き継がれるため、/sbinや/usr/sbinに格納されている管理のためのコマンドが実行できないということです。

○su後の環境変数PATHの違いを確認
$ su
# printenv PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/user/bin
↑一般ユーザーの環境変数PATHを引き継いでいる
# su -
# printenv PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
↑rootユーザー用の環境変数PATHを設定している

一般ユーザーでログインした後、管理用のコマンドを実行する場合には、この違いに注意が必要です。
環境変数PATHに定義されていないディレクトリに格納されているコマンドを実行するには、絶対パス、または相対パスで記述することで実行できます。
環境変数PATHはあくまでこのパス指定を省略するためのものであることをしっかりと理解しておきましょう。

○一般ユーザーで/sbin/ifconfigの実行
コマンドだけ指定すると実行できない
$ ifconfig
-bash: ifconfig: command not found
絶対パスで指定すれば実行できる
$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:1E:22:E1
   inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
(以下省略)

103.1コマンドラインで操作する

今回は101試験の試験範囲から「103.1 コマンドラインで操作する」についての例題を解いてみます。

■例題
シェルのコマンド履歴で、直前のコマンド実行の最初の引数を指示するものとして正しいものを選びなさい。

1. !!
2. !*
3. !^
4. !$

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. !^ です。

シェルの履歴で最も簡単な利用方法はカーソルキーの上下で前に利用したコマンドを呼び出して再度実行したり、編集して実行する方法ですが、単語指示子を使用することで直前のコマンドの引数を再利用することができます。

たとえば絶対パスで長いファイル名などを引数として入力した場合、その引数を再利用できると作業効率が高まります。

主な指示子は以下の通りです。

!^  直前のコマンドの最初の引数
!$  直前のコマンドの最後の引数
!*  直前のコマンドの全ての引数
!:n 直前のコマンドのn番目の引数

○単語指示子の利用例
$ ls /etc/sysconfig/
apm-scripts  harddisks          kudzu          rawdevices
(省略)
grub         keyboard          prelink
$ cd !^ ← 単語指示子で最初の引数を指定
cd /etc/sysconfig/
$ pwd
/etc/sysconfig


$ ls /var /proc
/proc:
1      3      4     4331  579         bus      ioports     self
(省略)
23603  3926   4324  5      buddyinfo  iomem      scsi

/var:
account  crash    empty  lib    lock  mail   net-snmp  opt       run    tmp  www
cache     db    ftp    local  log   named  nis         preserve  spool  tux  yp
[tmiyahar@ns sysconfig]$ cd !$ ← 単語指示子で最後の引数を指定
cd /proc
[tmiyahar@ns proc]$ pwd
/proc


シェルにはこの他にも、様々な作業を効率化するための仕組みが組み込まれていますので、色々と研究してみてください。

103.1GNUとUnixのコマンド

今回は、101試験の出題範囲から「103.1 GNUとUnixのコマンド」についての例題を解いてみます。

■例題
OBJECTIVE: 1.8.1 TYPE: mc 
What is the 'man' command used for?

1. to display information about the syntax for a command
2. it is the replacement for the 'boy' command
3. it is a standard alias to 'ls -la | more'
4. it is used to display formatted html pages

■例題の翻訳
manコマンドは何に使用しますか?

1. コマンドの文法についての情報を表示します
2. boyコマンドを置き換えます
3. コマンド'ls -la | more'の標準的なエイリアスです
4. HTMLのページを整形して表示します
※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1となります。

manコマンドはMANualコマンドの略で、様々なマニュアルを表示してくれます。
解答ではコマンドの文法についての情報を表示するとなっていますが、manコマンドで表示できるのはそれだけではありません。いくつかのセクションに分かれた情報を参照できます。

マニュアルのセクション
番号
内容
1
一般的なコマンド
2
システムコール
3
関数・ライブラリコール
4
特殊ファイル
5
設定ファイル
6
ゲーム
7
その他
8
システム管理コマンド
9
Linuxカーネルルーチン

manコマンドには引数として調べたいコマンド名などを指定しますが、その項目が複数のセクションに存在している場合、セクション番号が小さい方が優先されます。たとえば passwd という項目を調べると、セクション1のpasswdコマンドと、セクション5の/etc/passwdファイルのファイル形式の両方が該当しますが、表示されるのはセクション1のみです。セクション5を表示したい場合には、以下のようにセクション番号を指定します。

$ man 5 passwd

manコマンドは-kオプションでマニュアル内のキーワード検索が行えます。
似たような機能を持つコマンドにaproposコマンドがありますが、こちらは検索対象がwhatisコマンドの持つデータベースなので、情報量が少ない点に注意する必要があります。
情報を表示するコマンドとしては他にinfoコマンドがあるので覚えておきましょう。

表示されるマニュアルは、以下の項目に分かれて記述されています。

マニュアルの記載項目見出し
NAME
マニュアル項目の名前
SYNOPSIS
コマンドなどの書式
DESCRIPTION
コマンドなどの解説
OPTIONS
コマンドのオプション
FILES
関連するファイル
SEE ALSO
関連するマニュアル項目
BUGS
既知のバグ

Linuxを操作していて困った時には、まずmanコマンドで調べてみる習慣を身につけましょう。

103.2 フィルタを使ったテキスト ストリームの処理

今回はLPIC101試験の試験範囲から、「103.2 フィルタを使ったテキストストリームの処理」についての例題を解いてみます。

■トピックの概要
このトピックの内容は以下の通りです。

<103.2 フィルタを使ったテキストストリームの処理>
重要度 3

<説明>
テキストストリームにフィルタを適用できる。

<主要な知識範囲>
テキストファイルやストリームの出力をテキストユーティリティフィルタに送り込み出力を変更するために、GNU textutilsパッケージに含まれる標準的なUNIXコマンドを使用する。

<重要なファイル、用語、ユーティリティ>
    cat
    cut
    expand
    fmt
    head
    join
    less
    nl
    od
    paste
    pr
    sed
    sort
    split
    tail
    tr
    unexpand
    uniq
    wc


■例題

下記コマンドの説明として誤っているものを選択してください。

コマンド:sort -t : -k 3 -n -r /etc/passwd | head -n 5

1. sortコマンドは、一行を「:」で区切り、3番目のフィールドでデータをソートしている
2. sortコマンドの出力をheadコマンドに入力している
3. headコマンドは先頭から5行目までを出力する
4. sortコマンドは、出力をランダムにソートしている

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「sortコマンドは、出力をランダムにソートしている」です。

ランダムに結果を出力するsortコマンドのオプションは、「-R」です。そのためこの選択肢は誤りです。

次に解説ですが、例題のコマンドの流れは以下の通りです。

- sortコマンドの-tオプションで、フィールドの区切り文字を「:」とする
- sortコマンドの-kオプションで、ソートのキーとするフィールドを3番めに指定する
- sortコマンドの-nオプションで、文字列ではなく数値としてソートを実行する
- sortコマンドの-rオプションで、ソートの結果を反転させる
- headコマンドの-nオプションで、sortコマンドの結果の上から5番目までを出力する

[参考:/etc/passwdの書式]
# ユーザ名:パスワード:UID:GID:コメント:ホームディレクトリ:ログインシェル
root:x:0:0:root:/root:/bin/bash

具体的には、/etc/passwdをUIDでソートして、最もUIDが大きいユーザ情報を上から5番目まで出力する動作になります。

最初は長いコマンドを目にすると面食らうかもしれませんが、テキストのフィルタリングができるようになると、ログなどの膨大なデータを素早く整理できるようになります。非常に実践的な知識ですので、積極的に身につけることをおすすめします。


■例題作成者
株式会社デージーネット ソリューション開発部    森 彰吾 氏


103.2フィルタを使ってテキストストリームを処理する

今回は、101試験の出題範囲から「103.2 フィルタを使ってテキストストリームを処理する」についての例題を解いてみます。

■例題
テキストデータに含まれるタブ文字をスペースに変換したい。使用するフィルタコマンドとして適切なものを選びなさい。

1. expand
2. cut
3. unexpand
4. uniq
5. fmt


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. expand です。

フィルタコマンドは、標準入力からストリームデータを取り込み、必要な処理を施した後に標準出力からストリームデータを出力します。どのような処理を行うかによってコマンドが分かれていますし、さらにコマンドにオプションを付けて実行することで細かく処理が変わりますから、単なる暗記ではなく、どのようなシチュエーションで使用するのかを考えながらコマンド動作を試してみる必要があります。

例題の意図は、テキストデータ作成時にインデントにタブを使用しているデータを加工することを意図しています。なぜタブでは駄目かというと、多くの表示系ではタブは半角スペース8個分で表示されますが、場合によっては4個分などで表示する場合があります。桁ずれを起こさないような適切なデータを作るには、あらかじめタブをスペースに変換しておくのが有効です。

expandコマンドは、タブを半角スペースに変換します。デフォルトの設定は1タブあたり8半角スペースですが、-tオプションで数を変えることができます。
たとえば4半角スペースに変えたければ

$ cat tabfile | expand -t 4 > spacefile

とします。

逆に、半角スペースをタブに変換したい場合には、unexpandコマンドが別途用意されているので、そちらを使用します。

103.2フィルタを使ってテキストストリームを処理する

今回は101試験の試験範囲から「103.2 フィルタを使ってテキストストリームを処理する」についての例題を解いてみます。

■例題
タブをスペースに変換するコマンドとして正しいものを選びなさい。

1. expand
2. fmt
3. tr
4. unexpand

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. expand です。

Linuxでは標準入力からテキストストリームを読み込み、各種処理を行った後に標準出力に再度テキストストリームを出力するような動作を行うコマンドを「フィルタ」と呼んでいます。

フィルタは、それぞれの機能は非常にシンプルにできており、組み合わせることで様々な処理が行えるようになっています。

タブをスペースに変換するフィルタとしてexpandコマンドがあります。1つのタブを8個の半角スペースに変えますが、-tオプションでタブの数を変更することもできます。

○expandコマンドの例
$ cat test
    test ←この行頭はタブが1個です。
$ expand test
        test ←この行頭は半角スペースが8個です。
$ expand -t 4 test
    test


タブは処理する環境によって表示などがずれる場合があるので、インデントなどを整頓したい場合にはexpandコマンドが有効です。

103.3基本的なファイル管理を行う

今回は101試験の試験範囲から「103.3 基本的なファイル管理を行う」についての例題を解いてみます。

■例題
touchコマンドの役割として間違っているものを選びなさい。

1. 最終アクセス日時を更新する
2. 最終更新日時を更新する
3. アクセス権を更新する
4. サイズ0のファイルを作成する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. アクセス権を更新する です。

Linuxのファイルが持つタイムスタンプには、以下の3つがあります。

・最終状態変更時刻(ctime)
・最終更新時刻(mtime)
・最終アクセス時刻(atime)

最終状態変更時刻は、基本的にファイルが作成された時刻と考えればよいでしょう。
ls -lcで確認できます。

最終更新時刻は、ファイルの内容などが書き換えられた時刻です。
ls -lで確認できます。日常的に目にする時刻です。

最終アクセス時刻は、そのファイルにアクセスされた時刻なので、読み取られただけで変更されます。
ls -luで確認できます。

touchコマンドを使う事で、これらの時刻を変更する事ができます。

また、touchコマンドは、存在していないファイル名が引数に指定された場合には、そのファイルをサイズ0で作成します。


○touchコマンド実行例
・ファイルを作成します。
$ touch test

・時刻を確認します。
$ ls -l
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:40 test
$ ls -lu
合計 0
$ ls -lc
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:40 test

・ファイルにアクセスします。
$ cat test

・最終アクセス時刻は変更されていますが、その他の時刻は変更されていません。
$ ls -l
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:40 test
$ ls -lu
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:41 test
$ ls -lc
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:40 test

・touchコマンドですべての時刻が現在の時刻に変更されます。
$ touch test
$ ls -l
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:45 test
$ ls -lu
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:45 test
$ ls -lc
合計 0
-rw-rw-r--  1 tmiyahar tmiyahar 0 5月 22日 20:45 test

103.3基本的なファイル管理を行う

今回は101試験の試験範囲から「103.3 基本的なファイル管理を行う」についての例題を解いてみます。

■例題
tar + bzip2形式で圧縮されたアーカイブファイル「archive.tar.bz2」があります。
このファイルをtarコマンドを使ってファイルを取り出すコマンドを選びなさい。

1. tar -zf archive.tar.bz2
2. tar -jt archive.tar.bz2
3. tar -cxf archive.tar.bz2
4. tar -jxf archive.tar.bz2

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「4. tar -jxf archive.tar.bz2」 です。

tarコマンドはファイルのアーカイブと展開ができるため、多くのオプションが存在しています。
以下は代表的なオプションです。

 -f ファイルやデバイスを指定する
 -x アーカイブからファイルを取り出す場合に使用する
 -c アーカイブを作成する場合に使用する
 -t アーカイブの内容を一覧表示する
 -z gzip を経由してアーカイブをフィルタする
 -j bzip2 を経由してアーカイブをフィルタする

tar + bzip2形式で圧縮されたアーカイブファイルからファイルを取り出す場合には、アーカイブファイルを指定する「-f」オプションと、ファイルを取り出すときに指定をする「-x」オプション、bzip2ファイルを指定する「-j」オプションを指定する必要があるため「4. tar -jxf archive.tar.bz2」を指定することとなります。

「1. tar -zf archive.tar.bz2」はファイルを指定する「-f」オプションとgzipを経由させる「-z」オプションをしていますが、ファイルのアーカイブ、展開を指定していないため、適切ではありません。

「2. tar -jt archive.tar.bz2」はbzip2を経由させる「-j」オプションとファイルの一覧を表示する「-t」オプションを指定していますが、ファイルを指定する「-f」オプションを指定していないため、適切ではありません。

「3. tar -cxf archive.tar.bz2」はアーカイブを作成する「-c」オプションとアーカイブを展開する「-x」オプション、ファイルを指定する「-f」オプションを指定していますが、「-c」と「-x」の2つを指定しているため、適切ではありません。

ファイルの圧縮や展開はよく使う場合が多いので、代表的なオプションについては覚えておくと良いでしょう。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


103.3基本的なファイル管理を行う

今回は101試験の試験範囲から、「103.3 基本的なファイル管理を行う」についての例題を解いてみます。

■例題
ファイルシステムのバックアップに使用しないコマンドを選びなさい。

1. cpio
2. tar
3. dd
4. touch

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. touch です。

Linuxでのファイル管理は、日常的な細かいファイルの操作の他、定期的に実行するバックアップ作業があります。
バックアップ作業は、いくつかのコマンドを使って行うことができます。

cpioコマンドは、細かいファイル単位でのバックアップを行うのに向いているコマンドです。標準入力からコピー対象となるファイル名のリストを読み込みバックアップを行っていくので、選択的にバックアップを行いたいような場合に適しています。

tarコマンドは名前の由来であるテープアーカイバの通り、ファイルシステム上のファイルをテープに書き込んでいくような動作を行います。Linuxで標準的に使われているtarコマンドはGZIPやBZIP2形式での圧縮なども同時にサポートしています。

ddコマンドは、ディスクのパーティションという単位でのダンプを取るので、システムのフルバックアップなどを行う用途に向いています。ただし、現在使用しているパーティションをddコマンドでバックアップすると、メモリ上のキャッシュバッファにあるデータとの間での不整合が起きるため、ddコマンドを使ったバックアップを行う場合には、対象となるパーティションを読み取り専用でマウントし直すなどの下準備が必要になります。実際には、CD-ROMから起動できる環境を用意して、HDDは使用しない状態でバックアップするなどの対応が必要です。

103.3基本的なファイル管理を行う

今回は、101試験の出題範囲から「103.3 基本的なファイル管理を行う」についての例題を解いてみます。

■例題
cpコマンドでファイルを再帰的にコピーするオプションとして正しいものを選びなさい。

1. -f
2. -i
3. -L
4. -p
5. -R

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 5になります。

再帰的とは、指定されたディレクトリ以下のすべてのディレクトリの中全部を対象にするもので、出題のcpコマンドのほか、rmコマンドでも使用されます。

cpコマンドのマニュアルを見てみると分かりますが、回答の-Rオプションの他に-rオプションも使用できます。2つのオプションの違いは、デバイスファイルなどの特殊なファイルをどのような形でコピーするかが異なります。

-r 通常のファイルとしてコピーする
-R 特殊なファイルとしてコピーする

ファイルのバックアップ的にコピーを行う場合に、この動作の違いに気をつけないといけない場合があるので覚えておくとよいでしょう。

103.4ストリーム、パイプ、リダイレクトを使う

今回は、101試験の出題範囲から「103.4 ストリーム、パイプ、リダイレクトを使う」についての例題を解いてみます。

■例題
commandの標準エラー出力を、標準出力と一緒にfile.txtにリダイレクトする書式として正しいものを選びなさい。

1. command 1&2> file.txt
2. command 2>&1 file.txt
3. command 2&>1 file.txt
4. command > file.txt 2>&1
5. command > file.txt 2&>1


※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. command > file.txt 2>&1 です。

標準入出力には番号がついており、番号指定でストリームを制御することができます。

0 標準入力
1 標準出力
2 標準エラー出力

通常のリダイレクトは暗黙で 1 標準出力 が指定されており、以下の指定は同じ意味を持ちます。

command > file.txt
command 1> file.txt

同様に、標準エラー出力をファイルに保存したい場合は、以下のように指定します。この場合、明示的に標準エラー出力であることを指定します。

command 2> error.txt

標準出力と標準エラー出力を、別々のファイルに出力するには、以下の指定を行います。

command > file.txt 2> error.txt

では、例題のように標準出力と標準エラー出力を同じファイルに出力するにはどうすればよいでしょう。まず標準出力をファイルにリダイレクトし、標準エラー出力を標準出力にリダイレクトする(イメージ的には混ぜる) ようにします。そのための指定が「&」というわけです。

1) 標準出力のリダイレクト
command 1> file.txt

2) 標準出力のリダイレクトに標準エラー出力を混ぜる
command 1> file.txt 2>&1

このように、きちんと順序立てて理解しておきましょう。

103.4ストリーム、パイプ、リダイレクトを使う

今回は101試験の試験範囲から「103.4 ストリーム、パイプ、リダイレクトを使う」についての例題を解いてみます。

■例題
teeコマンドの役割として正しいものを選びなさい。

1. 2つの標準入力を同時に入力として受け付ける
2. 標準出力をファイルと標準出力に出力する
3. 標準出力を2つのファイルに出力する
4. 標準出力を2つの標準出力として出力する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. 標準出力をファイルと標準出力に出力する です。

通常、標準出力は1つだけですので、パイプで別のコマンドの標準入力に流し込むか、リダイレクトでファイルに保存するかのいずれかしか行えません。もし、標準出力をコンソールに表示しつつ、ファイルにも保存しておきたいときにはteeコマンドを使用します。

teeコマンドの使い方は以下の通りです。以下の例では、makeの結果をコンソールに出力しつつ、make.logというファイルにも保管しておきます。

○teeコマンドの使用例 その2

$ make | tee make.log


ただし、この場合、標準エラー出力はteeコマンドにパイプで流し込まれていないので、makeが出力したエラーはファイルに保管されません。より完全に結果を保存しておきたい場合には、標準エラー出力を標準出力と一緒に出力するように指定します。

○teeコマンドの使用例 その2

$ make  2>&1 | tee make.log

103.4ストリーム、パイプ、リダイレクトを使う

今回は、101試験の出題範囲から「103.4 ストリーム、パイプ、リダイレクトを使う」についての例題を解いてみます。

■例題
OBJECTIVE: 1.103.4 TYPE: mc 
What command would send the output of cmd1 to the input of cmd2?
cmd1 | cmd2
cmd1 || cmd2
cmd1 && cmd2
cmd1 ; cmd2
cmd1 cmd2

■例題の翻訳
「cmd1の出力をcmd2の入力に送るコマンドはどれですか?

※この例題は、実際のLPIC試験とは異なります。

解答と解説

答えは 各選択肢の意味を一つずつ見ていきましょう。

・cmd1 | cmd2
これはパイプでcmd1の標準出力を、cmd2の標準入力に渡します。
これが正解です。

・cmd1 || cmd2
これはOR制御演算子です。cmd1の終了ステータスが0以外の場合、cmd2を実行します。cmd1がエラーやその他の何かを起こした時にcmd2が実行されることになります。

・cmd1 && cmd2
これはAND制御演算子です。cmd1の終了ステータスが0の場合、cmd2を実行します。cmd1がエラーを起こさなかった時にcmd2が実行されることになります。

・cmd1 ; cmd2
これは単なる順次実行です。cmd1の終了ステータスに関係なく、cmd2を実行します。

・cmd1 cmd2
cmd2をcmd1の引数として与えてcmd1を実行しています。
選択肢の中で入出力のストリームを操作するコマンドは1番最初の選択肢だけでした。3つはシェルのコマンド実行制御に関係して おり、この出題範囲には関係ありませんが、実際のコマンドライン作業やシェルスクリプトの作成においては重要なポイントです。
特にOR制御演算子の「終了ステータスが0以外」という点に注意です。
これはエラーではなく、正常終了以外の何かという意味になるので、しっかりと覚えておきましょう。

ストリームの操作にはパイプ以外にリダイレクトがあります。
リダイレクトの方が種類が多いので、次回はリダイレクトについて整理してみます。

103.4ストリーム、パイプ、リダイレクト を使う

今回は101試験の試験範囲から「103.4 ストリーム、パイプ、リダイレクトを使う」についての例題を解いてみます。

■例題
commandの実行結果を標準出力とfile.txtの両方に出力するteeコマンドの使い方として正しいものを選びなさい。

1. command > tee file.txt
2. command | tee file.txt
3. tee command file.txt
4. command | tee > file.txt

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. command | tee file.txt です。

teeコマンドは標準入力から入力されたストリームを、標準出力と引数で指定されたファイルの双方に出力するコマンドです。ですので、解答のようにcommandの標準出力をパイプでteeコマンドに繋いであげる必要があります。

1. command > tee file.txt では、commandの出力がteeというファイルにリダイレクトされてしまうことになるので、正しくありません。

3. tee command file.txt では、teeコマンドの出力がcommandというファイルに出力されてしまいます。実行自体は行えますが、teeコマンドは標準入力、通常はキーボードからの入力待ちの状態で実行されます。

4. command | tee > file.txt では、teeコマンドからの標準出力がfile.txtにリダイレクトされてしまい、画面に結果が表示されなくなります。正常に動作はしますが、例題の求めている結果にはなりません。

teeコマンドは、通常は引数で指定されたファイルに結果を上書きします。
>>でリダイレクトするように追加をしていきたい場合には-aオプションをつけて実行する必要があります。

103.5 プロセスの生成、監視、終了

今回は101試験の試験範囲から「103.5 プロセスの生成、監視、終了」についての例題を解いてみます。

■例題
PIDが101のプロセスをkillコマンドでの強制終了する方法として正しいものを選びなさい

1. kill -SIGFORCE 101
2. kill -s 9 101
3. kill -s 101
4. kill -SIGKILL 9

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 答えは 「2. kill -s 9 101」 です。

killコマンドの使い方は下記のとおりです。

kill -[シグナル名またはシグナル番号] プロセスID
kill -s [シグナル名またはシグナル番号] プロセスID
kill -l [シグナル名またはシグナル番号]

killコマンドは、プロセスに対してシグナルを送ります。
プロセスは、受け取ったシグナルに合わせて、一時停止や終了などの動作を実行します。
killコマンド実行時にシグナル名やシグナル番号を指定しない場合は、TERMシグナルがプロセスに対して送られます。
killコマンドの引数にシグナル名、シグナル番号、または、-sオプションに続けて、シグナル名、シグナル番号をつけることでシグナルを指定することができます。シグナル名やシグナル番号を確認するには、killコマンドの引数に-lを指定します。

「1. kill -SIGFORCE 101」は、SIGFORCEという名前のシグナルは存在しないため、誤りです。
-sオプションに強制終了の動作のシグナル番号を指定してある「2. kill -s 9 101」は正しいです。
「3. kill -s 101」はシグナル名またはシグナル番号が指定してないため、誤りです。
「4. kill -SIGKILL 9」は強制終了の動作のシグナル名を指定してありますが、
プロセスIDが101ではないため誤りです。

103.5 プロセスの生成、監視、終了

今回はLPIC101試験の試験範囲から、「103.5 プロセスの生成、監視、終了」についての例題を解いてみます。

■例題
コマンドの末尾に「&」をつけた場合の説明として正しいものを選びなさい。

1. 優先順位を最低にしてコマンドを実行する
2. バックグラウンドでコマンドを実行する
3. ログアウト後もコマンドを実行し続ける
4. コマンドの実行に成功した場合のみ、次のコマンドを実行する

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「2. バックグラウンドでコマンドを実行する」です。

コマンド(プログラム)の末尾に「&」をつけて実行すると、バックグラウンドでコマンドを実行します。
バックグラウンドでコマンドを実行することで、あるコマンドが実行されている間も同じシェルで作業を行うことが出来ます。

優先順位を変更して実行するコマンドは「nice」コマンドです。nice値は19が優先度最低、-20が優先度最高となります。nice値の変更に関して、一般ユーザでもniceコマンドは実行できますが、優先度を下げることしか出来ません。rootユーザであれば、nice値の上げ下げの両方を指定することができます。

ログアウト後もコマンドを実行し続けるためには、nohupコマンドを使用します。nohupコマンドを使用することで、HUPシグナルを無視してコマンドを実行することができます。
コマンドをバックグラウンドで実行している場合でも、ログアウトを行うと、そのログインシェル(親プロセス)の終了時に子プロセス(コマンド)にHUPシグナルが送られ、コマンドが終了してしまいます。

nohup コマンド &

というように指定することで、ログアウト後もバックグラウンドでプログラムを実行し続けることができます。なお、シェルによっては、nohupをつけなくてもバックグラウンドでプログラムを実行し続ける動作をすることがあります。

「&&」をつけた場合、「4. コマンドの実行に成功した場合のみ、次のコマンドを実行する」の動作になります。

コマンド1 && コマンド2

というようにコマンドを実行すると、コマンド1が成功した場合のみコマンド2を実行します。

◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


103.5プロセスを生成、監視、終了する

今回は、101試験の出題範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
ユーザーがバックグラウンドで実行しているプロセスの一覧を表示するのに使用するコマンドを選びなさい。

1. fg
2. bg
3. jobs
4. lsps
5. killall

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. jobs です。

Linuxは、プロセスを実行することで様々な処理を行っています。プロセスには、システム起動時に実行されたり、システム管理者が起動したプロセスと、システムを利用しているユーザーが実行しているプロセスの2種類に大きく分けられます。

ユーザーはコマンドを実行することで、自分が必要な処理を行うプロセスを起動します。コマンドプロセスは、必要な処理を行っている間は起動し続け、処理が終了するとプロセスは消失します。

通常、シェルからコマンドを起動すると、コマンドプロセスの処理が終わるまでシェルに制御が戻りません。これは実行中のプロセスがフォアグラウンドになっているためです。
プロセスをバックグランドで実行することで、処理がすぐにシェルに戻ってきます。コマンドプロセスを起動時にバックグラウンド実行にするには、コマンドの後ろに&をつけて実行します。

例)make処理をバックグラウンドで実行
$ make &

また、フォアグラウンドで実行中のプロセスも、バックグラウンド実行にすることができます。まずキー操作でCtrl+Zとしてフォアグラウンドのプロセスを中断(Suspend)します。そしてbgコマンドを実行して、中断中のプロセスをバックグラウンド実行します。

このように、中断されているプロセスや、バックグラウンドで実行されているプロセスのことをジョブと呼び、jobsコマンドを実行することでどのようなジョブが実行されているかを確認することができます。

例)複数のジョブをコントロールする
$ less /etc/services #1つ目のlessコマンドを実行
#lessコマンドをCtrl+Zで中断
[1]+ Stopped                 less /etc/services

$ less /etc/hosts #2つ目のlessコマンドを実行
#lessコマンドをCtrl+Zで中断
[2]+ Stopped                 less /etc/hosts

$ jobs #jobsコマンドでジョブを確認
[1]- Stopped                 less /etc/services
[2]+ Stopped                 less /etc/hosts

103.5プロセスを生成、監視、終了する

今回は101試験の試験範囲から、「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
ログアウト後もコマンドの実行を続けたい時に使用するコマンドとして適切なものを選びなさい。

  1. bg
  2. continue
  3. fg
  4. nohup
  5. uptime

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. nohup です。

通常、コマンドラインからのコマンドの実行は、ログアウト時に終了します。
プロセスの終了はHUPシグナルを送ることで行っていますが、nohupコマンドを付けて実行されたコマンドは、このHUPシグナルによる終了の対象外となります。

nohupコマンドで実行するためには、出力をコンソールやターミナル以外に出力できなければなりません。そのため、リダイレクトを行う必要があります。明示的にリダイレクトが指定されなかった場合には、nohup.outファイルが作成されます。

たとえば、コンパイル作業など、実行に時間がかかる作業をリモート環境から行う場合、接続が切れることで中断してしまう可能性があります。このような作業は、最初からnohupコマンドでバックグラウンド実行を行うようにすると良いでしょう。

○例:makeを実行して、結果をmake.logに記録しておく
$ nohup make > make.log

103.5プロセスを生成、監視、終了する

今回は101試験の試験範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
nohupコマンドの役割として正しいものを選びなさい。

1. ログアウト後もコマンドの実行を続ける
2. 優先順位を下げて実行する
3. 優先順位を上げて実行する
4. 異常終了しないように実行する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. ログアウト後もコマンドの実行を続ける です。

シェルから実行されたプログラムは、シェルの子プロセスとしてプロセスが生成され、実行されます。そのため、ユーザーがログアウトして親プロセスであるシェルがプロセス終了すると、子プロセスもすべて終了します。

nohupコマンドは、このようにログアウトした場合でも、実行しているプロセスを継続して実行する仕組みです。具体的には、プロセスを実行する時にHUPシグナルを受け付けない状態で起動します。

○実行の例
$ nohup script.sh &
nohup: appending output to `nohup.out'
$

実行すると、nohup.outに出力が保存されるようになりますが、明示的に標準出力や標準エラー出力をファイルにリダイレクトすることもできます。

103.5プロセスを生成、監視、終了する

今回は、101試験の出題範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
topコマンドの対話式コマンドo(小文字)の役割として正しいものを選びなさい。

1. 表示項目の表示順を変更する
2. 表示項目のソート順を変更する
3. プロセス権限がrootのプロセスのみ表示する
4. NICE値がマイナスのプロセスのみ表示する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. 表示項目の表示順を変更する です。

topコマンドはプロセスに関する様々な情報をリアルタイムに近い形で表示してくれますが、通常のコンソール画面ではすべての情報を表示しきれません。そこで対話式コマンドoを入力することで、様々な表示項目の表示順をカスタマイズすることができます。

○topコマンドの対話式コマンドoの実行例
Current Fields:  AEHIOQTWKNMbcdfgjplrsuvyzX12  for window 1:Def
Upper case letter moves field left, lower case right

* A: PID        = Process Id              u: nFLT       = Page Fault count
 0x00100000  PF_USEDFPU (thru 2.4)
* H: PR         = Priority                y: WCHAN      = Sleeping in Function
* I: NI         = Nice value              z: Flags      = Task Flags <sched.h>
* O: VIRT       = Virtual Image (kb)    * X: COMMAND    = Command name/line
* Q: RES        = Resident size (kb)      1: UTIME      = CPU User Time
* T: SHR        = Shared Mem size (kb)    2: STIME      = CPU System Time
* W: S          = Process Status
* K: %CPU       = CPU usage             Flags field:
* N: %MEM       = Memory usage (RES)      0x00000001  PF_ALIGNWARN
* M: TIME+      = CPU Time, hundredths    0x00000002  PF_STARTING
  b: PPID       = Parent Process Pid      0x00000004  PF_EXITING
  c: RUSER      = Real user name          0x00000040  PF_FORKNOEXEC
  d: UID        = User Id                 0x00000100  PF_SUPERPRIV
  f: GROUP      = Group Name              0x00000200  PF_DUMPCORE
  g: TTY        = Controlling Tty         0x00000400  PF_SIGNALED
  j: #C         = Last used cpu (SMP)     0x00000800  PF_MEMALLOC
  p: SWAP       = Swapped size (kb)       0x00002000  PF_FREE_PAGES (2.5)
  l: TIME       = CPU Time                0x00008000  debug flag (2.5)
  r: CODE       = Code size (kb)          0x00024000  special threads (2.5)
  s: DATA       = Data+Stack size (kb)    0x001D0000  special states (2.5)

大文字で*がついているものが表示している項目です。表示されない項目は小文字になっています。大文字になっている項目のアルファベットを、大文字としてキー入力すると上(表示としては左)に、小文字として入力すると下(表示としては右)に移動します。終了するにはEnterキーを入力します。

表示項目を変更したい場合には、対話式コマンドfを入力します。同じような表示になりますが、表示項目のアルファベットをキー入力することで、表示項目に入れたり外したりすることができます。

103.5プロセスを生成、監視、終了する

今回は、101試験の出題範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
OBJECTIVE: 1.3.5 TYPE: mc 
Under the bash shell, when a command is running, pressing control-Z will usually

1.suspend the foreground task.
2. adds an EOF to the file.
3. kill the command running in the foreground
4. move the foreground task into the background
5. log the user off


■例題の翻訳
bashシェルを使ってコマンドを実行している時にCtrl-Zキーを押すと通常どうなりますか?

1. フォアグラウンドタスクをサスペンドする
2. EOF(End Of File)をファイルに追加する
3. フォアグラウンドで実行中のコマンドを終了する
4. フォアグラウンドタスクをバックグラウンドに移行する
5. ユーザーをログオフ(ログアウト)させる

解答と解説

答えは 1となります。

プログラムは、Linux上で動作している時には「プロセス」と呼ばれます。ユーザーが実行しているプロセスを「タスク」と呼ぶこともあります。
LinuxはマルチユーザーマルチプロセスのOSであり、同時に多くのプロセスが実行可能です。プロセスは所定の処理が完了すると終了しますが、その他にシグナルを送ることでコントロールすることができます。シグナルを送るにはkillコマンドを実行するか、Ctrlキーと何かのキーを同時に押すことで現在実行しているプロセス(フォアグラウンドタスク)にシグナルを送ることができます。

現在実行しているプロセス以外に実行中のプロセスを、背後で動いているという意味から「バックグラウンドタスク」と呼びます。例題のCtrl-Zを押すと、フォアグラウンドタスクをバックグラウンドタスクに移行させると共に、その実行を一時的に停止することができます。これを「サスペンド」と呼びます。

選択肢2はCtrl-Dで実行できます。たとえばキーボードから標準入力に対して何かを入力している際にEOFが送信されると「入力終了」という意味になります。

選択肢3はCtrl-Cで実行できます。いつまでも実行し続けるプログラムなどを停止する場合に利用します。

選択肢4はCtrl-Zの機能の半分だけの説明のため正しくありません。

選択肢5はログインシェルのbashでコマンドを実行していない時にCtrl-Dを入力した際の動作です。つまりbashに対してEOFを入力するとbashが終了し、動いているプロセスが無くなるためログオフすることになります。

プロセス管理で最も重要なコマンドはkillコマンドです。プロセスを終了させるだけでなく、シグナルを送ることでプロセスをコントロールできます。
シグナルのリストはkill -lで見ることができます。
それぞれのシグナルにはシグナル番号とシグナル名がついています。
主なシグナルについてきちんと覚えておきましょう。

■主なシグナル

シグナル番号シグナル名役割
1HUPハングアップ。デーモンは設定再読込で再起動
2INTインタラプト。Ctrl-Cと同様
9KILLプロセスを強制的に終了
15TERMターミネート。終了。killコマンドのデフォルト
18TSTPサスペンド。Ctrl-Zと同様



103.5プロセスを生成、監視、終了する

今回は、101試験の出題範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
バックグラウンドで停止しているプロセスを再度実行するコマンドを記述しなさい。
※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは bg になります。

Linuxのコマンドラインインターフェースでは、入力して実行したコマンドは終了(エラー等の異常終了も含む)することで制御をシェルに戻します。
もし、コマンド実行後、すぐにシェルに制御を戻して作業を続けたい時には、コマンドの後ろに" &"をつけて実行することで、バックグランド実行を行うことができます。

例)ファイルコピーをバックグラウンドで実行
$ cp -a /etc /opt/backup/20060811

バックグラウンド実行は、現在フォアグラウンドで実行しているプロセスにシグナルを送ることでバックグラウンドにすることもできます。

例)makeをバックグラウンド実行
$ make > make.log 2> make_error.log
※Ctrl+Zを入力
[1]+ Stopped make

例)バックグラウンド実行中(ここでは停止中)のプロセスを確認
$ jobs
[1]+ Stopped make

例)バックグラウンドで停止中のプロセスを実行
$ bg
[1]+ make &

例)バックグラウンドで実行中のプロセスをフォアグラウンドで実行
$ fg

この例ではプロセスは1つしか動かしていませんが、複数動作している場合にはbgコマンド、fgコマンドにはジョブ番号(jobsコマンドで確認できる)を値として与えてやる必要があります。

フォアグラウンドで実行しているプロセスをバッググラウンドに移動させるにはCtrl+Zを入力します。このあたりの作業については、以前解説した内容を参考に
してください。

103.5プロセスを生成、監視、終了する

今回は101試験の試験範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
nohupコマンドの説明として正しいものを選びなさい。

1. ログアウト後もコマンドを実行し続ける
2. TERMシグナルを受け付けない
3. エラー出力を出力しない
4. 優先度を最低にしてコマンドを実行する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. ログアウト後もコマンドを実行し続ける です。

通常、ユーザーが起動したプロセスはログアウト時にHUPシグナルを受けて終了してしまいますが、nohupコマンドの後ろに引数として与えられたコマンドはログアウト後も引き続き実行されます。

たとえば、長時間かかるダウンロードやコンパイルのような処理をnohupコマンドで実行しておけば、終了する前にログアウトすることができるようになります。

○nohupコマンドでカーネルソースをダウンロードする
$ nohup wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
$ logout

※ログインし直す

$ ps ax
(省略)
14920 ?        S      0:00 wget http://www.kernel.org/pub/linux/kernel/v2.6/linu


nohupコマンドは標準出力と標準エラー出力をnohup.outファイルにリダイレクトして保存しておくので、実行中に発生したエラーなどは後から内容を確認できます。

○nohupコマンドの出力を確認する
$ tail nohup.out
68300K .......... .......... .......... .......... .......... 99%    2.80 MB/s
68350K .......... .......... .......... .......... .......... 99%  213.69 KB/s
68400K .......... .......... .......... .......... .......... 99%    2.93 MB/s
68450K .......... .......... .......... .......... .......... 99%  214.79 KB/s
68500K .......... .......... .......... .......... .......... 99%   10.16 MB/s
68550K .......... .......... .......... .......... .......... 99%    2.79 MB/s
68600K .......... .......... .........                       100%  129.53 KB/s

10:38:17 (482.85 KB/s) - `linux-2.6.36.tar.bz2' を保存しました [70277083/70277083]


使いこなせば便利なnohupコマンド。自分なりの使い方を探してみて下さい。

103.5プロセスを生成、監視、終了する

今回は、101試験の出題範囲から「103.5 プロセスを生成、監視、終了する」についての例題を解いてみます。

■例題
プロセスの実行優先度の変更について、正しいものを選びなさい

1. nice値を変更できるのはrootユーザーだけである
2. 一般ユーザーはreniceコマンドで優先順位を上げられる
3. nice値は-19から20までの範囲で指定する
4. nice値は数字が大きいほど優先順位が低い

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. nice値は数字が大きいほど優先順位が低い です。

nice値は、プロセス間の実行優先順位を決めるために使用される値です。-20から19までの値を取り、デフォルトのnice値は10に設定されます。
起動時にniceコマンドをコマンドラインの先頭に付けることで、起動後のnice値をあらかじめ指定することができます。

nice値は、なかなか覚えにくいものですが、以下のように覚えておくと良いでしょう。

・優先順位を譲ってくれるプロセスほど、ほかのプロセスから見て親切な、niceなプロセスなので、nice値が高くなる。
・ほかのプロセスよりも自分を優先しようとするプロセスは、わがままな、niceではないプロセスなので、nice値が低くなる。
・nice値0は正の数値側に含まれる。だから正の数値は0から19までの20段階。
・nice値がマイナスになるような、わがままなプロセスはrootユーザーしか実行できない。

reniceコマンドも、このルールにほぼ縛られます。rootユーザー以外の一般ユーザーはnice値を増やす、すなわち優先順位を下げることはできても、nice値を減らして優先順位を上げることはできません。

103.6 プロセスの実行優先度の変更

今回はLPIC101試験の試験範囲から、「103.6 プロセスの実行優先度の変更」についての例題を解いてみます。

■トピックの概要

このトピックの内容は以下の通りです。

<103.6 プロセスの実行優先度の変更>
重要度 2

<説明>
プロセスの実行優先度を管理できる。

<主要な知識範囲>
・作成されるジョブのデフォルトの優先度を知っている
・デフォルトよりも高い、または低い優先度でプログラムを実行する
・実行中のプロセスの優先度を変更する


<重要なファイル、用語、ユーティリティ>
・nice
・ps
・renice
・top


■例題

実行中のプロセスの優先順位を下げるコマンドとして適切なものを選択してください。
ただし実行中のプロセスの優先度は0とします。

1. nice -n -1 du /
2. renice -n -1 -p 1205
3. renice -n +1 -p 1205
4  top

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「3. renice -n +1 -p 1205」

実行中のプロセスの優先度を変更するコマンドは、「renice」です。
「renice」の主な使い方は以下の通りです。

renice [-n] 優先度 [-p|-g|-u] 識別子

-n … +20から-19までの優先度を指定します。
      +20が最も優先度が低く、-19は最も優先度が高くなります。
      優先度を高くする操作は、基本的にrootユーザのみで行えます。
      
-p … 識別子としてプロセスIDを指定します
-g … 識別子としてプロセスのグループIDを指定します
-u … 識別子としてプロセスのユーザIDを指定します

これに対して、プロセスの実行時に優先度を指定するコマンドが、「nice」です。
「nice」の主な使い方は以下の通りです。

nice [-n] 優先度 実行コマンド

-n … +20から-19までの優先度を指定します。
      +20が最も優先度が低く、-19は最も優先度が高くなります。
      優先度を高くする操作は、基本的にrootユーザのみで行えます。

なおtopコマンドは、システムのプロセスの状態を確認するコマンドです。
優先度の変更はできません。

優先度の設定は、負荷の高い処理を長時間動作させる場合などに有効です。
使う場面は少ないですが、いつでも使えるように覚えておきましょう。

■例題作成者
株式会社デージーネット ソリューション開発部    森 彰吾 氏


103.6プロセスの実行優先度を変更する

今回は、101試験の出題範囲から「103.6 プロセスの実行優先度を変更する」についての例題を解いてみます。

■例題
ユーザーが実行しているプロセスの実行優先度を変更するコマンドとして正しいものを選びなさい。

1. top
2. ps
3. nice
4. chnice
5. renice

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 5. renice です。

Linuxは、複数のプロセスを同時に並行して動作させるマルチプロセスのOSです。同時並行といっても、ある時点で動作しているプロセスは1つだけで時間を区切って順番にプロセスを切り替えて実行することで、見かけ上複数が同時並行で動作しているように見せています。

nice値は、このように同時実行されるプロセスに優先順位をつけるために利用されます。たとえば、重要度はそれほど高くないプロセスには低い優先順位をつけて、他のプロセスの実行を邪魔をしないようにしたりすることで、円滑なプロセス実行を可能にする仕組みです。

nice値は、-20(最高優先)から19(最低優先)までの40段階に分かれており、基本的にデフォルトは中間の0に設定されます。

nice値の確認は、psコマンドにlオプションをつけることで表示できます。

○例)自分の実行しているプロセスのnice値を確認
$ ps l
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0   500  2171  2170  15   0  5216 1396 wait   Ss   pts/0      0:00 -bash
0   500  2458  2171  17   0  2348  640 -      R+   pts/0      0:00 ps l
                          ^ nice値は0に設定されている

niceコマンドは、現在のデフォルトのnice値を表示したり、引数に指定したコマンドを指定されたnice値で実行したりできます。

○例)nice値を指定してmanコマンドを実行
$ nice
0
※デフォルトのnice値は0
$ nice -n 5 man nice
※manコマンドをnice値5で実行

※Ctrl+Zでmanコマンドをバックグラウンドに移行

$ ps l
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0   500  2711  2710  15   0  5212 1396 wait   Ss   pts/0      0:00 -bash
0   500  2742  2711  21   5  4712  812 finish TN   pts/0      0:00 man nice
0   500  2745  2742  21   5  5164  932 finish TN   pts/0      0:00 sh -c (cd /us
1   500  2746  2745  21   5  5164  420 finish TN   pts/0      0:00 sh -c (cd /us
0   500  2758  2746  21   5  1932  656 finish TN   pts/0      0:00 /usr/bin/less
0   500  2764  2711  17   0  2348  640 -      R+   pts/0      0:00 ps l
※                        ^ nice値が5に設定されている

reniceコマンドは、実行中のプロセスのnice値を変更できます。

○例)reniceコマンドで、実行中のプロセスのnice値を変更
$ renice 10 2742
2742: 古い優先度は 5、新たな優先度は 10 です
※PID 2742のプロセス(manコマンド)をnice値10に再設定
$ ps l
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0   500  2711  2710  15   0  5212 1396 wait   Ss   pts/0      0:00 -bash
0   500  2742  2711  30  10  4712  812 finish TN   pts/0      0:00 man nice
0   500  2745  2742  21   5  5164  932 finish TN   pts/0      0:00 sh -c (cd /us
1   500  2746  2745  21   5  5164  420 finish TN   pts/0      0:00 sh -c (cd /us
0   500  2758  2746  21   5  1932  656 finish TN   pts/0      0:00 /usr/bin/less
0   500  2766  2711  15   0  2348  640 -      R+   pts/0      0:00 ps l
※                        ^ PID 2742のみnice値が10に再設定されている

103.6プロセスの実行優先度を変更する

今回は101試験の試験範囲から、「103.6 プロセスの実行優先度を変更する」についての例題を解いてみます。

■例題
新たに起動されたプロセスのデフォルトのnice値として正しいものを選びなさい。

  1. 0
  2. 1
  3. 20
  4. 19
  5. -19

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. 0 です。

nice値は、プロセス間の優先順位を決定する値です。新たに起動されたプロセスはnice値0として設定されます。

nice値は-20から19までの値を取ります。これは正の値と負の値がそれぞれ20段階あり、0は正でも負でもありませんが、少なくともマイナス記号は付かないので、正の値側に入ると覚えておけばよいでしょう。

↑優先順位低い
0~19まで20段階
19
18


1
0

-1


-19
-20
-1から-20まで20段階
↓優先順位高い

優先順位の考え方ですが、他のプロセスに優先順位を譲る「ナイスな奴」だと考えるのが覚えやすいようです。俺が俺がと自分のことしか考えない「ナイスではない奴」に対する評価はマイナスになります。

○nice値の例

$ ps alx
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  16   0  1716  440 -      S    ?          0:00 init [3]     
1     0     2     1 -100  -     0    0 migrat S    ?          0:00 [migration/0]
1     0     3     1  34  19     0    0 ksofti SN   ?          0:00 [ksoftirqd/0]
5     0     4     1 -100  -     0    0 -      S    ?          0:00 [watchdog/0]
1     0     5     1  10  -5     0    0 worker S<   ?          0:00 [events/0]
1     0     6     1  10  -5     0    0 worker S<   ?          0:00 [khelper]
1     0     7     1  10  -5     0    0 worker S<   ?          0:00 [kthread]
1     0     8     7  10  -5     0    0 xenwat S<   ?          0:00 [xenwatch]
1     0     9     7  10  -5     0    0 xb_rea S<   ?          0:00 [xenbus]

ksoftirqdプロセスは最も低い優先順位で動いています。いくつかのプロセスは高い優先順位(-5)で動作しています。

nice値の変更は、一般ユーザーも行うことができますが、nice値を増やして優先順位を下げることはできても、nice値を増やして優先順位を上げるにはroot権限が必要です。

103.7正規表現を使用してテキストファイルを検索する

今回は、101試験の出題範囲から「103.7 正規表現を使用してテキストファイルを検索する」についての例題を解いてみます。

■例題
行の先頭が 2009 で始まる行を検索する正規表現として正しいものを選びなさい。

  1. >2009
  2. ^2009
  3. 2009$
  4. 2009*
  5. 2009?

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. ^2009 です。

正規表現では、文字列にマッチさせるために様々なメタ文字を使用します。たとえば、以下のようなメタ文字があります。

.:任意の文字にマッチ
^:行頭の文字にマッチ
$:行末の文字にマッチ
[ ]:括弧内の文字にマッチ
[^ ]:括弧内の文字以外の文字にマッチ

たとえば例題では、行頭に日付が入っているテキストファイルから2009年の情報を取り出すことを想定しています。もしgrepコマンドを使って実行するのであれば、以下のように実行します。

○grepコマンド実行例(1)
$ grep ^2009 log_file

行末がerrorで終わるテキストファイルであれば、以下のようになります。

○grepコマンド実行例(2)
$ grep error$ log_file

正規表現ではメタ文字は特別な意味を持つので、メタ文字そのものを通常の文字として扱うにはエスケープを行う必要があります。エスケープにはバックスラッシュ(フォント設定によっては円マーク)をエスケープしたい文字の前に置きます。

○.そのものを文字として扱う場合
?.

正規表現は大量のログデータなどを扱う上で非常に便利な機能ですので、基本的な使い方をしっかりと把握しておきましょう。

103.7正規表現を使用してテキストファイルを検索する

今回は101試験の試験範囲から「103.7 正規表現を使用してテキストファイルを検索する」についての例題を解いてみます。

■例題
grepコマンドと比較したとき、fgrepコマンドの特徴として正しいものを選びなさい。

1. 高速に検索する
2. 複数ファイルを検索する
3. 検索パターンを単なる文字列として検索する
4. より高度な正規表現に対応して検索する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. 検索パターンを単なる文字列として検索する です。

grepコマンドは正規表現を使って様々なパターンにマッチする検索が行えますが、そこまで複雑である必要がない単純な文字列検索を行いたい場合があります。fgrepコマンドは、与えられたパターンを単なる文字列として検索するコマンドです。

以下の例では、先頭を表す正規表現「^」がgrepコマンドの場合には有効に働き、fgrepコマンドでは単なる文字列パターンとして認識されているのが分かります。

○grepコマンドとfgrepコマンドの違い
$ cat test.txt
LPIC
^LPIC

$ grep ^LPIC test.txt
LPIC

$ fgrep ^LPIC test.txt
^LPIC


正規表現には「^」の他に「$」や「[]」などがありますが、正規表現のパターンを使わずに単純に検索を行いたい場合にはfgrepコマンドは大変便利です。上手に使い分けるようにしましょう。

103.7正規表現を使用してテキストファイル を検索する

今回は101試験の試験範囲から「103.7 正規表現を使用してテキストファイルを検索する」についての例題を解いてみます。

■例題
sedコマンドへの指示として「s/linux/Linux/g」と指定したときの動作について正しい説明を選びなさい。

1. 一番最初に見つかった文字列linuxだけをLinuxに置き換える
2. 見つかったすべての文字列linuxをLinuxに置き換える
3. 行の中で最初に見つかった文字列linuxだけをLinuxに置き換える
4. 行の先頭にある文字列linuxをLinuxに置き換える

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. 見つかったすべての文字列linuxをLinuxに置き換える です。

sedコマンドはStream EDitorの略で、標準入力、またはファイル入力から読み込まれたストリームデータに対して、指示された処理を行って標準出力に出力します。
よく使用される処理としては、例題にあるような置換処理があります。

正解にあるように、「s/元の文字列/新しい文字列/g」と指示をあたえると、ストリームに含まれるすべての文字列を置換対象にします。最後につけたgを取って「s/元の文字列/新しい文字列/」とすると、行で最初の文字列のみ置換し、2つ目の文字列は置換しなくなるので、場合によっては置換残りが出てしまうことになるので、状況に応じて使い分けが必要です。
ほとんどの場合、g付きで実行することが多いでしょう。

この文字列置換の指定は、sedだけでなくviエディタでも使用できます。その場合、以下のような指定になります。

%s/元の文字列/新しい文字列/g

%を付けないと、現在表のみが対象になるので、ファイル全体に対して置換処理を行いたい場合には%を付けてください。

103.8 viを使って基本的なファイル編集を行う

今回は101試験の試験範囲から「103.8 viを使って基本的なファイル編集を行う」についての例題を解いてみます。

■例題
viの操作で行をコピーする操作として正しいものを選びなさい。

1. c
2. dd
3. yy
4. p

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. yy です。

viは編集モードで様々な編集操作が行えますが、行のコピー&ペーストは設定ファイルなどを修正する際に、修正前の状態を残しておくことができるので、とてもよく使う操作です。

yyは「ヤンク」と呼ばれる動作で、カーソル行をバッファに読み込みます。
複数行を読み込むこともできます。たとえば3行なら「3yy」と入力することで、3行分一括してバッファに読み込みます。

バッファの内容は、pまたはPでペーストすることができます。pはカーソル行の下、Pはカーソル行の上にペーストします。通常の操作であれば、カーソル行の下でよいので「yyp」という操作で簡単に行のコピー&ペーストができます。

設定ファイルの修正は、必ず前の状態を残す履歴管理的なやり方が必要となりますので、行のコピ&ペーストをしてから編集をする習慣を身につけておきましょう。

103.8 viを使った基本的なファイル編集の実行

今回はLPIC101試験の試験範囲から、「103.8 viを使った基本的なファイル編集の実行」についての例題を解いてみます。

■例題
viのコマンドモードでの操作で入力モードへの切り替わりが発生しないものを選びなさい

1. i
2. o
3. a
4. x

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「4. x」です。

viには、コマンドモードと入力モードがあります。
コマンドモードでは、キーボードからの入力はすべてviのコマンドとして扱われます。
文字を入力するためには、コマンドモードから入力モードへの切り替えを行う必要があります。
入力モードへの切り替えを行うviのコマンドは複数あり、それぞれで動作が異なります。
「1. i」は、カーソルがある位置からテキストの入力を開始します。
「2. o」は、カーソルのある行の次の行に新しい行を作ってテキストの入力を開始します。
「3. a」は、カーソルがある位置の右からテキストの入力を開始します。

「4. x」は、カーソルがある位置の一文字を削除するviのコマンドです。
そのため、入力モードへの切り替わりは発生しません。

viには、その他にも様々なコマンドがあります。
viのコマンドを駆使することで、ファイルの編集が効率よく進みます。
viのコマンドとその役割について抑えておきましょう。

◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


103.8viを使って基本的なファイル編集を行う

今回は、101試験の出題範囲から「103.8 viを使って基本的なファイル編集を行う」についての例題を解いてみます。

■例題
viを使ってテキストファイルの編集を行っている。テキストファイルの最終行にカーソルを移動させるコマンドとして正しいものを選びなさい。

  1. a
  2. A
  3. g
  4. G
  5. Z

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. G です。

viはUNIX系のOSで幅広く使用されているテキストエディタです。文字しか表示できない端末での利用を前提にしているため、文字を入力するモードと各種命令のコマンドを実行するモードを切り替える「モーダル」なエディタとなっています。GUIで動作するモードレスなエディタに慣れていると最初は面食らうかもしれませんが、GUIエディタのメニューからのコマンド実行をコマンドモードから行うと考えればよいでしょう。

viを快適に使用するには、いくつかのコマンドを覚えておくとさらに便利になります。例題の解答にあるGコマンドも便利なコマンドです。
Gは「Go To」の頭文字を取ったもので、指定された行にカーソルを移動するコマンドです。たとえば、「1G」と入力すれば1行目に移動し、「10G」と入力すれば10行目に移動します。その他のコマンドの場合には、コマンドの入力前に数字を入れるとその回数だけコマンドを実行することになりますが、Gコマンドの場合には行番号の指定になることを覚えておいてください。そして、行番号を指定しない場合には、編集中のテキストファイルの最終行に飛ぶことになります。

設定ファイルなどでは、すでに設定されている設定項目の場合には書き換えを行いますが、まだ設定されていない設定項目の場合には追記を行います。
追記の方法にはいくつかやり方がありますが、一番簡単なのはファイルの最後尾にまとめて書いておく方法です。そのような編集をする際に、Gコマンドは非常に役に立ちます。

103.8viを使って基本的なファイル編集を行う

今回は101試験の試験範囲から、「103.8 viを使って基本的なファイル編集を行う」についての例題を解いてみます。

■例題
viで検索する際に使用するコマンドを選びなさい。

  1. i
  2. dd
  3. /
  4. yy
  5. :wq

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. / です。

viには編集モードと文字入力モードの2つがありますが、編集モードでは様々なコマンドが利用できます。

文字列の検索を行うには、編集モードで / を入力します。後に検索したい文字列を入力してエンターキーを押すと、検索が実行され、最初に見つかった文字列の位置にカーソルが移動します。次の候補を検索したい時は、nキーを入力します。

検索文字列には、正規表現を用いることも出来ます。

ちなみに、文字列の置き換えには「:s/検索文字列/置換文字列/」というような、sedなどで使用するのと同様の書式が利用できるので、覚えておくと便利でしょう。

ddは、カーソルのある行を削除します。削除された行のデータはバッファに格納されているので、pコマンドなどでペーストできます。

一方、yyは削除せずにバッファにコピーします。行の複製をする際にはこちらを使うとよいでしょう。これを「yank(ヤンク・ぐいっと引っ張るの意)」と呼びます。

viは、多くのLinux、UNIX環境で標準で利用できるエディタです。基本的な操作には不自由しないぐらいに習熟しておきたいものです。

103.8viを使って基本的なファイル編集を行う

今回は101試験の試験範囲から「103.8 viを使って基本的なファイル編集を行う」についての例題を解いてみます。

■例題
viのコマンド「o」についての説明として正しいものを選びなさい。

1. 現在のカーソル行の次行に空行を入れて入力モード
2. 現在のカーソル行に空行を入れて入力モード
3. 現在のカーソル行の最後から入力モード
4. 現在のカーソルの次の文字から入力モード

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. 現在のカーソル行の次行に空行を入れて入力モード です。

viは編集モードと入力モードを使い分ける「モーダル」エディタですが、入力モードに移行するコマンドはいくつか種類があります。特にカーソル行の次の行に空行を入れて入力モードに移行する「o」コマンドはよく使用するコマンドの一つです。

「O」と大文字で入力すると、現在のカーソル行に空行を入れて入力モードに移行します。二つの動作の違いは以下のようになります。

○oコマンドとOコマンドの違い
1. このような状態だとする。
上上上上上上上上上上上上上上上
カーソル行カーソル行カーソル行
下下下下下下下下下下下下下下下

2. oを押すとカーソル行の下に空行
上上上上上上上上上上上上上上上
カーソル行カーソル行カーソル行
←ここから入力
下下下下下下下下下下下下下下下

3. Oを押すとカーソル行の上に空行
上上上上上上上上上上上上上上上
←ここから入力
カーソル行カーソル行カーソル行
下下下下下下下下下下下下下下下


同様に、aとAも若干動作が異なります。aはカーソルの次から、Aはカーソル行の最後から入力が始まります。


このようにviには入力を便利にするコマンドがいくつも存在していますので、一つずつ覚えていくと、作業も快適になるでしょう。

104.1 パーティションとファイルシステムの作成

今回は101試験の試験範囲から「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
スワップパーティションの作成手順として間違っている手順を選びなさい。

1. fdiskパーティションを作成する
2. fdiskコマンドでパーティションのIDを変更する
3. e2labelコマンドでラベルを付ける
4. mkswapコマンドを実行する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. e2labelコマンドでラベルを付ける です。

ラベルは、たとえば通常のパーティションであれば、e2labelコマンドを使ってext2/3ファイルシステムが作成されたパーティションに付けることができます。ラベルを使うと、/etc/fstabファイル内の設定で、デバイス名の代わりにラベルによるマウント指定が行えます。

スワップ領域にもラベルを付けることができますが、e2labelコマンドでは無くmkswapコマンドに-Lオプションを付けてスワップ領域を作成することでラベルを付けることができます。

○スワップ領域のラベル付け実行例
1. スワップ領域にラベル付け
# mkswap -L swap1 /dev/dm-1
mkswap: /dev/dm-1: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
スワップ空間バージョン1を設定します、サイズ = 2031612 KiB
LABEL=swap1, UUID=f13512ef-7051-4f4e-b4d6-3ea1e5896624

2. ラベル指定でスワップ領域を有効化
# swapon -L swap1
# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition    2031612    0    -1


スワップ領域にもラベルを付けられること、是非覚えておいてくださいね。

104.1パーティションとファイルシステムの作成

今回は、101試験の出題範囲から「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
ジャーナリング機能を備えたファイルシステムをすべて選びなさい。

  1. ext2
  2. ext3
  3. ReiserFS
  4. vfat
  5. XFS

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. ext3 と 3. ReiserFS と 5. XFS です。

ファイルシステムのジャーナリング機能は、突然の電源断など正常なシャットダウン処理が行えなかった際の、再起動時のファイルシステムチェックを効率よく行う仕組みです。

ジャーナリング機能は、実際の書き込みを行う前にジャーナルに記録を行います。もし異常終了が起きた場合は、ジャーナルの情報に基づいて壊れている可能性がある部分だけをチェックして修復していけばよいので、効率よくファイルシステムのチェックが行えます。ジャーナリング機能が無いと、起動時に実行されるfsckコマンドが延々と何時間も走る場合もあります。通常のfsckは、ディスク上を全走査してチェックを行うため、ディスク容量が大きくなると、それだけチェックしないといけない量が増えてしまうためです。

ext3ファイルシステムは、従来Linuxで主に使用されてきたext2にジャーナリング機能を追加したものです。相互に互換性があるため、比較的使用しやすいファイルシステムといえます。

ReiserFSやXFSは、新規に開発されたり、商用UNIXで使用されていたファイルシステムを移植したものです。ディストリビューションによっては、使用できなかったり、モジュールを別途組み込む必要がある場合もあるので、注意が必要です。

104.1パーティションとファイルシステムの作成

今回は101試験の試験範囲から、「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
スワップ領域の説明として間違っているものを選びなさい。

  1. スワップ領域用のパーティションは、通常のファイルシステム用のパーティションと同様に作成する
  2. スワップ領域を初期化するにはmkswapコマンドを使用する
  3. スワップ領域はファイルとしても作成できる
  4. スワップ領域はシステム動作中にも追加や削除が行える

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. スワップ領域用のパーティションは、通常のファイルシステム用のパーティションと同様に作成する です。

Linuxが仮想メモリのスワップアウトを行うための領域であるスワップ領域は、パーティションとファイルのいずれかで作成します。

パーティションとして用意する場合には、fdiskなどを利用してパーティションを作成します。またパーティションの種類を識別する「パーティションタイプ」を通常のLinuxのファイルシステム用(ID 0x83)からスワップ領域用(ID 0x82)に変更する必要があります。

スワップ領域用として作成したパーティションは、mkswapコマンドで初期化します。初期化されたスワップ領域は、swaponコマンドで有効にできます。

最近ではメモリが多いのでスワップ領域が不足するようなことはあまりありませんし、スワップアウトが発生すると性能が大幅に劣化するので、できるだけスワップ領域に頼らないシステム設計をする必要があるでしょう。

104.1パーティションとファイルシステムの作成

今回は、101試験の出題範囲から「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
OBJECTIVE: 2.2.1 TYPE: mc
What command(s) do you use to create swap space?

1. mkswap
2. activeswap
3. swapon
4. initswap
5. mkfs -t swap

■例題の翻訳(意訳)
スワップスペースを作成するためのコマンドはどれか?

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. になります。

Linuxで仮想メモリを使用するには、メモリ上で使用しない領域をスワップアウトするためのスワップスペースが必要になります。Linuxでは通常、スワップスペースはディスク上にパーティションを作成しておきます。スワップパーティションは通常のディスクスペースとは違う種類のスワップスペース専用のパーティションとして作成しておきます。作成にはfdiskコマンドなどを使用します。

スワップパーティションは確保しただけではスワップスペースとして利用できないので、mkswapコマンドを使ってスワップスペースとして初期化を行います。

作成されたスワップスペースはswaponコマンドを使って有効にできます。スワップスペースを無効にするにはswapoffコマンドを使用します。

ext2などの一般的なファイルシステムを作成する際に使用するmkfsとはコマンドが異なるので注意しましょう。

104.1パーティションとファイルシステムの作成

今回は、101試験の出題範囲から「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
新たに追加したハードディスクをパーティションに分割して使用したい。
分割に使用するコマンドを記述しなさい。

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは fdisk になります。

通常、ディストリビューションのインストーラーを使ってシステムのインストールを行っていると、インストーラーが自動的にパーティションを分割してくれるため、手動でハードディスクのパーティションを設定することは少なくなってきています。特に、新しいディストリビューションではカスタムインストールを選択しないとパーティション構成の変更も行えないようなケースがあります。

一方で、fdiskは物理ディスクにアクセスしてパーティションの情報を得たり、パーティションの追加や削除を行う基本的なツールであり、Linuxのシステム管理を理解する上で必ず知っておきたいポイントでもあります。

fdiskの使い方は、引数に操作を行うデバイスを指定します。たとえばIDEでプライマリ・マスターに接続されているハードディスクならば/dev/hdaとなります。

例)プライマリ・マスターのハードディスクをfdiskで操作する
# fdisk /dev/hda

fdiskは対話形式で操作しますが、最低限覚えておきたいコマンドは以下の通りです。

p:パーティション情報の表示
n:パーティションの追加
d:パーティションの削除
t:パーティションタイプの変更
l:パーティションタイプの一覧表示
w:パーティション情報の書き込みと終了
○パーティション情報
パーティション情報は、そのディスクがどのようにパーティション分割されているかの情報を保管しています。この情報に基づいてLinuxはディスクにファイル
システムを作ってアクセスを行います。

○パーティションタイプ
パーティションは、どのような目的に使用するのか、あらかじめ設定しておく必要があります。パーティションタイプは番号でその種類を表しています。
Linuxで使用されるファイルシステムは通常「83」を指定します。もしその領域をスワップ領域にしたい場合には、パーティションタイプを「82」に変更することで、mkswapコマンドなどでスワップ領域として初期化、利用することができます。

104.1パーティションとファイルシステムの作成

今回は101試験の試験範囲から「104.1 パーティションとファイルシステムの作成」についての例題を解いてみます。

■例題
fdiskの役割として正しくないものを選びなさい。

1. 現在のパーティションの情報を参照する
2. 新しいパーティションを作成する
3. 作成済みのパーティションを削除する
4. 作成済みのパーティションのサイズを変更する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. 作成済みのパーティションのサイズを変更する です。

fdiskはハードディスクのパーティションに対する各種操作を行うツールです。Linuxではfdisk以外にもパーティション操作を行うツールはいくつか存在していますが、fdiskは最も基本的なパーティション操作ツールですので、どんな環境でも利用できるよう、使い方をしっかりと押さえておく必要があるでしょう。

最も基本的な機能は、現在のパーティションの情報を参照する機能です。
この機能は「パーティションテーブル」を読むことで実現しています。パーティションテーブルは、ハードディスクのMBR(マスターブートレコード)に保存されています。MBRはハードディスクの先頭512バイトの領域です。

新たにパーティションを作成するには、パーティション番号、先頭シリンダおよび終了シリンダまたはサイズを指定する必要があります。通常は先頭から順番に詰めてパーティションを作成していきますので、先頭シリンダはデフォルト、終了シリンダは指定せずにサイズで指定していくことになります。

パーティションは基本パーティションを4つ作成できますが、これで足りない場合には1つのパーティションを拡張パーティションとし、その中に入れ子にして論理パーティションを作成できます。あまりパーティションを細かく沢山作りすぎるのも管理が大変になってきますから、きちんとパーティション計画を立てて作成すべきでしょう。

必要なくなったパーティションは削除できますが、削除結果をパーティションテーブルに書き込んでしまうと復活させられなくなり、データもすべて読み出せなくなるので注意が必要でしょう。

fdiskにはパーティションのサイズを変更する機能はありません。サイズ変更を行いたい場合には、GNU Partedなどのツールを使う必要があります。

○GNU Parted
http://www.gnu.org/software/parted/index.shtml

104.2 ファイルシステムの整合性を保持する

今回は101試験の試験範囲から「104.2 ファイルシステムの整合性を保持する」についての例題を解いてみます。

今回から、バージョン3.5に合わせて出題していきます。

出題範囲詳細バージョン3.5はこちら
http://www.lpi.or.jp/lpic1/range/ver3.5/range101.shtml


■例題

XFSファイルシステムの解説として間違っているものを選びなさい。

1. ジャーナリングをサポートしたファイルシステムである
2. 遅延アロケーションを行うことでできるだけ高速にアクセス可能にしている
3. スナップショットをサポートしている
4. 大容量のストレージや大きなファイルサイズをサポートしている

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. スナップショットをサポートしている です。

XFSファイルシステムは、大容量ストレージや大きなファイルサイズをサポートしたファイルシステムとして、Linux標準のext2形式のファイルシステムと置き換え可能なファイルシステムとしてLinuxでサポートされるようになりました。ジャーナリング機能もサポートしており、システム障害発生時にも高速にリカバリー可能になっています。

Linuxの標準的なファイルシステムであったext2形式は、ジャーナリングをサポートしたext3形式へと移行していきましたが、XFSを標準でサポートしているディストリビューションもあります。

XFSの特徴の一つとして、遅延アロケーション動作により、すぐに削除される一時ファイルを極力ハードディスクなどに書き込まないようにしたり、できるだけ連続した領域に書き込むようにする方式を取っている点が挙げられます。ただし、ファイルがキャッシュバッファ上に置かれていることになるため、障害発生時にファイルが消失する可能性があります。どのファイルシステムでも同様ですが、電源の2重化など障害対策を行っておく必要があるでしょう。

XFS自体はスナップショットをサポートしていません。Linux環境ではLVMがスナップショットをサポートしており、XFSはLVMと連動して動作します。スナップショットを取るときには、xfs_freezeコマンドでXFSファイルシステムへの書き込みを一時停止し、LVMでスナップショットを取ります。

104.2ファイルシステムの整合性を保持する

今回は、101試験の出題範囲から「104.2 ファイルシステムの整合性を保持する」についての例題を解いてみます。

■例題
iノードの使用状況を調べるために使用するコマンドを選びなさい。

  1. df
  2. du
  3. tune2fs
  4. fsck
  5. dumpe2fs

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. df です。

Linuxで標準的に使用されているファイルシステム ext2/ext3 は、ファイルの管理にiノードを使用しています。iノードの仕組みは、実際にファイルのデータを保管しているデータ領域とは別に、iノード情報を保管するiノード領域が確保されています。

我々がext2/ext3ファイルシステムを作成するときには、どの程度iノード領域を確保するかはあまり意識しませんが、細かいファイルが沢山作成されるような用途の場合には、データ領域は空いているにも関わらず、iノード領域が足りなくなったためにファイルが作成できなくなる場合があります。iノード領域は後から付け足すことが基本的にできないので、ファイルシステムの再作成ということになってしまいます。

iノード領域の使用状況は、dfコマンドに-iオプションをつけることで確認できます。

例)データ領域の使用状況
$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hda2             19656572  14523320   4134752  78% /
none                    262240         0    262240   0% /dev/shm
例)iノード領域の使用状況
$ df -i
Filesystem            Iノード  I使用   I残り I使用% マウント位置
/dev/hda2            2496960  333530 2163430   14% /
none                   65560       1   65559    1% /dev/shm

この例では、データ領域は78%使用、iノード領域は14%使用ということで、iノード領域は十分空いていることが分かります。

ファイルシステム作成時のiノード領域の分量指定はmke2fsコマンドに-iオプションで指定します。

例)2KB毎にiノードを割り当てる
mke2fs -i 2048 /dev/hda2

基本的に、割り当てられるブロックサイズよりも小さいファイルが大量に作成されるような場合には、iノード割当量を変更すべきでしょう。

104.2ファイルシステムの整合性を保持する

今回は、101試験の出題範囲から「104.2 ファイルシステムの整合性を保持する」についての例題を解いてみます。

■例題
Ext2のファイルシステムを、ジャーナリングファイルシステムであるExt3に変換したい。使用するコマンドとして正しいものを選びなさい。

  1. fsck
  2. mke2fs
  3. tune2fs
  4. dumpe2fs

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. tune2fs です。

Linuxで標準的に使用されているファイルシステムは、以前はExt2形式でしたが、最近ではジャーナリングファイルシステムとなったExt3形式になっています。また、さらに上位バージョンとしてExt4形式もサポートされ始めています。

ジャーナリングファイルシステムのユーザーにとってのメリットは、何らかの不正終了が起きたときに、再起動時のfsckコマンドの実行時間が短くて済むということでしょう。Ext3形式は、Ext2形式と互換性を持ちながら、ファイルの操作状態を記録するジャーナルを作成しているので、Ext2のファイルシステムに保存されているファイルデータを消去することなくExt3に変換できます。変換には、tune2fsコマンドに-jオプションを付けて実行します。

もちろん、新たにファイルシステムを作成する場合には、最初からmke2fsマンドで種別をExt3と指定するだけで作成できます。

注意すべき点としては、Ext3はカーネルの機能として提供されているので、場合によってはカーネルに機能として含まれていない場合があります。その場合にはモジュールとして提供することになりますが、起動時に/パーティションをマウントするのであれば、あらかじめ組み込まれるか、起動時RAMDISK(initrd)にExt3のモジュールが含まれている必要があります。
Ext3の機能が無い場合には、Ext3はExt2形式としてマウントされることになるので、ジャーナリング機能は有効になりません。古いシステムなどからバージョンアップする際には注意が必要です。

104.2ファイルシステムの整合性を保持する

今回は101試験の試験範囲から「104.2 ファイルシステムの整合性を保持する」についての例題を解いてみます。

■例題
inodeの説明として適切ではないものを選びなさい。

1. inodeはファイルと、ファイルの実体を結びつける情報である
2. inodeはMBR(マスターブートレコード)に保管される
3. inode情報が壊れると、ファイルが参照できなくなる
4. ハードリンクではinode番号は同じ番号になる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. inodeはMBR(マスターブートレコード)に保管される です。

inodeはLinuxで標準的に使用されているext2/ext3ファイルシステムで採用されているファイルの管理手法です。その他のUNIXでも古くから採用されている手法です。

inodeは、データ領域に保管されているファイルの実体に対して番号(inode番号)を割り振り、ファイル名などのファイル情報と合わせて保持されているinode番号を経由して、ファイルの実体へのアクセスを実現しています。

inodeが保管されている領域は、パーティションを初期化してファイルシステムを作成する際にinode領域として確保されます。つまり、inode領域は各パーティション毎に存在することになります。そのため、inode番号を共有することで実現しているハードリンクは、異なるパーティション間ではリンクすることができません。

inode領域が壊れると、当然ファイルへのアクセスが行えなくなります。また、inode領域はファイルシステム作成時に作成されるため、inode番号が足りなくなるとそれ以上ファイルを作成できなくなります。たとえば、細かいファイルが沢山作成されるとデータ領域が無くなる前にinode番号が足りなくなってしまうので注意が必要です。ext2/ext3では、後からinode番号の数を増やすことができません。

○dfコマンドでinode番号の残りを確認する
$ df -i
Filesystem            Iノード  I使用   I残り I使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                     4816896   76802 4740094    2% /
/dev/xvda1             26104      45   26059    1% /boot
tmpfs                 131072       1  131071    1% /dev/shm


もし、沢山の細かいファイルが作成されることがあらかじめ分かっているのであれば、mkfsコマンドに-iオプションで何バイト毎にinodeを作成するかを指定しておきましょう。

○1024バイト毎にinodeを作成する
# mkfs.ext3 -i 2048 /dev/sda1

104.3ファイルシステムのマウントとアンマウントをコントロールする

今回は、101試験の出題範囲から「 104.3 ファイルシステムのマウントとアンマウントをコントロールする」についての例題を解いてみます。

■例題
新たに追加したハードディスクをパーティションに分割し、ext2ファイルシステムを作成した。
このファイルシステムを起動時に有効にマウントするために修正が必要なファイルを記述しなさい。

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは /etc/fstab になります。

このファイルは、システムの起動時に読み込まれ、必要なデバイスをファイルシステムにマウントする作業を行います。新たにデバイスを追加した時にはシステム起動時にマウントを自動的に行いたいのであれば、/etc/fstabに設定行を追加しておく必要があります。

設定は1行で、設定値は以下の並びになります。

device mountpoint filesystem option dump fsck

例)
/dev/hda2 / ext3 defaults 1 1
5番目、6番目の数字は、少し分かりにくい点かもしれません。

5番目の数字は、dumpコマンドの対象にするかどうかを決めています。
スワップパーティションやprocファイルシステムなど、バックアップを行い意味がないファイルシステムには0を設定します。

6番目の数字は、システム起動の際のfsckの対象にするかどうかを決めています。ルートファイルシステムは先にチェックされないといけないので1を、その他のファイルシステムで対象にしたいものを2に、チェックの必要のないファイルシステムは0に設定します。

/etc/fstabファイルはシステム起動時だけでなく、mountコマンドを手動で実行する際にも読み込まれます。たとえばmountコマンドの引数として、デバイス名やマウントポイントしか指定しなかったとしてもきちんとマウントが行われるのは/etc/fstabを参照しているからです。
■学習のポイント
前回の問題同様、実際にディスクやパーティションを追加してみるのが最も理解しやすい学習方法だと思われます。IDEのディスクであれば、適当なものをもう1台追加して、ファイルシステムの作成からの一連の流れを確認しておきましょう。

104.3 ファイルシステムのマウントとアンマウントの制御

今回は101試験の試験範囲から「104.3 ファイルシステムのマウントとアンマウントの制御」についての例題を解いてみます。

■例題
/etc/fstabの書式として正しいものを選びなさい。

1. 1番目のフィールド:fsckオプション
2. 2番目のフィールド:デバイス名
3. 3番目のフィールド:マウントポイント
4. 4番目のフィールド:マウントオプション
5. 5番目のフィールド:ファイルシステム
6. 6番目のフィールド:dumpオプション

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 「4. 4番目のフィールド:マウントオプション」 です。

/etc/fstabには、デバイスをマウントポイントにマウントするため設定を記載します。
下記は、/etc/fstabの例です。

LABEL=/              /                    xfs    defaults        1 1
/dev/sda1            /boot                xfs    defaults        1 2
/dev/cdrom           /mnt/cdrom           iso9660 noauto,owner,kudzu,ro 0 0
/dev/sda2            /var                 xfs    defaults        1 2
UUID=12345678-1234-5678-1234-567812345678            swap                 swap    defaults        0 0

そのため、「4. 4番目のフィールド:マウントオプション」が正しい選択です。
1番目のフィールドには、デバイス名を記述します。ラベル名、UUIDを記述することも可能です。
2番目のフィールドは、マウントされるマウントポイントを記述します。
3番目のフィールドは、ファイルシステムのタイプを記述します。

5番目のフィールドは、dumpコマンドが対象のファイルシステムをダンプするのか、しないのかを決めるための項目です。
「1」を指定するとダンプの対象となり、「0」または指定をしない場合は、ダンプの対象となりません。

6番目のフィールドはfsckオプションです。システム起動時にファイルシステムのチェックを実施する順番を指定します。
ルートファイルシステムは「1」を指定しなければなりません。その他のファイルシステムは「2」を指定しなければなりません。そして「0」または指定しない場合は、ファイルシステムチェックが行われません。
ファイルシステムのチェックでは、iノードリストのサイズのチェックや空きブロック数のチェックなどが行われます。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏



104.3 ファイルシステムのマウントとアンマウントをコントロールする

今回は101試験の試験範囲から「104.3 ファイルシステムのマウントとアンマウントをコントロールする」についての例題を解いてみます。

■例題
/etc/fstabの説明として間違っているものを1つ選びなさい。

1. マウントポイントを記述する
2. マウントするデバイスを記述する
3. ファイルシステムの種類を記述する
4. tarコマンドによるバックアップの有無を記述する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. tarコマンドによるバックアップの有無を記述する です。

/etc/fstabは、mountコマンドが参照して各種デバイスをマウントポイントにマウントするための情報を記述しておくファイルです。頻繁にマウントする必要がある場合には、/etc/fstabを修正してマウント情報を記述しておく必要があります。

起動時などに自動的にマウントされるかどうかは、オプション指定でコントロールできます。オプションがdefaultsになっている場合、autoオプションを含むことになるので自動的にマウントされます。実際には、起動時にmount -aが実行されているので対象となります。自動マウントの対象にしない場合にはnoautoオプションの指定が必要です。

マウントするデバイスで、/dev/sda1などとデバイス名で記述する他、ext2/3などではラベル名で記述できます。他にもUUIDで記述するなど様々な方法があります。ディストリビューションによって異なりますが、ディストリビューションデフォルトの記述以外でも正しく動作するので、わかりにくい場合などは自分なりに書き換えてしまっても良いでしょう。

104.3ファイルシステムのマウントとアンマウントをコントロールする

今回は101試験の試験範囲から、「104.3 ファイルシステムのマウントとアンマウントをコントロールする」についての例題を解いてみます。

■例題
リムーバブルメディアのマウントを一般ユーザーにも許可したい。/etc/fstabに記述するオプションとして正しいものを選びなさい。

  1. exec
  2. suid
  3. user
  4. nouser

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. user です。

CD-ROMやDVDなどのリムーバブルメディアをLinuxで使用するにはマウントを行わなければなりません。デフォルトでは、mountコマンドを実行できるのはrootユーザーのみに限定されます。これはnouserオプションが暗黙のうちに指定されているからです。

しかし、/etc/fstabに、リムーバブルメディアについてのマウント情報を記述し、オプションでuserを指定しておくと、そのリムーバブルメディアは一般ユーザーでもマウントすることができるようになります。

オプションにusersを指定すると、他の一般ユーザーがマウントしたリムーバブルメディアをアンマウントすることもできるようになります。

execオプションは、マウントポイント以下のファイルを実行可能にするかの指定です。ユーザーのホームディレクトリ以下にあるファイルを実行させたくない場合などにはnoexecを指定します。

suidオプションは、SUIDを有効にする指定です。こちらも同様に無効にしたい場合にはnosuidと指定します。

exec/noexec,suid/nosuidは、userオプションと組み合わせるケースが多いので、合わせて覚えておくとよいでしょう。

104.3ファイルシステムのマウントとアンマウントをコントロールする

今回は101試験の試験範囲から「104.3 ファイルシステムのマウントとアンマウントをコントロールする」についての例題を解いてみます。

■例題
CD-ROMをマウントしたが、メディアに含まれるシェルスクリプトを実行することができない。マウント時に必要となるオプションとして適切なものを選びなさい。

1. suid
2. sync
3. user
4. exec
5. remount

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. exec です。

やCD-ROM、DVD-ROMなどをマウントするコマンドです。マウント時に各種オプションを指定することで、マウントされたディレクトリ内の挙動をコントロールすることができます。

defaultsオプションを指定すると「rw,suid,dev,exec,auto,nouser,async」が指定されたことになります。通常のパーティションのマウントは読み書き可能、実行可能、非同期書き込みといった設定になります。

設問のようにCD-ROMなどの外部のメディアをマウントする場合、その中にrootkitなどセキュリティ上問題があるプログラムなどが含まれていても、直接実行されないようになっています。この際のマウントオプションは noexec となります。

もしCD-ROMに入っているシェルスクリプトなどを直接実行したい場合には、execオプションを指定してマウントする必要があります。すでにマウントされている場合には、同時にremountコマンドを付けて実行すればアンマウントの手間が省略できます。

○/dev/cdromをexecオプション指定で再マウントする例
# mount -o exec,remount /dev/cdrom

104.4 ディスククォータを管理する

今回は101試験の試験範囲から「104.4 ディスククォータを管理する」についての例題を解いてみます。

■例題
ディスククォータの説明として間違っているものを選びなさい。

1. ハードリミットを超えてファイルを使用することはきない。
2. ソフトリミットを超えると一定期間だけ利用できる
3. システム全体でブロック使用量とファイル数のいずれかで制限する
4. クォータ制限はユーザー毎とグループ毎に設定できる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. システム全体でブロック使用量とファイル数のいずれかで制限する です。

ディスククォータを設定すると、ユーザー、あるいはグループ毎のディスク使用量を制限することができます。制限にはいくつかの規則があるので、整理しておきましょう。

・ユーザーとグループ
ユーザーとグループ、それぞれで制限を行うことができますが、クォータ制限をかけるファイルシステムをマウントする際にどちらの括りで制限をかけるかをmountコマンドのオプションとして設定する必要があります。

・ソフトリミットとハードリミット
ソフトリミットを超えると、警告を発して一定期間後にそれ以上書き込みができなくなります。ハードリミットは即時書き込みができなくなります。たとえばソフトリミットをハードリミットの80%から90%程度に設定するなどの運用を行うことが多いでしょう。

・ブロック制限とファイル制限
ファイルはその大きさに応じてディスク上のブロックを消費しますが、その他にファイル1個につきiノードを1つ消費します。そのため、小さいファイルが大量に作成されると、そのファイルシステムで使用できるiノードをすべて消費し尽くしてしまい、それ以上ファイルが作成できなくなってしまうことがあります。このような事態を防ぐため、クォータ制限ではブロック容量だけでなく、ファイルの個数にも制限をかけることができます。

これらの仕組みをよく理解し、適切な制限をかけるようにしましょう。

104.4ディスククォータを管理する

今回は、101試験の出題範囲から「 104.4 ディスククォータを管理する」についての例題を解いてみます。

ファイルシステムにユーザ毎のディスククォータを設定したい。各ユーザのディスククォータの状況を侮ヲするコマンドとして正しいものを選びなさい。

1. quota
2. repquota
3. quotacheck
4. quotaon
5. edquota

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. repquota になります。

ユーザのディスク使用量の制限を行うディスククォータは、作業の流れと関連するコマンドの数が多いため、意外と実際にやったことがないという人が多いように感じます。

まず、関連するコマンドの役割を覚えること、そして作業の流れを理解して実際に試してみるといいでしょう。

以下、簡単に関連するコマンドについて解説します。

quota
現在のクォータの状況を表示する

edquota
クォータの設定を変更する。

repquota
現在の各ユーザ毎のクォータの状況を表示する。使用状況のチェックを行うにはquotacheckを実行する必要がある。

quotaon
クォータの機能を有効にする。あらかじめ、quota.userファイルを作成しておく必要がある。
■学習のポイント
きちんとした流れを把握していれば、それほど難しくないのもディスククォータの設定です。
以下のページなどを参考にして、実際に設定を行ってみるとよいでしょう。


学習環境を作るポイントとして、クォータの制限を記述するファイルquota.userなどはファイルシステムの/に作成しなければなりません。
通常のディストリビューションのデフォルトインストールだと、/(ルート)パーティション1つしか存在しないため、ディスククォータの設定が面倒です。
ディスクを増設するか、あらかじめ実験用に別パーティションを作成の上システムを構築しておくと、実験を行いやすいでしょう。

104.4ディスククォータを管理する

今回は101試験の試験範囲から「104.4 ディスククォータを管理する」についての例題を解いてみます。

■例題
ディスククォータが有効にならない理由として正しくないものを選びなさい。

1. カーネルはクォータをサポートしていない
2. マウントオプションでクォータを有効にしていない
3. クォータ情報を記録するファイルを作成していない
4. 起動時にedquotaを起動していない

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. 起動時にedquotaを起動していない です。

Linuxでクォータを設定するには、クォータをサポートしたカーネルで起動し、クォータを有効にしたいパーティションのマウントオプションにusrquota、あるいはgrpquotaを設定してマウントする必要があります。

さらに、クォータ情報はファイルに記録されるので、記録用のファイルを作成し、ユーザ別の設定を行います。

設定におおまかな手順は以下の通りです。

1. マウントオプションを有効にする
/etc/fstabに記述を行う。defaults,usrquotaのように記述すればよい。

2. 再マウントする
システムを再起動してもいいが、以下のようにmountコマンドを実行してもよい。

# mount -o remount /

3. クォータ情報ファイルを作成する
クォータ情報ファイルの作成にはquotacheckコマンドを実行する。

# quotacheck -amv

4. クォータ機能を有効にする
クォータを有効にするにはquotaonコマンドを実行する。

# quotaon -a
# quotaon -p -a ←※状態の表示で確認

5. クォータ情報を設定する
ユーザー個別のクォータを設定にするには、edquotaコマンドを実行する

# edquota lpic


クォータ機能はファイルサーバーなどで使用する場合に必要となる機能です。
設定方法および動作を確認しておいてください。

104.5 ファイルのパーミッションと所有者を管理する

今回は101試験の試験範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
グループのパーミッションの説明として間違っているものを1つ選びなさい

1. ファイルを作成したユーザーの初期グループがグループ所有者に設定される
2. ファイルを作成すると自動的に同じ初期グループのユーザーに読み書きのパーミッションが与えられる
3. グループ所有権の確認は初期グループだけでなくサブグループでも行われる
4. ファイルの削除はファイルが格納されているディレクトリのパーミッションで制御される

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. ファイルを作成すると自動的に同じ初期グループのユーザーに読み書きのパーミッションが与えられる です。

ファイルのグループ所有権は、ファイルを作成したユーザーの初期グループに設定されます。パーミッションはumaskの設定値に従いますが、通常は644に設定されるのでグループパーミッションに書き込みパーミッションは設定されません。

ファイルの削除は、そのファイルが格納されているディレクトリの書き込みパーミッションで制御されます。上位ディレクトリのグループパーミッションがrwxであれば、所有グループに所属しているユーザーならば他のユーザーおよびグループの所有するファイルでも削除できる。このため、ディレクトリのグループ所有権およびパーミッションは慎重に設定する必要がある。

104.5 ファイルのパーミッションと所有者を管理する

今回は101試験の試験範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
SUIDの説明として誤っているものを選びなさい

1. SUIDが設定されたプログラムを実行した場合、ファイルの所有者の権限で実行される
2. SUIDを設定するには、chmodコマンドを使用する
3. シェルスクリプトファイルの場合、設定されたSUIDは作用しない
4. SUIDが設定されたファイルのユーザーのパーミッションはrwxと表示される

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 「4. SUIDが設定されたファイルのユーザーのパーミッションはrwxと表示される」 です。

通常、実行ファイルを実行すると、そのファイルを実行したユーザーの権限で実行されますが、SUIDが設定された実行ファイルでは、そのファイルの所有者の権限で実行されます。
passwdコマンドを一般ユーザーで実行した場合でも、rootでしか書き換えられない/etc/shadowファイルが変更されます。
それは、passwdコマンドの所有者がrootで、SUIDの設定がされているためです。
SUIDは、chmodコマンドで、3桁のアクセス権表記に「4000」を加える、もしくはu+sを指定することで設定することができます。

SUIDが設定されたファイルのユーザーのパーミッションはrwsと表示されます。
パーミッションの出力例は以下です。

$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768  1月 1 00:00 2015 /usr/bin/passwd

そのため、「4. SUIDが設定されたファイルのユーザーのパーミッションはrwxと表示される」が誤りとなります。
また、シェルスクリプトファイルの場合、悪意あるユーザーがSUIDが設定されたシェルスクリプトファイルを利用して特権を得るなどのセキュリティ上の危険性が高くなるため、SUIDを設定することはできますが、作用しないようになっています。


◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏

104.5ファイルのパーミッションと所有者を管理する

今回は、101試験の出題範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
新規に作成したファイルのパーミッションを、所有ユーザーだけでなくグループにも読み書きの権限を与えるように設定したい。設定するumask値として正しいものを選びなさい。

  1. 644
  2. 664
  3. 022
  4. 002
  5. 000

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. 002 です。

umaskは、ファイルやディレクトリが新規に作成される際にデフォルトで設定するパーミッションがどのようになるかを指定しています。

umaskの考え方は、すべてのパーミッションが読み書き可能な状態から、umaskの値を引いた値が設定されるパーミッションとなります

○ファイルの場合

 666 (rw-rw-rw-)
-002 (-------w-)
-----------------
 664 (rw-rw-r--)

このように、umask自体もパーミッションとして捉えると分かりやすいでしょう。

つまり、すべてのパーミッションが設定されている状態から、umaskで設定されたパーミッションだけを取り去る、と考えればよいわけです。

○ディレクトリの場合

 777 (rwxrwxrwx)
-002 (-------w-)
-----------------
 775 (rwxrwxr-x)

ディレクトリの場合でも考え方は変わりませんが、元となるパーミッションが777である点が異なります。ディレクトリには、必ず実行権限のパーミッションが必要だからです。

もし実行権限が無いと、そのディレクトリをカレントディレクトリにすることができなくなってしまいます。ディレクトリには必ず実行権限が付くことを覚えておきましょう。逆に、ファイルに実行権限がついてしまうとなんでもプログラムやスクリプトとして扱われてしまいますし、セキュリティの観点からも良くありません。そのため、ファイルには実行権限がつかないという風に覚えておきましょう。

ファイル:666がデフォルト
ディレクトリ:777がデフォルト

104.5ファイルのパーミッションと所有者を管理する

今回は、101試験の出題範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
新規に作成されたファイルの所有者の説明として、正しいものをすべて選びなさい。

  1. ファイルの所有ユーザーは作成したユーザーになる
  2. ファイルの所有ユーザーは、上位ディレクトリの所有ユーザーを継承する
  3. ファイルの所有グループはwheelになる
  4. ファイルの所有グループは作成したユーザーのプライマリグループとなる
  5. 作成直後のファイルの所有グループはrootのみ変更できる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. と 4. です。

新たに作成されたファイルやディレクトリの所有ユーザーは、作成したユーザーと、そのユーザーのプライマリグループに設定されます。

ディレクトリの所有者が関係するのは、パーミッションと合わせて書き込み可能かどうかについてのみ影響します。上位ディレクトリの所有者情報を継承することはありません。

ファイルの所有ユーザーを変更できるのは、rootユーザーのみです。
もし、その他のユーザーが所有ユーザーを変更できると、変更後にそのユーザーがファイルにアクセスできなくなってしまうからです。

一方、ファイルの所有グループを変更できるのは、rootユーザー、またはそのファイルを所有しているユーザーになります。
もし、作成したファイルを他のユーザーにもアクセスさせたいのであれば、所有ユーザーではなく所有グループを変更し、適切なパーミッションを与えることで実現できます。

○例:fileファイルをotherグループに対して読み書き可能にする

$ touch file          fileファイルを作成
$ chgrp other file    fileの所有グループをotherに設定
$ chmod g+rw file     fileのグループパーミッションをrwに設定

所有者の考え方は、パーミッションと絡めてきちんとルールを覚えておきましょう。

104.5ファイルのパーミッションと所有者を管理する

今回は101試験の試験範囲から、「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
スティッキービットの説明として間違っているものを選びなさい。

  1. スティッキービットが設定されているディレクトリに作られたファイルは所有グループのユーザーのみ削除できる
  2. スティッキービットが設定されているディレクトリの例として/tmpがある
  3. スティッキービットが設定されているディレクトリのパーミッションはその他のユーザーの実行権限部分が「t」になる
  4. スティッキービットを設定するには、chmod 1xxx dir を実行する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. スティッキービットが設定されているディレクトリに作られたファイルは所有グループのユーザーのみ削除できる です。

スティッキービットが設定されたディレクトリは、lsコマンドでパーミッションを確認すると以下のような表示になっています。

$ ls -ld /tmp
drwxrwxrwt    3 root root  4096 9月 15日 08:35 tmp

このようにその他のユーザーの所有権の表示が x ではなく t になっていると、スティッキービットが設定されていることになります。

スティッキービットが設定されているディレクトリは誰でも書き込みが出来ますが、作成したファイルは作成したユーザーのみ削除することができるようになります。

スティッキービットが設定されているディレクトリの代表例は/tmpです。
/tmpは一時ファイルの作成場所として利用されます。Linuxでは様々なプロセスがバックグラウンドで動作しますが、それらのプロセスが一時ファイルを作成します。作成したファイルを他のプロセス、他のユーザーに勝手に削除されてしまうと困るので、スティッキービットのように他のユーザーに削除されなくなるのが重要になるわけです。

一般的なLinuxの利用では、スティッキービットを自ら設定することはないかと思いますが、様々なバックグラウンドプロセスが異なるユーザー権限で動作しており、スティッキービットを設定した/tmpディレクトリを活用していることを知っておくことは重要でしょう。たとえば容量が不足して/tmpに書き込みができなくなると、様々なプロセスは正しく動作できなくなるので、/tmpディレクトリの容量不足には注意しないといけない、などといった具合です。

104.5ファイルのパーミッションと所有者を管理する

今回は、101試験の出題範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題

ファイルの所有ユーザがfileを実行できるようにするコマンドはどれですか?

1. chown owner file
2. chmod u-x file
3. chmod o+x file
4. chmod u+x file
5. chown u+x file

※この例題は、実際のLPIC試験とは異なります。

解答と解説

ファイルのアクセス制御を行っているのは「パーミッション」です。パーミッションの変更を行うにはchmodコマンドを使用します。
パーミッションは「モード(mode)」とも呼ばれるので、モードを変更する、すなわちCHange MODeでchmodコマンドとなります。
chmodコマンドは引数に指定したファイルを、オプションで指定したパーミッションに設定します。オプションの意味は以下の通りです。

u 所有ユーザ
g 所有グループ
o その他のユーザ
a すべてのユーザ

+ パーミッションを設定
- パーミッションを解除

r 読み取りのパーミッション
w 書き込みのパーミッション
x 実行のパーミッション

例題を解釈すると、「所有ユーザ」に「実行のパーミッション」を「与える」ということになりますから、chmodコマンドのオプションは「u+x」になります。

chmodコマンドは、文字によるパーミッション指定の他に、8進数による指定もよく使用されます。指定するパーミッションr、w、xをそれぞれ8進数の4、2、1にあてはめ、合計した値を並べて指定します。

8進数指定相関
パーミッション
rwx
rwx
rwx
8進数
421
421
421
合計値
?
?
?

たとえば、rwxr-xr-xと指定したい場合には、「4+2+1、4+1、4+1」で「755」が指定する値となり、コマンドは「chmod 755 file」となります。
実際のLinuxの操作では、指定する値は大体以下のように決まっているので意味と合わせて覚えておくとよいでしょう。

700 所有ユーザだけが読み書きできるディレクトリ
755 所有ユーザだけが書き込める一般的なディレクトリ
600 所有ユーザだけが読み書きできるファイル(例:/etc以下のファイル)
644 所有ユーザだけが書き込める一般的なファイル

104.5ファイルのパーミッションと所有者を管理する

今回は101試験の試験範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
ディレクトリに付与された実行可能のパーミッションの意味として正しいものを選びなさい。

1. ディレクトリ内の情報を取得できる
2. カレントディレクトリにすることができる
3. ディレクトリ内のファイルを削除できる
4. ディレクトリ内に書き込みできる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. カレントディレクトリにすることができる です。

ディレクトリのパーミッションは、ファイルに付与するパーミッションと若干異なっています。

○ディレクトリのパーミッション
r ディレクトリの中の情報を取得できる。すなわちlsが実行できる。
w ディレクトリ内に書き込みできる。ファイルの削除も書き込みに当たる。
x カレントディレクトリにすることができる。


それぞれのパーミッションは独立しているので、たとえば以下のような組み合わせも成り立ちます。

○r--の場合
lsでディレクトリの情報を見ることはできるが、情報は不完全。カレントディレクトリにはできないので、ほとんど何もできない

○-wxの場合
ディレクトリにファイルを作ったり、カレントディレクトリにはできるが、lsはできない。置いてあるファイルの名前が分かれば削除することもできる。

○--xの場合
カレントディレクトリにできるが、それ以外には何もできない。


このように実行可能のパーミッションは読み取りや書き込みのパーミッションと組み合わさることで機能するので、実行可能パーミッションは必須のパーミッションとなっている。

また、実行可能パーミッションのみだとカレントディレクトリにできても何もできなくなるが、たとえばApacheでユーザーのホームディレクトリ内のコンテンツを公開するUserDirディレクティブを使用する場合に使用します。
Apacheがユーザーのホームディレクトリ内に入れるよう、実行可能パーミッションだけをホームディレクトリに付与しておく必要があります。
限定的ではありますが、使用方法はあるということですね。

104.5ファイルのパーミッションと所有者を管理する

今回は、101試験の出題範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
新規に作成されたファイルを、所有ユーザとグループが読み書き可能、その他のユーザは読み込みのみ可能に設定したい時に適切なumaskの値を選びなさい。

1. 0002
2. 0022
3. 0004
4. 0044
5. 0006

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 1. 0002 になります。

ファイルやディレクトリのパーミッションは、rやwやxといった文字のほか、8進数値で表されます。umaskを設定するには、この8進数値での計算が必要です。まず、8進数によるパーミッションの計算は、以下の表で導き出されます。

所有者 u g o (u:所有者 g:グループ o:その他)
パーミッション rwx rwx rwx (設定したいパーミッション)
8進数値 421 421 421 (パーミッションに対応する値を合計する)

例)rwxr-xr-x = 755
rw-r--r-- = 644

問題の「所有ユーザとグループが読み書き可能、その他のユーザは読み込みのみ可能」というパーミッションは、「rw-rw-r--」であり、8進数値としては「664」となります。

umask値は、すべてのパーミッションを与える値から、デフォルトで設定したいパーミッションの値を引いたものになります(正確にいえば、すべてのパーミッションを与える値から、umask値を引いたものがデフォルトのパーミッション)。
ファイルの場合、すべてのパーミッションを与えるには8進数値で「666」を指定します。ここから「664」を引くと「002」がumask値となります。

  666
- 664
  ------
  002

通常、パーミッションにはさらにSUIDやGUID、スティッキービットを指定する値を先頭につけて4桁で表します。最終的なumask値はその分も入れて「0002」が
答えとなります。

 

■学習のポイント
まず、日常的にchmodコマンドによるパーミッションの設定を8進数値で行うようにして8進数表現に慣れておくのが、理解のもっとも近道です。
指定によく使う値は決まっています。

rwxr-xr-x = 755
rwxrwxr-x = 775
rw-r--r-- = 644
rw-rw-r-- = 664
rw------- = 600

umask値は「すべてのパーミッション - umask値 = デフォルトパーミッション」という式になりますので、8進数値での表現に慣れていれば、それほど難しいところはないでしょう。

104.5ファイルのパーミッションと所有者を管理する

今回は、101試験の出題範囲から「104.5 ファイルのパーミッションと所有者を管理する」についての例題を解いてみます。

■例題
ファイルのグループ所有権を変更するコマンドを書きなさい。

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは  chgrp になります。

ファイルやディレクトリが新たに作成されると、作成したユーザが所有グループに、作成したユーザのプライマリグループが所有グループに設定されます。
もしグループ所有権を変更したい場合には、chgrpコマンドを使用して変更を行います。
所有権の変更を行えるのは、システム管理者であるrootか、そのファイルを所有しているユーザだけです。

書式例
$ chgrp group-name file

chownコマンドでも、ユーザの指定と合わせてコロンで区切ってグループを指定することでグループ所有権の変更が行えます。ただしchownコマンドで所有権の変更が行えるのはシステム管理者rootだけであることに注意してください。

書式例
# chown user-name:group-name file

chownコマンド、chgrpコマンドと組み合わせてよく使用するオプションとしては、-Rオプションがあります。-Rオプションを使用することで、指定したディレクトリ以下を再帰的に所有権の変更が可能となります。

■学習のポイント
グループ所有権の変更は、システム管理の中でも比較的よく行う作業です。
-Rオプションの動作も含めて確認しておきましょう。

動作の確認のためには、グループが異なるユーザを複数用意し、アクセス可能かどうかをチェックしていきます。その際にプライマリグループ(主グループ)とサブグループの動作なども合わせて行ってみましょう。

このあたり、大体以下の関連コマンドを使いこなせることが必要になってきます。

useradd
usermod
groupadd
groupmod(あまり直接的ではないが)
chown
chgrp
chmod

1つ1つのコマンドの使い方、しっかりと確認しておきましょう。

104.6 ハードリンクとシンボリックリンクを作成・変更する

今回は101試験の試験範囲から「104.6 ハードリンクとシンボリックリンクを作成・変更する」についての例題を解いてみます。

■例題
リンクの説明として間違えているものを選びなさい。

1. ハードリンクはiノードの仕組みを利用している
2. シンボリックリンクは異なるパーティションのファイルに対しても作成できる
3. リンクを使用することでファイルの使用容量が節約できる
4. リンクを使用することでファイルの数が少なくなる

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. リンクを使用することでファイルの数が少なくなる です。

リンクには、ハードリンクとシンボリックリンクの2種類があります。ハードリンクは複数のファイルがあるように見えるが、実体は1つとする仕組みです。iノードの仕組みを利用し、複数のハードリンクで同じiノード番号、すなわち実体を共有します。iノード番号はパーティション毎にiノードテーブルが作られて管理されるので、異なるパーティションの間ではハードリンクは作成できません。もし、異なるパーティションの間でリンクを作りたい場合には、シンボリックリンクを使います。

シンボリックリンクは、ハードリンクと異なり、単なるファイルへの参照を保持しているだけです。そのため、たとえばマウントポイントが変更になるなどしてファイル参照のパスが変わってしまうと機能しなくなります。

ハードリンクもシンボリックリンクも、ファイルとしての実体が増えないので、ファイルの使用容量が少なくなり、ストレージを消費しなくなります。ただし、ファイルとして見える数は同じです。昨今のハードディスクは容量が多くなってきているので容量を喰わないというメリットは薄れてきていますが、あるディレクトリやファイルへのアクセスを容易にしたり、組み込みなどでストレージ容量が限られるような場合などにはリンクはまだまだ必要な仕組みでしょう。

104.6 ハードリンクとシンボリックリンクの作成・変更

今回はLPIC101試験の試験範囲から、「104.6 ハードリンクとシンボリックリンクの作成・変更」についての例題を解いてみます。

■例題
ハードリンク、シンボリックリンクに関する説明として正しいものを選びなさい。

1. ハードリンクを削除すると必ずファイルの実体が削除される
2. ハードリンクは別のファイルシステム上のファイルに対して作成することができる
3. シンボリックリンクを削除するとリンク元の実体も削除される
4. シンボリックリンクはリンク元の実体を移動すると参照できなくなる

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「4. シンボリックリンクはリンク元の実体を移動すると参照できなくなる」です。

シンボリックリンクはリンク元の実体の場所を情報としてもっています。
その情報を元に、リンク元のファイルやディレクトリを参照しています。
そのため、ファイルやディレクトリの移動によりリンク元の実体の場所が変わってしまうと参照ができなくなってしまいます。

ハードリンク、シンボリックリンクの機能や特徴は以下です。

・ハードリンク:
  ハードリンクはlnコマンドをオプション無しで実行することで作成することができます。

  ln リンク元のファイル名 ハードリンク名

  ハードリンクは、iノードの仕組みを用いて、複数のファイル名で一つのファイルの実体を共有することができます。
  iノードはファイルシステムごとに管理されているため、別のファイルシステム上のファイルに対して作成することはできません。
  ハードリンクを削除しても他のハードリンクが残っている場合は、ファイルの実体は削除されることはありません。
  また、スーパーユーザ以外のユーザはlnコマンドを使ってハードリンクをディレクトリに対して作成することはできません。

・シンボリックリンク:
  シンボリックリンクはlnコマンドにオプション-sを指定し、実行することで作成することができます。

  ln -s リンク元のファイル名 シンボリックリンク名

  シンボリックリンクは上でも説明したとおり、リンク元の実体の場所を情報として持っています。
  ハードリンクとは違い、ファイルシステムをまたいで作成することも可能です。
  シンボリックリンクを削除してもリンク元のファイルの実体が削除されることはありません。
  また、ディレクトリに対してもシンボリックリンクを作成できます。

ハードリンクとシンボリックリンクの機能や特徴について、抑えておきましょう。

◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏


104.6ハードリンクとシンボリックリンクを作成・変更する

今回は、101試験の出題範囲から「104.6 ハードリンクとシンボリックリンクを作成・変更する」についての例題を解いてみます。

■例題
ハードリンクの説明として、間違っているものをすべて選びなさい。

  1. ハードリンクは実体を共有している
  2. ハードリンクを1つ削除しても、その他のハードリンクには影響しない
  3. ハードリンクはそれぞれ連番のiノード番号が割り当てられる
  4. ハードリンクは異なるパーティションには作成できない
  5. ハードリンクを作成するにはlnコマンドを使用する

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. ハードリンクはそれぞれ連番のiノード番号が割り当てられる です。

新たに作成されたファイルやディレクトリの所有ユーザーは、作成したユーザーと、そのユーザーのプライマリグループに設定されます。

ハードリンクは、実体を共有していますが、その仕組みは異なるファイル名(リンク名)に同一のiノード番号を割り当てることで実現しています。

○例)ハードリンクのiノード番号を確認

$ ls -il /bin | sort
~
750813 -rwxr-xr-x  1 root root  57488  5月  3  2007 cpio
750814 -rwxr-xr-x  3 root root  56080  7月 15  2007 gunzip
750814 -rwxr-xr-x  3 root root  56080  7月 15  2007 gzip
750814 -rwxr-xr-x  3 root root  56080  7月 15  2007 zcat
750815 -rwxr-xr-x  1 root root   6420 11月 26  2007 dmesg
~

この例では、gunzip、gzip、zcatが同じiノード番号を持っているので、ハードリンクとして実体を共有していることが分かります。

iノード番号は、iノードテーブルで管理されており、1つのパーティションにつき1つのiノードテーブルとなるため、異なるパーティションにまたがってのハードリンクは作成できません。そのような場合には、シンボリックリンクを使う必要があります。どちらも、lnコマンドを使用して作成します。

ハードリンクは、Linuxのファイルシステムがどのようにファイルを管理しているのかを理解する良い材料です。iノードの仕組みなどと一緒に理解しておくとよいでしょう。

104.6ハードリンクとシンボリックリンクを作成・変更する

今回は101試験の試験範囲から、「104.6 ハードリンクとシンボリックリンクを作成・変更する」についての例題を解いてみます。

■例題
Linuxカーネルのソースコードを/usr/srcディレクトリに展開した後、展開したディレクトリへのシンボリックリンクを/usr/src/linuxとして作成しました。
シンボリックリンクを作成した理由として最も適切なものを選びなさい。

  1. タイプミスを無くすため
  2. ビルド時にMakefileが絶対指定で参照するため
  3. カーネルが動作時に参照するため
  4. 最新の、あるいは利用しているカーネルソースが分かるようにするため

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. 最新の、あるいは利用しているカーネルソース です。

Linuxカーネルのソースコードを展開するディレクトリは技術的かつ明確に決まっているわけではありませんが、/usr/srcディレクトリに展開する習慣となっています。カーネルをソースコードからビルドしている場合、カーネルのバージョンアップに合わせてソースコードを随時用意しないといけなくなるため、/usr/src内は複数のカーネルバージョンのソースコードが展開された状態となります。

ダウンロードしてきたソースコードのアーカイブを展開すると、ディレクトリ名はそのカーネルのバージョン番号が付いたものになるのが通常です。複数のディレクトリから、現在使用しているカーネルバージョンや、最新のバージョンをいちいち探すのはやや面倒です。そこでシンボリックリンクを利用して、/usr/src/linuxのリンク先を最新の、または利用しているソースコードのディレクトリにしておくことが行われています。

同じような方法として、公開FTPサーバーに複数のバージョンが存在しているような場合には、バージョン無しのディレクトリがシンボリックリンクで存在していたり、「latest」という名前のディレクトリがシンボリックリンクで存在していたりすることがあるのも、同様の管理手法を取っているものです。

シンボリックリンクを上手に管理作業に組み込むと、他の人が見てもすぐに分かる環境を構築できるでしょう。

104.6ハードリンクとシンボリックリンクを作成・変更する

今回は101試験の試験範囲から「104.6 ハードリンクとシンボリックリンクを作成・変更する」についての例題を解いてみます。

■例題
ハードリンクの説明として間違っているものを選びなさい。

1. ハードリンクは異なるパーティションには作成できない
2. ハードリンクは同じiノード番号を持つ
3. ハードリンクのリンク先は相対パスで示される
4. ハードリンクを削除しても他のハードリンクが残っていればファイルは削除されない

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 3. ハードリンクのリンク先は相対パスで示される です。

ハードリンクは、同一のiノード番号を持つファイルとして実現されています。このようにすることで、別々のファイル名でもファイルの実体は同じ、というハードリンクになります。
シンボリックリンクは、実体を共有せず、実体に対するパス名で表される点で対照的です。

iノード番号はパーティション毎、ファイルシステム毎に作成されるので、同じiノード番号を持つためには同じパーティション内にファイルが無ければなりません。異なるパーティションへのリンクにはシンボリックリンクを使用します。

ハードリンクは実体は1つですが、リンク自体は複数作成できます。リンクを削除しても、最後の1つが削除されるまでは実体ファイルは残ったままです。いくつのリンクがあるかはlsコマンドに-lオプションを付けると表示されます。

○ハードリンクの例
$ ls -il | sort
131128 -rwxr-xr-x 3 root root   62872  1月 21  2010 gunzip
131128 -rwxr-xr-x 3 root root   62872  1月 21  2010 gzip
131128 -rwxr-xr-x 3 root root   62872  1月 21  2010 zcat

これら3つのファイルはそれぞれハードリンクとなっている。3つがリンクになっているので、リンク数は3と表示されている。リンク数は3つめの表示。

104.6ハードリンクとシンボリックリンクを作成・変更する

今回は、101試験の出題範囲から「104.6 ハードリンクとシンボリックリンクを作成・変更する」についての例題を解いてみます。

■例題
ファイルfileに対するシンボリックリンクslinkを作成するコマンドとして正しいものを選びなさい。

1. ln file slink
2. ln slink file
3. ln -s file slink
4. ln -s slink file
5. ln -s file

解答と解説

答えは 3. ln -s file slink になります。

シンボリックリンクはlnコマンドを使って作成します。lnコマンドのデフォルトの動作はハードリンクの作成となっているので、シンボリックリンクを作成するには-sオプションが必要です。

ハードリンクとシンボリックリンクの違いはなんでしょうか。ハードリンクはファイルシステム上に存在するファイルの実体に対してリンクするのに対して、シンボリックリンクは実体に対してリンクするのではなくファイルの在処(パス名)を持っているだけです。

この仕組みの違いは、制約として表れます。
ハードリンクは同じ物理ボリューム(パーティション)上でしか作成できません。たとえばハードディスクが2台あった時、別のハードディスクに存在するファイルに対してハードリンクを作ることはできません。
シンボリックリンクはパス名を持っているだけですので、ハードリンクのような物理的な制約は受けませんが、リンク先のファイルが存在することは保証されていないので「リンク切れ」を起こすことがあります。

シンボリックリンクはlsコマンドに-lオプションをつけて実行すれば種類が「l」になるので簡単に分かりますが、ハードリンクを見つけるにはちょっとしたコツが必要です。ハードリンクは実体を共有する方法として同じiノード番号を割り当てるという方法を使っているので、この方法を使って探してみましょう。
たとえば以下のコマンドを実行して、先頭に表示されるiノード番号が同じものを探します。

$ ls -i | sort | less

lsコマンドにつけている-iオプションはiノード番号も一緒に表示するという意味です。
すると、以下のファイルが見つけられます。

32361 gunzip
32361 gzip
32361 zcat
※iノード番号はシステムによって異なります。

この3つはどれもgzip形式のファイルを取り扱うコマンドです。実はプログラムの実体は1つのファイルで、ハードリンクを使って別々の呼び名を持ち、役割を変えるようなプログラムになっていたのです。

■学習のポイント
ハードリンクやシンボリックリンクの仕組み的な違いをしっかりと理解しましょう。

ハードリンクを理解するには、Linuxのファイルシステムが採用している「iノード」という考え方が重要となります。ファイルシステムにまつわるトラブルシューティングで知識として必要になるので、こちらも合わせて調べておくとよいでしょう。

104.7 システムファイルを見つける、適切な位置にファイルを配置する

今回は101試験の試験範囲から「104.7 システムファイルを見つける、適切な位置にファイルを配置する」についての例題を解いてみます。

■例題
管理者が追加でインストールしたソフトウェアのバイナリが格納されるディレクトリを選びなさい。

1. /bin
2. /sbin
3. /etc
4. /usr/bin

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. /usr/bin です。

Linuxをシステムとして捉えたとき、最低限動作に必要となるディレクトリと、必要に応じて追加したディレクトリの2つに大きく分けられます。

/usr/binディレクトリには、そのシステムに追加でインストールしたソフトウェアのバイナリが格納されます。同様のディレクトリとして/usr/sbinディレクトリもあります。/binディレクトリや/sbinディレクトリと似ていますが、Linuxシステムの基本的なバイナリか、追加的なバイナリか。そして全ユーザー向けか、システム管理やバックグラウンドで動作するデーモンのようなバイナリなどかによって分類されています。

/etcディレクトリには、各種設定ファイルが入っている重要なディレクトリです。

それぞれのディレクトリの役割を把握することで、バックアップが必要かどうかなどが決まります。FHS(Filesystem Hierarchy Standard)のドキュメントには一通り目を通しておくと良いでしょう。

Filesystem Hierarchy Standard
http://www.pathname.com/fhs/

104.7 システムファイルの確認と適切な位置へのファイルの配置

今回はLPIC101試験の試験範囲から、「104.7 システムファイルの確認と適切な位置へのファイルの配置」についての例題を解いてみます。

■例題
FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)の説明として間違っているものを選択してください。

1. /etcはシステムの設定ファイルを配置するディレクトリである
2. /homeはユーザ毎のファイルを配置するディレクトリである
3. /bootはブートローダ関連のファイルを配置するディレクトリである
4. /rootはシステムのルートディレクトリである

※この例題は実際のLPIC試験問題とは異なります。

解答と解説

答えは 「4. /rootはシステムのルートディレクトリである」です。

システムのルートディレクトリは「/」です。
/rootはrootユーザのホームディレクトリですので、この選択肢は誤りです。

FHSはLinux/Unixシステムのディレクトリとその役割について定められたものです。

参考:[Filesystem Hierarchy Standard]
      http://refspecs.linuxfoundation.org/fhs.shtml


Linuxディストリビューションは、基本的にFHSに沿ったディレクトリのレイアウトを採用しています。

上記のディレクトリ以外にも、以下のような代表的なディレクトリがあります。

/bin        一般ユーザ向け、特にシングルユーザモードで必要なコマンドの配置ディレクトリ
/sbin       主にシステム管理者が扱うコマンドの配置ディレクトリ
/tmp        一時ファイルの配置ディレクトリ
/usr        アプリケーションのライブラリや実行ファイルが配置されるディレクトリ
/var        変更が発生するシステムのログやスプールの配置ディレクトリ

ディレクトリの名前と役割を理解することで、システムの管理がしやすくなります。
しっかり押さえておきましょう。

◆例題作成者
株式会社デージーネット システム設計部    森 彰吾 氏
株式会社デージーネット ソリューション開発部 丸吉祐也 氏

104.7システムファイルを見つける、適切な位置にファイルを配置する

今回は、101試験の出題範囲から「104.7 システムファイルを見つける、適切な位置にファイルを配置する」についての例題を解いてみます。

■例題
特定のディレクトリをupdatedbの情報更新対象外に設定したい。設定を記述するファイルとして正しいものを選びなさい。

  1. locate.conf
  2. slocate.conf
  3. update.conf
  4. updatedb.conf
  5. whereis.conf

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. updatedb.conf です。

updatedbコマンドは、locateコマンドやslocateコマンドを使ってファイルの検索をするための情報データベースを最新の状態に保つためのコマンドです。

locateコマンド実行時にすべてのパスを検索していては時間を食ってしまうので、通常、cronを使って、深夜などに検索用のデータベースを作成し、locateコマンド実行時にはこのデータベースだけを検索する仕組みを取っています。

updatedbコマンドを実行時に、余計なパスを検索対象にしないようにするには、/etc/updatedb.confファイルに検索から外すパスを記述しておきます。

○/etc/updatedb.confの内容例
$ cat /etc/updatedb.conf
# To enable the updatedb in cron, set DAILY_UPDATE to yes
DAILY_UPDATE=no
PRUNEFS="sysfs selinuxfs usbdevfs devpts NFS nfs nfs4 afs sfs proc smbfs cifs autofs auto iso9660 udf"
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /net /sfs /selinux /udev /mnt/floppy /media"
export PRUNEFS
export PRUNEPATHS

まず、PRUNEFSの記述は、mountコマンドでマウントする際に指定するファイルシステムの種類だと考えればいいでしょう。ここで指定された種類のファイルシステムには、updatedbコマンドの検索は及びません。

また、具体的にパスを記述するには、PRUNEPATHSに記述しておきます。

ちなみに、pruneには、果物のプルーンの他、余分なものを取り除く、という意味があります。

104.7システムファイルを見つける、適切な位置にファイルを配置する

今回は101試験の試験範囲から、「104.7 システムファイルを見つける、適切な位置にファイルを配置する」についての例題を解いてみます。

■例題
whichコマンドの説明として正しいものを選びなさい。

  1. 指定されたコマンドの種類を表示する
  2. 環境変数PATHに従って、指定されたコマンドを探す
  3. 事前に作成されたデータベースから、指定されたコマンドを探す
  4. ファイルシステムを走査して、指定されたコマンドを探す

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 2. 環境変数PATHに従って、指定されたコマンドを探す です。

環境変数PATHは指定された順にディレクトリ内を走査し、一番最初に見つけたファイルをコマンドとして実行します。そのため、環境変数PATHに指定されていないディレクトリに配置されているプロフラムファイルは、シェルから直接コマンド名だけで実行できません。そのようなプログラムファイルを実行するには、絶対パスで直接指定する必要があります。

whichコマンドはこの環境変数PATHに従って、指定されたコマンドがどのディレクトリにあるものかを探してくれるコマンドです。コマンドの実行がおかしい場合、実際に実行されているコマンドがどのディレクトリに格納されているものかチェックするのに使用します。

1. 指定されたコマンドの種類を表示する
typeコマンドの説明です。

3. 事前に作成されたデータベースから、指定されたコマンドを探す
locateコマンドの説明です。事前のデータベース作成はupdatedbコマンドで行います。

4. ファイルシステムを走査して、指定されたコマンドを探す
findコマンドの説明です。最も汎用的なファイル探し用のコマンドです。

104.7システムファイルを見つける、適切 な位置にファイルを配置する

今回は101試験の試験範囲から「104.7 システムファイルを見つける、適切な位置にファイルを配置する」についての例題を解いてみます。

■例題
locateコマンドでファイルの検索を行ったが、見つけることができなかった。理由として適切でないものを選びなさい。

1. インストール直後でupdatedbが行われていなかった
2. そのファイルに対するアクセス権が無い
3. 対象となるファイルが存在しない
4. locateは管理者ユーザーにしか実行できない

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは 4. locateの実行権限が無い です。

locateコマンドは、システムに存在するファイルのデータベースから見つけたいファイルを検索するためのコマンドです。検索をリアルタイムに行うとシステムに対する負荷が高いので、あらかじめデータベースを作成しておき、その中から見つけ出すようになっているのが特長です。

データベースの作成はupdatedbコマンドを実行することで行えます。
updatedbはcronを使って毎日実施されるようになっていますが、システムインストールの直後にはデータベースが存在していません。そのままシステムを動作させていればcronの実行時間になれば作成が行われますが、もしすぐに実行したい場合には手動でupdatedbコマンドを実行しても構いません。

updatedbコマンドは、ホームディレクトリも含めてあらゆるディレクトリの中を検索します。検索しない、あるいは検索しても意味のないディレクトリは設定ファイル/etc/updatedb.confにPRUNEPATHSとして設定されています。
また、ISO9660などのファイルシステム内も検索しないよう、PRUNEFSで除外するファイルシステムが設定されています。

○/etc/updatedb.confの例
PRUNEFS = "auto afs gfs gfs2 iso9660 sfs udf"
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/spool/cups /var/
spool/squid /var/tmp"


当然、ホームディレクトリの中は他のユーザーに見られてはいけないので、一般ユーザーがlocateコマンドを実行した場合、別のユーザーのホームディレクトリ内のファイルを検索することはできません。

104.7システムファイルを見つける、適切な位置にファイルを配置する

今回は、101試験の出題範囲から「104.7 システムファイルを見つける、適切な位置にファイルを配置する」についての例題を解いてみます。

■例題
locateコマンドが使用するデータベースファイルを更新したい。実行するコマンドを書きなさい。

※この例題は実際のLPIC試験とは異なります。

解答と解説

答えは updatedb です。

locateコマンド(あるいはslocateコマンド)は、あらかじめ作成されたデータベースファイルの中から、指定されたパターンとマッチするデータを出力することで、ファイルの所在を調べることができるコマンドです。

使用しているデータベースファイルは、ファイルシステムに存在するすべてのファイルを絶対パスで記述したものです。そのため、指定したパターンはファイル名だけでなく、絶対パスに含まれるディレクトリ名にもマッチしてしまうため、単純なパターンを指定しただけでは多くのデータがマッチしてしまい、目的のファイルを見つけ出すのが困難です。

実用的な使い方としては、まずlocateコマンドで簡単に当たりをつけた後、より詳細に探すのであればfindコマンド、実行ファイルを探すのであればwhichコマンドやwhereisコマンドを使用するのがよいでしょう。

■学習のポイント
いくらLinuxのエキスパートといえども、すべてのファイルの在処を暗記しておくことは困難です。そのため、簡単な手がかりから調べを進めていく上でファイル検索を行うコマンド群は重要なツールといえます。

もっともオーソドックスなファイル検索コマンドはfindコマンドですが、オプションが多いこと、実際にその場でファイルシステムを検索するため速度が遅いことが難点です。

これらの欠点を補うためにその他のコマンドが存在していますので、それぞれの長所短所、使いどころを意識して、日常的に使用できるようになれば、このトピックはそれほど難しくありません。

Comments