2    ファイルとディレクトリの概要

この章では,ファイル,ファイル・システム,テキスト・エディタについて説明します。

ファイルとは,コンピュータに格納されているデータの集まりです。 代表的なファイルとしてはメモ,レポート,通信文,プログラムなどがあります。 ファイル・システムとは,使いやすい形態でファイルをディレクトリに配置したものです。

テキスト・エディタとは,新しいファイルを作成したり,既存のファイルを修正したりするためのプログラムのことです。

この章を読むことにより,次の項目について理解することができます。

以上の項目を理解することにより,情報の種類および作業方法に適したファイル・システムの設計が可能になります。

2.1    テキスト・エディタの概要

エディタとは,テキスト,プログラム,データなどを含むファイルを,作成あるいは変更するためのプログラムです。 エディタには,ワード・プロセッサやパブリッシング・ソフトウェアのようなフォーマット機能およびプリント機能はありません。

テキスト・エディタを使用すると,次の操作が可能になります。

編集は編集バッファで行われ,ユーザはそのデータを保存または破棄することができます。

Tru64 UNIX オペレーティング・システムで利用できるテキスト編集プログラムは,vi および ed です。 それぞれのエディタには,それぞれのテキスト表示方法,サブコマンドおよび規則があります。

vi についての詳細は,2.2 節および付録 Aを参照してください。 ed については,付録 Bを参照してください。

システムによっては,これ以外のエディタを使用できる場合もあります。 詳細については,システム管理者に問い合わせてください。

2.2    vi テキスト・エディタによるサンプル・ファイルの作成

この節では,vi テキスト・エディタで 3 種類のファイルを作成する方法を紹介します。

この節の主な目的は,最小限のコマンドを使用してファイルを作成することです。 これらのファイルは,本書の以降の章で紹介する例を通して実際に作業する際に利用します。 vi についての詳細は,付録 A および vi(1) リファレンス・ページを参照してください。

注意

その他の編集プログラムに慣れている場合は,そのプログラムを使用して,次に説明する3 つのサンプル・ファイルを作成してもかまいません。 また,すでに編集プログラムで 3 つのサンプル・ファイルを作成している場合は,例で使用しているファイル名の代わりに,それらのファイル名を使用してもかまいません。

次の手順に従ってサンプル・ファイルを作成する際は,ボールド (boldface: 太字) 体で印刷されている文字列を入力してください。 システムが表示するプロンプトおよび出力は,別の (like this のような) 書体で示してあります。

次の手順に従って,3 つのサンプル・ファイルを作成してください。

  1. シェル・プロンプトで vi と新しいファイル名をタイプして,Return キーを押し,vi プログラムを開始します。

    $ vi file1[Return]
     
    

    file1 ファイルは新しいファイルなので,カーソルは画面の最上部に表示されます。

    ~
    ~
    ~
    ~
    ~
    ~
    "file1" [New file]
    

    画面上のチルダ (~) で始まる空白行は,その行にテキストを含んでいないことを示します。 まだ何もテキストを入力していないので,全行の先頭にチルダが表示されます。

  2. 新しいファイルにテキストを書き込むことをシステムに指示するため, 英小字の i (insert text) をタイプしてください。 ここでタイプした英字 i は,画面には表示されません。

    次のテキストをタイプして,各行の終わりで Return キーを押してください。 間違ってタイプした場合,次のテキスト行に移る前にそれを訂正するには,'x' キー,または他の 'vi' 削除コマンドを使用します。

    You start the vi program by entering[Return]
    the vi command optionally followed by the name[Return]
    of a new or existing file.[Escape]
    ~
    ~
    ~
    ~
    ~
    ~
    "file1" [New file]
     
    

  3. 現在の作業が終了したことをシステムに知らせるには,Escape キーを押してください。 最下行モードに移るには,コロン (:) をタイプします。

    注意

    端末あるいはワークステーションの設定によっては Escape キーは別の機能を実行するようにプログラムされている場合があります。 このような場合,キーボード上のいずれかのファンクション・キーが "escape" の機能を実行するように設定されている可能性があります。 この機能は [F11] キーに割り当てられていることがよくあります。 Escape キーが正しく動作しない場合には,システム管理者に問い合わせてください。

    コロンは次のように,画面の最下行にプロンプトとして表示されます。

    You start the vi program by entering
    the vi command optionally followed by the name
    of a new or existing file.
    ~
    ~
    ~
    ~
    ~
    ~
    :
    

  4. 次に,英小字の w を入力してください。 ここで英字 w を入力すると,新しいファイルのコピーを現在のユーザ・ディレクトリに書き込む,つまり保存することをシステムに指示します。 現在のディレクトリについての説明は,第 4 章を参照してください。

    画面は次のようになります。

    You start the vi program by entering
    the vi command optionally followed by the name
    of a new or existing file.
    ~
    ~
    ~
    ~
    ~
    ~
    "file1" [New file] 3 lines, 111 characters
    

    システムは新しいファイル名と,そのファイルに含まれるテキストの行数および文字数を表示します。

    この時点で vi テキスト・エディタはまだ実行中です。 続けて別の2つのサンプル・ファイルを作成します。 手順は file1 の作成方法と同じですが,入力するテキストが異なります。

  5. コロン (:) をタイプします。 コロンは画面の最下行にプロンプトとして表示されます。 次に vi file2 を入力して,2 番目のサンプル・ファイルを作成します。

    システムは次のような画面を表示します。

    ~
    ~
    ~
    ~
    ~
    ~
    ~
    "file2" No such file or directory
    

    file2 No such file or directory というメッセージは,file2 が新しいファイルであることを示しています。

  6. 英小字の i をタイプして,新しいファイルにテキストを書き込むことをシステムに指示してください。

    次のテキストをタイプします。

    If you have created a new file, you will find[Return]
    that it is easy to add text.[Escape]
     
    

  7. コロン (:) をタイプしてから英小字の w を入力して,ファイルを現在のディレクトリに書き込む,つまり保存してください。

    画面は次のようになります。

    If you have created a new file, you will find
    that it is easy to add text.
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    "file2" [New file] 2 lines, 75 characters
    

  8. 手順 5 に従って,3 番目のファイルを作成してください。 ただし,ファイル名は file3 とし,次のテキストをタイプしてください。

    You will find that vi is a useful[Return]
    editor that has many features.[Escape]
     
    

  9. 次に,コロン (:) を入力してから wq コマンドを入力してください。

    wq コマンドを実行するとファイルを書き込み,エディタを終了して,シェル・プロンプトへ戻ります。

