第1章 初めてLinux/UNIX系OSにふれる
エンジニアのための最初の一歩(7)

シェルとコマンド(5)

 

1.2シェルとコマンド(その5) 

bash固有の機能(その2)

初期化ファイル

 ログインシェルの場合には,ログイン時に以下の順でスクリプトがソースされます.ソースとは,シェルスクリプトをサブシェルで実行せずに,現在のシェルで実行することです.ユーザーごとの環境設定などは,これらの初期化スクリプトに記述します.

 まず,“/etc/profile”があればソースで読み込みます.

 そして,“~/.bash_profile”,“~/.bash_login”,“~/.profile”の順に探し,見つかったファイルを一つだけソースします.

 また,ログアウトの際には,“~/.bash_logout”があればソースします.

 bashには,cshに似た“~/.bashrc”という,もう一つの初期化ファイルがあります.“~/.bashrc”は,bashの起動時にソースされます.エイリアスの設定などに使うことができますが,“~/.bash_profile”と異なり,起動するたびに呼ばれるので変数の設定などには注意が必要です.

ディレクトリの探索・構造

 コマンドとシェルの使い方を紹介したので,UNIXのファイルシステムの中を探索することができるはずです.そこで,次にUNIXのディレクトリが一般的にどのようになっているのかを説明します.

 UNIXには,ディレクトリ構造や,ディレクトリ名に一般的な共通性があり,初めて接するシステムであっても,どこに何があるのか迷うようなことはなく,だいたいのことはわかるようになっています.図13にUNIXのディレクトリ階層構造を示します.

 

(図13)

UNIXのディレクトリ階層構造

(約4Kバイト)

 

 ルートディレクトリには,いくつか重要なディレクトリがあります.

 まず,/binや/sbinにはシステムを起動するために必要なコマンドが置かれます./binにはすべてのユーザーが使うものを,/sbinには管理者のみが使うコマンドを置きます.

 /bootには,ブートローダがLinuxを起動するために必要なファイルを置きます.ブートローダは非常に小さなプログラムですから,ファイルシステムを理解しません.ここに置かれたいくつかのファイルは,物理的な位置をもとに読み込まれます.ファイルを削除してから,バックアップしておいたファイルをコピーして戻しても物理的にもとの位置に戻るとは限らないので,この部分に関して安易に操作を行うのは危険です.

 /libには,基本的なライブラリとカーネルのローダブルモジュール(ドライバ)があります.基本的なライブラリとは,libc,libmなどのCコンパイラ関連のライブラリ,/bin,/sbinにあるコマンドを実行するために必要なライブラリです.cppはリンクになってはいますが,互換性のため,今でもここにも置かれています.カーネルに組み込まれていないドライバは,/lib/modules/の下にカーネルのバージョン番号と同じ名前のディレクトリを作成して,そこに置かれます.

 /etcには,システムの設定や初期化のためのファイルが置かれます.以前はgettyなどのシステムの起動,初期化に必要なバイナリが置かれていましたが,今はバイナリファイルは置かれていません.

 /usrには,Linuxシステムのほとんどのコマンドやライブラリがあります./と同じ名前のbin,sbinがあり,同じような分類でファイルが置かれます.この場合の区別ですが,/binに置かれたコマンドは,/usr/binに置かれたコマンドよりも重要度が高いと考えられます./usr/libには,これらのコマンドが必要とするライブラリがあります.

 また,/usr/libにはサブディレクトリを作成して大規模なアプリケーションを置くことがあります.たとえば,/usr/lib/gcc-libです.このディレクトリには,GNU Cコンパイラ(gccやegcs)があります.その他にもxemacs,perl,python,netscapeといった大きなアプリケーションもここに置かれています.ただし,X Window Systemは例外で,/usrの直下のX11R6ディレクトリにあります.

 /usr/includeには,Cプログラムのためのへッダファイルがあります.そして,/usr/shareにはマシンアーキテクチャに依存しないファイルがあります.たとえば,ロケールデータ注4やterminfoのデータベースなどです.

 /varには,内容が変更されるファイルが置かれます./var/spoolには,メールやプリンタのためのスプールディレクトリが,/var/logには管理者用のログファイルがあります.

 最後の/devは,デバイスファイルと呼ばれる特殊なファイルが置かれます.UNIXでは,ハードディスクやテープドライブなどのデバイスもファイルとしてアクセスすることができます.これらはIDEのプライマリに接続され,マスタに設定されたドライブは/dev/hdaとしてアクセスができます.たとえば,

  $ od -ba /dev/hda|more 

とすれば,このドライブの先頭セクタからダンプすることができます.ただし,通常,/dev/hdaはスーパーユーザーでないとアクセスできません.ちなみに,/devにはnullという変わったデバイスがあります./dev/nullへ出力しても/dev/nullはすべて捨ててしまいます.この性質を利用して,たとえばtimeコマンドを使って処理時間を計りたいとき,

  $ time ls -lR /bin > /dev/null

とすることで標準入力が/dev/nullへ切り替えられ,すべて捨てられます.timeコマンドの出力は標準エラー出力なので,端末上に表示されます.

 暗黙的にディレクトリ名が決まっているとはいっても,どのディレクトリにどのようにファイルを置くかは議論の分かれるところです.しかし,ディストリビューションごとにまったく互換性がないのでは,ユーザーにとって迷惑このうえありません.

 そのため,Linuxでも標準化が検討されています.以前はFSSTNDという名前でディレクトリの標準化を進めていましたが,今はFHS 2.1注5という新しい標準に変わっています.


注:4 国と言語,文字コードなどの設定をまとめたデータ.

注:5 Filesystem Hierarchy Standard

   http://www.pathname.com/fhs/


Copyright 2000 
日樫 英孝/増田 佳泰/山岡 賢一/船木 陸議/ 羅 正華/森 友一朗/祐安 重夫/岩田 孝清/海老原 祐太郎/g新部 裕/ 齊藤 正伸 

新刊のご案内


Copyright 1997-2001 CQ Publishing Co.,Ltd.