2.3    ファイル,ディレクトリ,およびパス名

ファイルはコンピュータに格納されているデータの集まりです。 コンピュータに格納されているファイルは,ファイリング・キャビネットに保管されている文書にたとえることができます。 ユーザはそれを検索,オープン,処理,クローズしたり,ユニットとして格納することができます。 いずれのコンピュータ・ファイルも,ユーザおよびシステムが参照するためのファイル名を持っています。

ファイル・システムは,使いやすい形態にファイルを配置したものです。 一般に情報を整理する際には,コンピュータ・ファイル・システムのようなものを作成します。 たとえば,マニュアルのファイル・システム (キャビネット,引出し,フォルダ,および文書) の構造は,コンピュータ・ファイル・システムの構造に類似しています。 (ファイル・ストレージを管理しているソフトウェアもファイル・システムと呼ばれますが,この章ではこの意味で使用することはありません。 システムによっては,このソフトウェアをファイル・マネージャと呼ぶ場合もあります。)

マニュアルであれコンピュータであれ,ファイル・システムを構成したユーザは,そのシステムの構造を理解しているので,迅速に特定の情報を見つけることができます。

ファイル・システムを理解するためには,まず,次の3つの概念を理解する必要があります。

2.3.1    ファイルおよびファイル名

ファイルには,ドキュメントのテキスト,コンピュータ・プログラム,総勘定元帳のための記録,コンピュータ・プログラムの数値データあるいは統計的出力などのデータを含むことができます。

ファイル名には次に示す文字を除いて,どのような文字でも使用することができます。 これらの文字は,シェルにとって特別な意味を表すため,ファイル名には使用しないでください。

ピリオドまたはドット ( . ) はファイル名の途中に使用できますが,通常,ファイル名の先頭には使用しません。 ファイル名の先頭にドットを使用すると,そのファイルは隠しファイル (hidden file) となります。 隠しファイルは,オプションを指定しないで ls コマンドを実行した際に,ファイル・リストに含まれません。 シェルにとって特別な意味を持つ文字については,8.2.2 項および8.3.2 項を参照してください。 隠しファイルのリストについては,3.1.3 項を参照してください。

注意

Tru64 UNIX オペレーティング・システムはファイル名の大文字と小文字とを区別します。 たとえば,次の 3 つのファイル名 fileaFileaFILEA は,それぞれ異なるファイルを示します。

ファイル名には,そのファイルの内容を表す名前を使用することをお勧めします。 たとえば,広告 (advertising) に関するメモを含むファイルの名前として memo.advt を使用すると,このファイルの内容が即座に推測できます。 これに対し,fileafilebfilec などのファイル名を使用すると,そのファイルの内容を推測することは困難になります。

また,一貫したパターンに従って,関連するファイルを命名するのもよいでしょう。 たとえば,複数の章で構成される広告に関するレポートがあり,各章がそれぞれ別のファイルとして存在する場合は,次の例のように命名してもよいでしょう。

chap1.advtchap2.advtchap3.advt

注意

ユーザが起動するプログラムの多くは,ドット ( . ) に続くファイル名の一部を使用します。 これは拡張子と呼ばれ,ファイルの目的を示すインディケータとして使用されます。

ファイル名の最大長は,オペレーティング・システムで使用しているファイル・システムによって異なります。 たとえば,ファイル・システムによっては最大 255 文字 (省略時の値) のファイル名が許されるものもあれば,最大 14 文字のファイル名しか許されないものもあります。

ファイル名の最大長は,意味のあるファイル名を付けるうえで重要な要素となります。 詳細についてはシステム管理者に問い合わせてください。

2.3.2    ディレクトリおよびサブディレクトリ

ファイルはグループおよびサブグループに編成することができます。 これは,マニュアルのファイル・システムにおけるキャビネット,引出し,フォルダなどに該当するものす。

このグループおよびサブグループは,それぞれディレクトリおよびサブディレクトリと呼ばれます。 ディレクトリとサブディレクトリが適切に構成されていれば,ファイル内のデータの検索や操作が迅速に行えます。

ディレクトリは次の点でファイルと異なります。

ユーザがログインすると,システムはユーザを自動的に各ユーザのログイン・ディレクトリに入れます。 このディレクトリは,ホーム・ディレクトリとも呼ばれます。 また,システムは,ユーザの HOME 環境変数をログイン・ディレクトリの絶対パス名に設定します。 このディレクトリは,各ユーザ・アカウントを作成する際に,システム管理者によって作成されます。 ただし,ユーザのログイン・ディレクトリの下にすべてのファイルを格納するのが,ファイルを構成する最も有効な方法であるとは限りません。

システムで作業していると,新たにディレクトリやサブディレクトリを作成して,ファイルを新しいグループに編成する必要がでてくるかもしれません。 たとえば,自動車会社の営業部に所属するユーザが 4 種類の車種を担当している場合には,ログイン・ディレクトリの下に各車種に対応するサブディレクトリを作成し, それぞれのサブディレクトリに,各車種に関するメモ,レポート,および売上データを格納すると便利です。

実用的なディレクトリ構造でファイルを編成すると,ディレクトリ間を容易に移動して作業することができます。 ディレクトリの作成とディレクトリ間の移動については,第 4 章を参照してください。

2.3.3    現在のディレクトリ (作業ディレクトリ) の名前の表示 (pwd コマンド)

現在ユーザが作業しているディレクトリを,現在のディレクトリまたは作業ディレクトリと呼びます。

現在どのディレクトリで作業しているのか,あるいはそのディレクトリがファイル・システムのどこに位置するのかがわからない場合は, 次のように pwd (print working directory) コマンドを入力してください。

$ pwd
 

このコマンドを入力すると,システムは次のような形式で現在のディレクトリ名を表示します。

/usr/msg
 

この例では,ユーザが現在 usr ディレクトリの下にある msg ディレクトリで作業していることを示しています。

/usr/msg という表記は,作業ディレクトリのパス名と呼ばれます。 パス名については2.3.4 項を参照してください。 pwd コマンドについての詳細は, pwd(1) リファレンス・ページを参照してください。

2.3.4    ツリー構造ファイル・システムおよびパス名

ファイル・システムにおけるファイルとディレクトリは,樹木を逆にしたような構造で階層的に配置されています。 この配置をツリー構造と呼びます。 ディレクトリ構造についての詳細は, hier(5) リファレンス・ページを参照してください。

図 2-1は,典型的なファイル・システムのツリー構造の例です。 この例では,ディレクトリ名は太字体で,ファイル名はイタリック体で示されています。

図 2-1:  典型的なファイル・システム

  1. 図 2-1 に示されているファイル・システムの最上部にあるディレクトリは,ルート・ディレクトリと呼ばれます。 ルート・ディレクトリはスラッシュ ( / ) で表します。

  2. ルート・ディレクトリの次のレベルには 8 つのディレクトリがあり,それぞれにサブディレクトリおよびファイルが存在します。 図 2-1 では,usr ディレクトリの下にあるサブディレクトリのみを示しています。 このシステムでは,usr ディレクトリの下に各ユーザのログイン・ディレクトリが存在します。

  3. ツリー構造の 3 番目のレベルには,2 人のシステム・ユーザ smith および chang のログイン・ディレクトリがあります。 smithchang は,ログインするとこのディレクトリに入ります。

  4. 図 2-1 の 4 番目のレベルには,chang のログイン・ディレクトリの下に,plansreportpayroll の 3 つのディレクトリが存在します。

  5. ツリー構造の 5 番目のレベルには,ファイルとディレクトリの両方が含まれています。 plans ディレクトリには,各四半期のプランに関する 4 つのファイルが含まれ,report ディレクトリには,レポートを構成する 3 つのファイルが含まれています。 また,5 番目のレベルには,payroll ディレクトリの 2 つのサブディレクトリregular および contract が含まれています。

上位のディレクトリは親ディレクトリと呼ばれます。 たとえば,図 2-1 では,ディレクトリ plansreport,および payroll はすべて chang を親ディレクトリとしています。

パス名はファイル・システム内におけるディレクトリやファイルの位置を指定します。 たとえば,ディレクトリ X にあるファイル A での作業を終了して,ディレクトリ Y にあるファイル B へ移る場合に, ファイル B のパス名を指定すると,オペレーティング・システムはこのパス名を使用してシステム・ファイル内を探索し,ファイル B を探します。

パス名は,ディレクトリ名をスラッシュ ( / ) で区切って表し,パス名の最後はディレクトリ名またはファイル名になります。 パス名の最初の要素は,システムがどこから探索を始めるかを指定し,最後の要素は探索のターゲットを指定しています。 次のパス名の例は,図 2-1 のディレクトリ構造のものです。

/usr/chang/report/part3
 

最初のスラッシュ ( / ) はルート・ディレクトリを表し,探索の始点を示しています。 このパス名は,ルート・ディレクトリの下の user ディレクトリの下の chang ディレクトリの下の report ディレクトリにある part3 ファイルを検索することを示しています。

次のような操作を行う場合には,パス名を使用して操作する対象を指定します。

スラッシュ ( / ) (ルート・ディレクトリを表す記号) で始まるパス名は,完全パス名または絶対パス名と呼ばれます。 完全パス名はファイルまたはディレクトリの完全な名前と考えることもできます。 完全パス名を指定すれば,ファイル・システムのどこで作業していても,間違いなくファイルまたはディレクトリを見つけ出すことができます。

ファイル・システムでは,相対パス名を使用することもできます。 相対パス名は現在のディレクトリからの相対的な位置を示します。 したがって,相対パス名はルート・ディレクトリを表す  / では始まりません。

相対パス名は次のいずれかの方法で指定することができます。

各ディレクトリには .. および . が必ず含まれています。

たとえば,図 2-2 のディレクトリ構造において,現在のディレクトリが chang である場合,contract ディレクトリにある 1Q ファイル の相対パス名は payroll/contract/1Q です。 この相対パス名を,同じファイルの完全パス名 /usr/chang/payroll/contract/1Q と比較すると,相対パス名を使用する方が,入力の手間が少なく便利であることがわかります。

図 2-2:  相対パス名と完全パス名

C シェル および Korn または POSIX シェルでは,相対パス名の先頭にチルダ (~) を使用することもできます。 チルダは,単独で使用した場合,ユーザのログイン・ディレクトリ (ホーム・ディレクトリ) を示します。 チルダの後にユーザ名を指定すると,同じシステム上の別のユーザのログイン・ディレクトリ (ホーム・ディレクトリ) を示します。

たとえば,ユーザ自身のログイン・ディレクトリを指定する場合は,チルダのみを使用します。 ユーザ chang のログイン・ディレクトリを指定する場合は,~chang と指定します。

相対パス名の使用方法についての詳細は,第 4 章を参照してください。

注意

システム内の他のユーザが所有するファイルあるいはディレクトリに対するアクセスは,それらのファイルあるいはディレクトリに設定されているファイル許可に左右されます。 ファイルおよびディレクトリの許可についての詳細は,第 5 章を参照してください。

また,システムにエンハンスト・セキュリティ機能が設定されている場合は,ファイルおよびディレクトリへのアクセスに影響することがあります。 その場合には,システム管理者に問い合わせてください。

2.4    パターン照合によるファイル指定

コマンドには引数としてファイル名を指定するものがあります。 複数のファイル名をコマンドの引数として使用する場合は,たとえば次の例のように,各ファイルの完全な名前を入力する方法があります。

$ ls file1 file2 file3

ただし,ファイル名に共通なパターンがある場合 (この例では file というプレフィックス) には, シェルにそのパターンを照合させて,ファイル名のリストを生成し,自動的にそのファイル名リストを引数としてコマンドに渡すことができます。

たとえばアスタリスク (*) はワイルドカードと呼ばれ,どんな文字列にも対応します。 次の例では,ls コマンドは,現在のディレクトリにあるファイルのうち,プレフィックス file を含むすべてのテキスト・ファイル名を検索します。

$ ls file*
 

file* は,file で始まり任意の文字列で終わるすべてのファイル名と一致します。 シェルはこのパターンに一致するすべてのファイル名を ls コマンドの引数として渡します。

このように,引数としてファイル名を指定する場合は,必ずしも各ファイルの完全名を入力する必要はありません。 ls コマンドの引数として完全なファイル名を指定した場合も file* を指定した場合も,コマンド実行の結果は同じです。 つまり,そのディレクトリにある file というプレフィックスの付いたすべてのファイルを ls の引数として渡します。

パターン照合の一般規則には 1 つだけ例外があります。 ドット ( . ) で始まるファイル名を指定する場合は,ドットを明示的に照合する必要があります。 ls * コマンドを実行した場合,現在のディレクトリにあるファイルのうちドットで始まるファイル名は表示しません。 ls -a コマンドを実行すると,ファイル名がドットで始まるものを含めてすべてのファイル名を表示します。

この制限は,シェルが自動的に相対ディレクトリ名を照合するのを防ぐために設定されています。 つまり,現在のディレクトリを表すドット ( . ) および親ディレクトリを表すドット・ドット ( .. ) を照合するのを防ぐのが目的です。 相対ディレクトリ名についての詳細は,第 4 章を参照してください。

パターンがどのファイル名とも一致しない場合,シェルはそのことを知らせるメッセージを表示します。

Tru64 UNIX オペレーティング・システムのシェルでは,アスタリスク (*) 以外にもパターン照合文字が用意されています。 Tru64 UNIX オペレーティング・システムで使用できるすべてのパターン照合文字を次の表 2-1で示します。

表 2-1:  パターン照合文字

文字 機能

*

空文字列も含めてすべての文字列と一致する。

たとえば,th*th, theodore, theresaなどと一致する。

?

すべての単一の文字と一致する。

たとえば,304?b304Tb, 3045b, 304Bbなどと一致する。 つまり,304で始まって b で終わり,その間に文字が 1 つあるすべての文字列と一致する。

[...]

大カッコで囲まれた文字のいずれか 1 つと一致する。

たとえば,[AGX]*は,現在のディレクトリ内の A, G,または X で始まるすべてのファイル名と一致する。

[.-.]

指定した範囲内に含まれる文字と一致する。

範囲の指定は現在のロケールで定義されている方法に依存する。 ロケールについての詳細は,付録 C を参照。

たとえば,[T-W]* は,現在のディレクトリ内の TUV,または W で始まるすべてのファイル名と一致する。

[!...]

指定した文字を除くすべての単一の文字と一致する。

たとえば,[!abyz]* は,現在のディレクトリ内にある,aby および z 以外の文字で始まるすべてのファイル名と一致する。

このパターン照合は Bourne,Korn,および POSIX シェルでのみ利用可能。

国際化されたオペレーティング・システムである Tru64 UNIX オペレーティング・システムは,表 2-2に示すパターン照合機能も備えています。

表 2-2:  国際化パターン照合文字

文字 機能

[[:class:]]

文字クラス名をデリミタ [: および :] で囲んで指定すると,指定したクラスの文字セットのいずれとも一致する。

サポートされるクラスは alpha, upper, lower, digit, alnum, xdigit, space, print, punct, graph, and cntrl

たとえば,alpha という文字クラス名は,現在のロケールで定義されているすべての英字 (大文字および小文字) と一致する。 アメリカ英語をベースとしたロケールを実行している場合,alpha はアルファベット (A-Z, a-z) のどの文字とも一致する。

[[=char=]]

デリミタ [= および =] で囲まれた文字は,すべての等価クラス文字と一致する。

等価クラスとは,すべて同じ一次ロケーションにソートされる照合要素の集まりである。 等価クラスは一般に,一次-二次ソートに対処するように設計されている。 つまり,フランス語のように,文字グループを定義して,同じ一次ロケーションにソートした後,発音記号を含めて二次ソートする言語のためのクラスである。

国際化パターン照合文字についての詳細は, grep(1) リファレンス・ページを参照してください。 Tru64 UNIX オペレーティング・システムの国際化機能についての詳細は,付録 C を参照してください。