3    ファイルの管理

この章では,システムでファイルを管理する方法について説明します。 この章の説明を理解すると,次の操作が可能になります。

この章で説明する例に従って (同じ順序で) 実際に操作することにより,ファイルの管理について理解することができます。 画面に表示される情報が本書の説明と一致するように,必ずすべての例を実行してください。

例を実行するためにはまずログインしなければなりません。 また, 第 2 章で作成した次の 3 つのファイルが,ログイン・ディレクトリに存在する必要があります。

ログイン・ディレクトリに存在するファイルのリストを作成するためには,ls コマンドを入力してください。 ls コマンドについては,3.1 節で説明します。 例とは異なるファイル名を使用している場合は,適当に置き換えてコマンドを実行してください。

ログイン・ディレクトリに戻る場合は,次のように cd (change directory) コマンドを入力してください。

$ cd
 
 

なお,上記の例でドル記号 ($) はシェル・プロンプトを表しています。 システムによっては表示されるシェル・プロンプトが異なる場合もあります。

また,この章の例に取り組む前に,ログイン・ディレクトリの下にサブディレクトリ project を作成しておいてください。 ディレクトリを作成するコマンドは mkdir (make directory) です。 ログイン・ディレクトリから次のように mkdir コマンドを入力します。

$ mkdir project
 
 

cd コマンドおよび mkdir コマンドについての詳細は, それぞれ4.2 節または cd(1) リファレンス・ページ, および4.1 節または mkdir(1) リファレンス・ページを参照してください。

3.1    ファイルのリスト (ls コマンド)

ls コマンドは,ディレクトリの内容を表示します。 このコマンドは,現在のディレクトリにあるファイルおよびサブディレクトリのリストを作成するためのものです。 現在のディレクトリ以外のディレクトリの内容など,他の種類の情報を表示することもできます。

ls コマンドの構文は次のとおりです。

ls

ls コマンドには,フラグと呼ばれる多数のオプションが用意されています。 フラグを使用すると,ディレクトリの内容についての情報をいくつかの形式で表示することができます。 ls コマンドのフラグについての詳細は,3.1.3 項を参照してください。

3.1.1    現在のディレクトリの内容のリスト

現在のディレクトリの内容をリストする場合は,次のように入力します。

$ ls
 

ls コマンドをフラグなしで使用すると,現在のディレクトリに存在するファイル名およびディレクトリ名がリストされます。

$ ls
file1     file2     file3     project
$
 

次のコマンド形式を使用して,現在のディレクトリの内容の一部をリストすることもできます。

ls filename

filename 変数にはファイル名あるいはスペースで区切った複数のファイル名のリストを指定します。 パターン照合文字を使用してファイルを指定することもできます。 パターン照合文字については第 2 章を参照してください。

たとえば,文字列 file で始まるファイル名をリストする場合は,次のコマンドを入力します。

$ ls file*
file1  file2  file3
$

3.1.2    他のディレクトリの内容のリスト

現在のディレクトリ以外のディレクトリの内容のリストをする場合は,次のコマンドを入力します。

ls dirname

dirname 変数にはディレクトリのパス名を指定します。

次に示すのは,現在のディレクトリがユーザのログイン・ディレクトリである場合に /users ディレクトリの内容を表示する例です。 システムには,/users ディレクトリと同じ名前の別のディレクトリが存在する可能性があります。 /users のスラッシュ ( / ) は,ルート・ディレクトリから探索を始めることをシステムに指示しています。

$ ls /users
amy     beth    chang   george  jerry   larry
mark    monique ron
$

ls コマンドは,現在のロケールで定義されている照合順で,ディレクトリ名およびファイル名をリストします。 ロケールについての詳細は,付録 Cを参照してください。

3.1.3    ls コマンドのフラグ

通常,ls コマンドは指定したディレクトリに含まれているファイルとディレクトリの名前を表示します。 ただし ls には,リストする項目についての追加情報を表示したり,システムによるリスト表示の方法を変えるためのいくつかのフラグが用意されています。

ls コマンドにフラグを指定する場合は,次の構文を使用してください。

ls -flagname

-flagname 変数には 1 つ以上のフラグ (オプション) を指定します。 たとえば,-l フラグはディレクトリの内容についての詳細なリストを作成します。

複数のフラグを使用する場合は,フラグ名を1つの文字列として一緒に入力してください。 次に例を示します。

$ ls -lta
 

表 3-1 に,ls コマンドでよく使用する便利なフラグを示します。

表 3-1:  ls コマンドのフラグ

フラグ 機能

-a

隠しファイルも含め,すべてのエントリをリストする。 このフラグを指定しない場合,ls コマンドは.profile.login,および相対パス名のようにドット (.) で始まるエントリの名前はリストしない。

-l

詳細なリストを表示する。 具体的には,リストされる各ファイルおよびディレクトリのタイプ,許可,リンク数,所有者,グループ,サイズ,および最後の修正日時を示す。

-r

ソート順を逆にしてリストする。 ls -rls逆順でリストし, ls -trls -t逆順でリストする。

-t

ファイルおよびディレクトリを,名前による照合順序ではなく,最後に修正された日時に従って,最新のものから順にソートする。

-F

ファイルがディレクトリの場合は,各ファイル名の後ろに / (スラッシュ) を付け, ファイルが実行できる場合は,各ファイル名の後ろに * (アスタリスク) を付ける。

-R

すべてのサブディレクトリを再帰的にリストする。 各ディレクトリおよびサブディレクトリを下って,ディレクトリ・ツリー全体のリストを提供する。

例 3-1に示すのは,-l フラグを使用して現在のディレクトリの詳細なリストを表示する例です。

例 3-1:  ディレクトリの詳細なリスト (ls -l)

$ ls -l
total 4   [1]
-rw-r--r--  1 larry   system   101 Jun  5 10:03 file1   [2] [3]
-rw-r--r--  1 larry   system    75 Jun  5 10:03 file2   [4] [5]
-rw-r--r--  1 larry   system    65 Jun  5 10:06 file3   [6] [7]
drwxr-xr-x  2 larry   system    32 Jun  5 10:07 project [8]
$

  1. このディレクトリに含まれるファイルが占める 512 バイト・ブロック数。 [例に戻る]

  2. 1 -- 各ファイルへのリンク数。 ファイル・リンクについての詳細は3.4 節を参照。 [例に戻る]

  3. 101 -- ファイルのバイト数。 [例に戻る]

  4. larry -- ファイルの所有者のユーザ名。 実際には,larry の代りにユーザのユーザ名が表示されます。 [例に戻る]

  5. system -- ファイルが属するグループ。 実際には,system の代りにユーザが所属するグループ名が表示されます。 [例に戻る]

  6. file3 -- ファイルまたはディレクトリの名前。 [例に戻る]

  7. Jun 5 10:06 -- ファイルが作成された日時。 あるいは最後に修正された日時。

    日時の表示方法は,ユーザの現在のロケールに依存します。 現在から 6 ヶ月以前の日付の場合は,4 桁の西暦が表示されます。 [例に戻る]

  8. drwxr-xr-x -- 各ファイルまたはディレクトリに設定されているファイル・タイプと許可。 このフィールドの最初の文字はファイル・タイプを示します。:

    - (ハイフン) 通常ファイル
    b ブロック型特殊ファイル
    c 文字型特殊ファイル
    d ディレクトリ
    l シンボリック・リンク
    p パイプ型特殊ファイル (先入れ先出し)
    s ローカル・ソケット

    残りの文字列は,所有者,グループ,およびその他のユーザに対して,読み取り許可 (r), 書き込み許可 (w),実行許可 (x) がそれぞれ設定されているかどうかを示します。 (-) が表示された場合,対応する許可が設定されていません。

    さらに,その他の許可情報を表示することもできます。 許可についての詳細は第 5 章を参照。 [例に戻る]

Tru64 UNIX オペレーティング・システムでは,ls コマンドには上記以外にもフラグが用意されています。 ls コマンド・フラグについての詳細は, ls(1) リファレンス・ページを参照してください。

3.2    ファイル内容の表示

テキスト・エディタを使用して,システムに格納されているテキスト・ファイルの内容を参照することができます。 ファイル内容を参照するだけで変更を行わない場合は,いくつかのオペレーティング・システムのコマンドを使用することができます。 以降の各項で,これらのコマンドについて説明します。

3.2.1    フォーマッティングを伴わないファイル表示 (pg, more, cat コマンド)

次のコマンドは,内容の体裁を制御する特殊文字を一切付け加えずに,ファイルをそのまま表示します。

フォーマット処理を行ってファイルを表示するコマンドについては,3.2.2 項を参照してください。

フォーマット処理を伴わないファイル表示コマンドの構文は次のとおりです。

command filename

変数 command には pgmorepage,または cat のいずれかのコマンド名を指定します。 filename 変数にはファイル名を指定します。 複数のファイル名を指定する場合は,スペースで区切ります。 パターン照合文字を使用してファイルを指定することもできます。 パターン照合文字については第 2 章を参照してください。

pg コマンドを使用すると,1 つまたは複数のファイルの内容を参照することができます。 例 3-2 に示すのは,pg コマンドを使用して,ログイン・ディレクトリにある file1 ファイルの内容を表示する例です。

例 3-2:  pg コマンドの出力 (1 つのファイル)

$ pg file1
You start the vi program by entering
the command vi, optionally followed by the name
of a new or existing file.
$

file1 および file2 の両方のファイルの内容を表示するには,両方のファイル名をコマンド行に指定します。 表示するファイルの行数が多くて一画面におさまらない場合,pg コマンドは各画面を表示するたびにポーズを置きます。 次の画面を表示するには Return キーを押します。 現在のファイルの終わりに到達すると,次のファイルの名前がプロンプトとして表示されます。 現在のファイルの終わりで Return キーを押すと,次のファイルの始まりが表示されます。 pg コマンドでは,コマンド行に指定した順にファイルが表示されます。 例 3-3(EOF): (end of file) は,現在のファイルの終端を意味しています。

例 3-3:  pg コマンドの出力 (複数のファイル)

$ pg file1 file2
You start the vi program by entering
the command vi, optionally followed by the name
of a new or existing file.
(EOF): [Return]
(Next file: file2) [Return]
If you have created a new file, you will find
that it is easy to add text.
(EOF): [Return]
$ 

Next file: filename プロンプトに対して -n オプションを入力すると,次のファイルではなく,以前のファイルが表示されます。

more コマンドもコマンド行に複数のファイルを指定することができます。 more コマンドは pg コマンドと同じような方法で長いファイルを扱います。 ファイルの行数が多く,1 画面におさまらない場合,more コマンドはポーズを置き,それまでにファイルの何パーセントを表示したかを知らせるメッセージを表示します。 この時点で,次のいずれかの操作を行うことができます。

page コマンドは more コマンドとほぼ同様ですが,ファイルの行数が多くて 1 ページに収まらない場合,page コマンドは画面をクリアして画面の最上部から表示を始めます。 ご使用のオペレーティング・システム環境や表示デバイスによっては,この違いはほとんど認識されない場合もあります。

cat コマンドを使用してテキストを表示することもできます。 ただし,このコマンドはファイルのページ付けを行わないため,1 画面よりも長いファイルを表示すると一挙にファイルの最後まで表示され,内容を読むことができません。

このような場合は,Ctrl/S を押して表示を停止させてください。 こうすることにより,テキストを読むことができます。 ファイルの残りの部分を表示させたいときは,Ctrl/Q を押してください。 長いファイルを表示させる場合は,cat コマンドではなく pg コマンド,moreコマンド,または page コマンドを使用するのがよいでしょう。

pgmorepage,および cat コマンドには,それぞれオプションが用意されています。 詳細については,リファレンス・ページの cat(1), more(1)page(1),および pg(1) を参照してください。

3.2.2    フォーマッティングを伴うファイル表示 (pr コマンド)

フォーマッティングとは,ファイルの内容を表示または印刷する際に,見た目を制御するための処理です。 pr コマンドは,簡潔で便利なスタイルにファイルをフォーマットします。

注意

pr コマンドはテキスト・フォーマッティング情報は解釈しないため,ファイル内にこれらのマクロがある場合には注意してください。 このコマンドは nrofftroff のようにファイルをフォーマットするわけではありません。 ワード・プロセッサやデスクトップ・パブリッシング・ソフトウェアで作成されたファイルは,pr コマンドでは認識されません。

簡単なフォーマット処理を行ってファイルを表示する場合は,次の構文で pr コマンドを実行します。

pr filename

filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。 使用するコマンド形式は,ファイルが現在のディレクトリとの関係でどこに位置しているかによって変わります。 パターン照合文字を使用してファイルを指定することもできます。 パターン照合については第 2 章を参照してください。 filename をダッシュ (-) として指定することができます。 この場合,pr コマンドは,ファイルの終了を示すマーク (通常は Ctrl/D) で入力を終了するまで,端末からの入力を読み取ります。

pr コマンドをオプションなしで実行すると,次の処理を行います。

pr コマンドを使用してファイルを表示すると,内容が一挙にスクロールして読むことができないかもしれません。 その場合には,pr コマンドと more コマンドを併用することによって,フォーマッティングされたファイルを読むことができます。 more コマンドは,1 画面分のテキストを表示した時点でポーズを置くようシステムに指示します。

たとえば,長いファイル report を表示し,画面が一杯になった時点で停止するように指示する場合は,次のコマンドを入力します。

$ pr report | more
$
 

システムが最初の 1 画面分のテキストを表示して停止したら,スペース・バーを押して次の画面を表示します。 上記のコマンドは,パイプ記号 (|) を使用して,pr コマンドからの出力を more コマンドへの入力として使用しています。 パイプについての詳細は,7.4.2 項を参照してください。

pr コマンドには,より美しいフォーマットでファイルを表示するためのフラグが用意されています。 表 3-2 に,pr で使用できるいくつかのフラグを示します。

表 3-2:  pr コマンドのフラグ

フラグ 機能
+page

page に指定したページからフォーマットを開始する。 このフラグを省略した場合,1 ページ目からフォーマットを開始する。

たとえば,pr +2 file1 というコマンドは,file1 の 2 ページ目からフォーマットを開始する。

-column

各ページを column に指定した数のカラムでフォーマットする。 このフラグを省略した場合,pr コマンドは各ページを 1 つのカラムでフォーマットする。

たとえば,pr -2 file1 というコマンドは,file1 を 2 つのカラムでフォーマットする。

-m

指定されたすべてのファイルを,各ファイル 1 カラムで同時に横に並べてフォーマットする。

たとえば,pr -m file1 file2 というコマンドは,file1 の内容を左のカラムに,file2 の内容を右のカラムに表示する。

-d

出力をダブル・スペースでフォーマットする。 このフラグを省略した場合,出力はシングル・スペースでフォーマットされる。

たとえば,pr -d file1 というコマンドは,file1 をダブル・スペースでフォーマットして表示する。

-f

新しいページに進む場合に改ページ文字を使用する。 このフラグを省略した場合,pr コマンドは行送り文字のシーケンスを発行する。 標準出力が端末の場合,最初のページを開始する前にポーズを置く。

-F

新しいページに進む場合に改ページ文字を使用する。 このフラグを省略した場合,pr コマンドは行送り文字のシーケンスを発行する。 標準出力が端末の場合,最初のページを開始する前にポーズは置かない。

-wnum

行の長さを num に指定したカラム数に設定する。 このフラグを省略した場合,行の長さは 72 カラムになる。

たとえば,pr -w 40 file1 というコマンドは,file1 ファイルの行の長さを 40 カラムに設定する。

-onum

num に指定したカラム位置だけ各行をオフセット (インデント) する。 このフラグを省略した場合,オフセットは 0 カラム位置になる。

たとえば,pr -o 5 file1 というコマンドは,file1 ファイルの各行を 5 スペースだけインデントする。

-lnum

ページ長を num に指定した値に設定する。 このフラグを省略した場合,ページ長は 66 行になる。

たとえば,pr -1 30 file1 というコマンドは,file1 ファイルのページ長を 30 行に設定する。

-h string

各ページの上部に表示されるヘッダ (タイトル) として,ファイル名ではなくこのフラグの後に指定した文字列を使用する。 string がブランクまたは特殊文字を含んでいる場合は,文字列を一重引用符 (' ') で囲む。

たとえば,pr -h 'My Novel' file1 というコマンドは,タイトルとして "My Novel" を指定する。

-t

ヘッダおよび各ページ末のブランク行をフォーマットしないことを指定する。

たとえば,pr -t file1 というコマンドは,ヘッダおよび各ページ末のブランク行を省略して,file1 ファイルをフォーマットするよう指定する。

-schar

各カラムをブランク・スペースではなく文字 char で区切る。 特殊文字を使用する場合は一重引用符で囲む。

たとえば,pr -s'*'file1 というコマンドは,アスタリスクでカラムを区切るよう指定する。

pr コマンドには,同時に複数のフラグを指定することができます。 次の例では,下記のような形式で file1 をフォーマットするように pr コマンドに指示しています。

$ pr -dh 'My Novel' file1
$
 

pr コマンドおよびそのフラグについての詳細は, pr(1) リファレンス・ページを参照してください。

3.3    ファイルの印刷 (lpr,lpq,lprm コマンド)

ファイルをシステム・プリンタに送る場合は,lpr コマンドを使用します。lpr コマンドはプリント・キューにファイルを登録します。 プリント・キューとは,印刷されるのを待っているファイルのリストです。lpr コマンドでファイルをキューに登録しておけば,そのファイルが印刷されるのを待ちながら,システムで他の作業を続けることができます。

lpr コマンドの一般的な構文は次のとおりです。

lpr filename

filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。 使用するフォーマットは,現在のディレクトリとの関係でファイルがどこに位置しているかによって変わります。 パターン照合文字を使用してファイルを指定することもできます。 パターン照合については第 2 章を参照してください。

システムに複数のプリンタが接続されている場合は,次の形式で,ファイルをどのプリンタで印刷するかを指定します。

lpr -Pprintername filename

-P フラグは,ファイルを印刷するプリンタを指定するためにのフラグです。 printername 変数にはプリンタ名を指定します。 プリンタ名は,プリンタの場所を示すものであったり (southmailroom など),管理者の名前であったり,あるいはその他の説明的な名称であったりします。 システムで利用可能なプリンタの種類が複数ある場合は,それらの機能を示す slidecolor などの名前を割り当てる場合もあります。 ご使用のシステムで利用できるプリンタの構成については,システム管理者にお問い合わせください。

システムに複数のプリンタが接続されている場合は,そのうちの 1 つが省略時のプリンタとして設定されています。 特定の printername が入力されない場合,プリント要求はその省略時のプリンタに送られます。 システムで利用できるプリンタの名前を調べるには,lpstat コマンドを使用します。

例 3-4に示すのは,1 つあるいは複数のファイルを lp0 というプリンタで印刷する場合の例です。

例 3-4:  lpr コマンドの使用

$ lpr -Plp0 file1  [1]
$ lpr -Plp0 file2 file3  [2]
$
 

  1. 最初の lpr コマンドを実行すると,file1lp0 プリンタに送り,$ プロンプトを表示します。 [例に戻る]

  2. 2 番目の lpr コマンドを実行すると,file2 ファイルおよび file3 ファイルを同じプリント・キューに送り,ファイルの印刷が終わる前にシェル・プロンプトを表示します。 [例に戻る]

lpr コマンドにフラグを指定することによって,ファイルの印刷方法を制御することができます。 lpr コマンドのフラグは次の形式で使用します。

lpr flag filename

lpr コマンドで使用できるフラグのいくつかを表 3-3 に示します。 lpr コマンド・フラグについての完全な説明は, lpr(1) リファレンス・ページを参照してください。

表 3-3:  lpr コマンドのフラグ

フラグ 機能
-#num ファイルを num 部印刷する。 このフラグを省略した場合,lpr はファイルを 1 部印刷する。 たとえば,lpr -#2 file1 というコマンドは,file1 ファイルを 2 部印刷する。
-wnum 行の長さを num カラムに設定する。 このフラグを省略した場合,行の長さは 72 カラムになる。 たとえば,lpr -w40 file1 というコマンドは,file1 ファイルを行の長さ 40 カラムで印刷する。
-inum 各行を num スペース位置だけオフセット (インデント) する。 このフラグを省略した場合,オフセットは 8 スペースになる。 たとえば,lpr -i5 file1 というコマンドは,各行を 5 スペースずつインデントして file1 ファイルを印刷する。
-p pr をフィルタとして使用して,ファイルをフォーマットする。
-T 'string' pr が指定するヘッダとして,ファイル名ではなく -T の後の文字列を使用する。 このフラグを指定する場合は,-p フラグを同時に使用する。 文字列にブランクまたは特殊文字が含まれる場合は,一重引用符 (' ') で囲む。 たとえば,lpr -p -T 'My Novel' file1 というコマンドは,タイトルとして "My Novel" を指定する。
-m ファイルの印刷が完了したらメールを送る。 たとえば,lpr -m file1 コマンドを実行すると,file1 ファイルの印刷が完了したらメールが送信される。

lpr コマンドを入力すると,プリント要求はプリント・キューに登録されます。

登録されたプリント要求のプリント・キューにおける位置を知りたい場合は,lpq コマンドを使用します。 プリント・キューの内容を表示するには,次のように入力します。

$ lpq
 

すべての印刷がすでに完了している場合,あるいはプリント・キューにプリント要求がない場合,システムは次のメッセージを表示します。

no entries
 

プリント・キューにエントリが存在する場合,システムはそれらのエントリをリストして,現在どの要求がプリントされているかを示します。 次に示すのは,プリント・キュー・エントリ・リストの例です。

Rank   Owner      Job  Files                Total Size
active marilyn    489  report               8470 bytes
1st    sue        135  letter               5444 bytes
2nd    juan       360  (standard input)     969 bytes
3rd    larry      490  travel               1492 bytes

lpq コマンドは,各プリント・キュー・エントリについて次の情報を表示します。

前のプリント・キュー・エントリ・リストの例では,Marilyn のレポート (ジョブ番号 489) は現在印刷中であり,Sue,Juan,および Larry の要求は待機中です。

ファイルを印刷する際,プリント・キュー内のジョブの位置およびファイル・サイズによって,ユーザが要求したジョブがいつ完了するかを予想することができます。 一般的には,キュー内の優先番号が低くファイル・サイズが大きければ,それだけ余計に時間がかかります。

システムに複数のプリンタが接続されている場合は,次のコマンド構文を使用して,どのプリント・キューを参照するかを指定します。

lpq -Pprintername filename

プリント・キューを指定する場合は -P フラグを使用します。 printername 変数にはプリンタ名を指定します。 printername 変数は,プリント要求の開始時に使用したものと同じでなければなりません。 すべてのプリンタの名前を参照する場合は,lpstat -s コマンドを使用します。 lpq コマンドの完全な説明については, lpq(1) リファレンス・ページを参照してください。

キューに登録したプリント要求を取り消す場合は,lprm コマンドを使用します。 lprm コマンドの構文は次のとおりです。

lprm -Pprintername jobnumber

jobnumber 変数には,システムがプリント要求時に割り当てたジョブ番号を指定します。 printername 変数は,プリント要求を開始したときに使用した名前と同じでなければなりません。 ジョブ番号は lpq コマンドで参照できます。

たとえば,ユーザ Larry が自分のプリント要求を取り消したい場合は,次のように入力します。

$ lprm 490
$
 

これで travel ファイルのプリント・ジョブはプリント・キューから削除されます。

lprm コマンドについての詳しい説明は, lprm(1) リファレンス・ページを参照してください。

ここでは,ファイルを印刷するコマンドについて基本的な説明をしています。 システムの印刷機能および利用可能なコマンドについての詳細な説明は, lp(1)cancel(1),および lpstat(1) リファレンス・ページを参照してください。

3.4    ファイルのリンク (ln コマンド)

リンクとは,ファイル名とファイルそのものとの結びつきのことです。 通常,各ファイルには 1 つのリンクが存在します。 つまり,各ファイルはそれぞれ 1 つのファイル名と結びつけられています。 しかし,ln (link) コマンドを使用すると,1 つのファイルに対して同時に複数のファイル名を結びつけることができます。

リンクは,複数のディレクトリで同じデータを使用する場合に便利です。 たとえば,組立ラインの生産統計を格納するファイルがあるとします。 このファイルのデータを 2 つの異なる文書 (たとえば,マネージメントのために作成する月報およびライン作業員のために作成する月別概要) で使用する場合を考えてみます。

たとえば,この統計ファイルを 2 つの異なるファイル名 mgmt.stat および line.stat とリンクして,それぞれのファイル名を 2 つの異なるディレクトリに置くことができます。 こうすると,ファイルのコピーは 1 つだけで済み,記憶領域を節約することができます。 また,ファイルをリンクしておけば,統計ファイルが更新された際に複数のファイルを更新する必要がありません。 mgmt.stat ファイルと line.stat ファイルは互いにリンクしているので, 一方を編集すれば他方も自動的に更新されることになり,どちらのファイル名も常に同じデータを参照することになります。

3.4.1    ハード・リンクとソフト・リンク

リンクにはハード・リンクとソフト・リンク (シンボリック・リンク) の 2 種類があります。

ハード・リンクでもソフト・リンクでも,ある名前で呼び出したファイルに対して変更を加えた後,別の名前で同じファイルを呼び出すと,変更した内容が反映されています。

ハード・リンクとソフト・リンクとの大きな違いは,ファイルを削除する際に明らかになります。 複数の名前がハード・リンクされているファイルは,それらの名前がすべて削除されるまで残ります。 複数の名前がソフト・リンクされているファイルは,オリジナルの名前が削除されると消滅します。 その場合,残っているソフト・リンクは実在しないファイルを指すことになります。 リンクの削除については3.4.5 項を参照してください。

3.4.2    リンクとファイル・システム

ここでリンクについて説明するときに使用するファイル・システムという用語は, 前章での説明とは意味が異なります。 一般にファイル・システムとは,ファイルを使用しやすい状態に配置したディレクトリ構造と定義されます。 ただし,ここで使用するファイル・システムという用語は,より厳密な意味をもっています。 つまり,単一のディスク・パーティション内に格納されているファイルおよびディレクトリを意味します。 ディスク・パーティションとは,ファイル・ディレクトリを格納するために作成された物理ディスク,またはその一部のことです。

Tru64 UNIX システムで,あるディレクトリがどのディスク・パーティションに含まれているかを調べる場合は,df コマンドを使用します。 次に示すのは,df コマンドを使用して,ディレクトリ /u1/info/etc/tmp がどのファイル・システムに含まれているかを調べる例です。 この例では,ディレクトリ /u1/info/etc は異なるファイル・システムに存在し, /etc/tmp は同じファイル・システムに存在しています。

$ df /u1/info
Filesystem 512-blks    used  avail capacity  Mounted on
/dev/disk/dsk2c    196990  163124  14166    92%    /u1
$ df /etc
Filesystem 512-blks    used  avail capacity  Mounted on
/dev/rz3a     30686   19252   8364    70%    /
$ df /tmp
Filesystem 512-blks    used  avail capacity  Mounted on
/dev/rz3a     30686   19252   8364    70%    /
$
 

df コマンドについての詳細は, df(1) リファレンス・ページを参照してください。

3.4.3    リンクの使用

同じファイル・システム内のファイルをリンクする場合は,次のコマンド構文を使用します。

ln /dirname1/filename1 /dirname2/filename2

/dirname1/filename1 変数は既存ファイルのパス名です。 /dirname2/filename2 変数は,既存のファイル /dirname1/filename1 にリンクする同じファイル・システム内の新しいファイルのパス名です。 同じディレクトリにあるファイルをリンクする場合は,dirname1 および dirname2 は省略できます。

異なるファイル・システム間でファイルあるいはディレクトリをリンクする場合は,シンボリック・リンクを作成します。 シンボリック・リンクを作成する場合は,ln コマンドに -s フラグを指定し,両方のファイルの完全パス名を指定します。 シンボリック・リンクを作成する場合の ln コマンドの構文は次のとおりです。

ln -s /dirname1/filename1 /dirname2/filename2

/dirname1/filename1 変数は既存ファイルのパス名です。 /dirname2/filename2 変数は別のファイル・システムまたは同じファイル・システム内の新しいファイルのパス名です。

例 3-5では,新しいファイル名 checkfile を既存ファイル file3 にリンクしています。 その後,more コマンドを使用して file3 ファイルと checkfile ファイルの内容が同じであることを確認しています。

例 3-5:  ファイルのリンク

$ ln file3 checkfile [1]
$ more file3 [2]
You will find that vi is a useful [3]
editor that has many features. [3]
$ more checkfile [4]
You will find that vi is a useful [3]
editor that has many features. [3]
$ 

  1. 2 つのファイルの間にハード・リンクを作成します。 [例に戻る]

  2. file3 のテキストを表示します。 [例に戻る]

  3. 次に checkfile のテキストを表示します。 [例に戻る]

  4. file3 ファイルの内容と checkfile ファイルの内容がともに同じであることに注意してください。 一方のファイル名でアクセスしてファイルの内容を変更した後,もう一方のファイルにアクセスすると変更した内容が表示されます。 たとえば,file3 ファイルの内容を更新すれば,checkfile ファイルの内容も更新されます。 [例に戻る]

2 つのファイルがそれぞれ 2 つの異なるファイル・システムのディレクトリにある場合は,それらをリンクするためにはシンボリック・リンクを使用する必要があります。 たとえば,/reports ディレクトリにある newfile ファイルを, /summary ディレクトリにある mtgfile ファイルにリンクする場合は, 次のコマンドを使用して,シンボリック・リンクを作成します。

$ ln -s /reports/newfile /summary/mtgfile
$
 

これらの各ファイルの内容は,ハード・リンクの場合と同じように更新されます。

ln コマンドおよびファイルのリンクについての詳細は, ln(1) リファレンス・ページを参照してください。

3.4.4    リンクの仕組み (ファイル名とファイル通し番号)

各ファイルには,ファイル通し番号と呼ばれるファイル固有の識別番号が付与されます。 ファイル通し番号はファイル名ではなく,ファイルそのもの,すなわち特定の場所に格納されているデータを参照します。 システムは,ファイル通し番号を使用して,各ファイルを同じファイル・システム内の他のファイルと区別します。

各ディレクトリが保持している情報は,物理ファイルを表すファイル通し番号とファイル名との間のリンク情報です。 複数のファイル名を同一の物理ファイルすなわち同一のファイル通し番号にリンクすることにより,ファイルを複数のファイル名とリンクすることができます。

現在のディレクトリにあるファイルのファイル通し番号を表示するためには,-i フラグを指定して ls コマンドを実行します。

ls -i

ログイン・ディレクトリにあるファイルのファイル通し番号を調べてみましょう。 各ファイル名の前に表示される番号が,そのファイルのファイル通し番号です。

$ ls -i
1079 checkfile  1077 file1  1078 file2  1079 file3
$
 

この例では,file3 ファイルと checkfile ファイルのファイル通し番号が同じ 1079 です。 これは,この 2 つのファイルがリンクしていることを示します。

ファイル通し番号は特定のファイル・システム内のファイルを表すため,異なるファイル・システム間ではハード・リンクは存在しません。

シンボリック・リンクの場合,リンクしたファイルにはオリジナルのファイルとは異なる新しいファイル通し番号が付与されます。 つまりシンボリック・リンクでは,オリジナル・ファイルのファイル通し番号に対して別のファイル名を結び付けるのではなく,独自のファイル通し番号を持つ独立したファイルを作成します。 シンボリック・リンクはファイル通し番号によってではなく,ファイル名によってオリジナルのファイルを参照するため,シンボリック・リンクは異なるファイル・システム間でも正しく機能します。

3.4.5    リンクの削除

rm (remove file) コマンドはいつもファイルを削除するとは限りません。 たとえば,あるファイルが複数のファイル名にリンクされている場合,すなわち複数のファイル名が同じファイル通し番号を参照している場合, rm コマンドはファイル通し番号とそのファイル名の間のリンクは削除しますが,物理ファイルはそのまま残します。 図 3-1 に示すように,rm コマンドは,ファイルとファイル名の間の最後のリンクを削除した場合に初めて物理ファイルを削除します。 シンボリック・リンクを削除すると,リンク・ファイルまたはディレクトリへのポインタを指定するファイルが削除されます。

rm コマンドについての詳細は,3.9 節または rm(1) リファレンス・ページを参照してください。

図 3-1:  リンクとファイルの削除

各ファイルのファイル通し番号および特定のファイル通し番号にリンクされているファイル名の数を表示する場合は, -i (print i-number) および -l (long listing) フラグを指定して,ls コマンドを使用します。

ls -il

ログイン・ディレクトリのリンクを調べてみましょう。 実際に表示される画面は,ここで示す例とは異なります。

$ ls -il
total 3
1079 -rw-r--r-- 2 larry system   65 Jun 5 10:06 checkfile
1077 -rw-r--r-- 1 larry system  101 Jun 5 10:03 file1
1078 -rw-r--r-- 1 larry system   75 Jun 5 10:03 file2
1079 -rw-r--r-- 2 larry system   65 Jun 5 10:06 file3
1080 drwxr-xr-x 2 larry system   32 Jun 5 10:07 project
$
 

各エントリの最初の数字はそのファイル名のファイル通し番号を示しています。 各行の 2 番目の要素はファイル許可を示しています。 ファイル許可については,第 5 章を参照してください。

各エントリの 3 番目のフィールド,つまりユーザ名の左に表示される数字は,そのファイル通し番号へのリンク数を表します。 file3checkfile が 1079 という同じファイル通し番号を持ち,これらのファイルのリンク数がともに 2 であることに注意してください。 rm コマンドを使用してファイル名を削除するたびに,そのファイル通し番号へのリンク数が 1 ずつ減少します。

次に示すのは,rm コマンドを使用して checkfile ファイルを削除する例です。

$ rm checkfile
$
 

このコマンドを実行した後,ls -il コマンドでディレクトリの内容をリストすると, ファイル通し番号 1079 (file3) のリンク数が 1 つだけ減少しているのがわかります。

$ ls -il
total 3
1077 -rw-r--r-- 1 larry system  101 Jun 5 10:03 file1
1078 -rw-r--r-- 1 larry system   75 Jun 5 10:03 file2
1079 -rw-r--r-- 1 larry system   65 Jun 5 10:06 file3
1080 drwxr-xr-x 2 larry system   32 Jun 5 10:07 project
$
 

3.5    ファイルのコピー (cp コマンド)

この節では,ローカル・システムでファイルをコピーする方法について説明します。 リモート・システムとの間でファイルをコピーする方法については, 第 12 章および第 14 章を参照してください。

cp (copy) コマンドは,現在のディレクトリ内で,あるいは 1 つのディレクトリから別のディレクトリへファイルをコピーします。

cp コマンドは,重要なファイルのバックアップ・コピーを作成する際に特に有用です。 バックアップ・ファイルとオリジナル・ファイルは 2 つの別のファイルなので,バックアップ・ファイルを作成しておけば,オリジナル・ファイルに問題が発生した場合に回復することができます。 また,編集中のオリジナル・ファイルに対する変更を取り消したい場合は,バックアップ・ファイルを使用して,改めて作業を始めることができます。

実際にファイルのコピーを作成する cp コマンドと,1 つのファイルに対して複数のファイル名を作成する ln コマンドとを比較してみてください。 ln コマンドについては3.4 節で詳しく説明しています。 cp(1) および ln(1) リファレンス・ページも参照してください。

cp コマンドの構文は次のとおりです。

cp source destination

source 変数にはコピー元のファイル名を指定します。 destination 変数には,source ファイルをコピーする先のファイル名を指定します。 source および destination 変数には,現在のディレクトリ内のファイル名,あるいは異なるディレクトリのパス名のいずれも指定することができます。 ただし,この節では,異なるディレクトリ間でファイルをコピーする場合についてのみ説明します。 ディレクトリ全体の内容を別のディレクトリにコピーする (-r オプションの使用) 方法については,4.4 節を参照してください。

あるファイルを別のディレクトリに同じファイル名でコピーする場合,source にはファイル名を指定し,destination にはコピー先のディレクトリ・パス名を指定します。 source 変数には,パターン照合文字を使用することもできます。

3.5.1    現在のディレクトリ内でのファイルのコピー

cp コマンドはファイルをコピーします。 コピー先ファイル名が存在していなければ,新規にそのファイルを作成します。 しかし,コピー先ファイル名と同じ名前のファイルがすでに存在している場合,cp コマンドはコピー元ファイルを既存のコピー先ファイルの上にコピーします。

注意

コピー先ファイル名が現在のディレクトリ内に存在する場合,シェルは cp コマンドでコピー元ファイルをコピーする前に,コピー先ファイルの内容を消去します。 したがって cp コマンドを実行する前に,コピー先ファイルの内容が必要でないか,あるいはそのファイルのバックアップ・コピーが存在するかを確認してください。

C シェルを使用している場合は,コピー先ファイルの消去を防ぐための noclobber 変数が使用できます。 noclobber 変数については表 8-6 を参照してください。

次の例では,現在のディレクトリにコピー先ファイル名が存在しないので,cp コマンドは新規にファイルを作成します。

まず,ログイン・ディレクトリの内容をリストします。

$ ls
file1    file2    file3    project
$
 

次に file2 ファイルをコピーして file2x ファイルを作成します。

$ cp file2 file2x
$
 

ディレクトリの内容をリストして,ファイルのコピーが成功したことを確認します。

$ ls
file1    file2    file2x   file3    project
$
 

3.5.2    別のディレクトリへのファイルのコピー

別のディレクトリへファイルをコピーする場合は,cp コマンドを実行する前にコピー先のディレクトリを作成しておきます。 すでにコピー先ディレクトリが存在する場合,この操作は必要ありません。 ディレクトリの作成には mkdir コマンドを使用します。

次のように,reports というサブディレクトリを作成します。

$ mkdir reports
$
 

file2 ファイルを reports ディレクトリにコピーするには,次のように入力します。

$ cp file2 reports
$
 

ここで reports ディレクトリの内容をリストして,file2 ファイルがコピーされていることを確認します。

$ ls reports
file2
$
 

cp コマンドを使用して,複数のファイルを別のディレクトリにコピーすることもできます。 この場合は次の構文を使用します。

cp filename1 filename2 dirname

次の例では, cp コマンドを使用して file2 および file3 ファイルを reports ディレクトリにコピーした後, コピーが成功していることを確認するために,ls コマンドを使用して reports ディレクトリの内容をリストしています。

$ cp file2 file3 reports
$ ls reports
file2  file3
$
 

この例では,dirname ディレクトリのコピー先ファイル名 file2 および file3 を指定していません。 コピー先ファイル名を省略すると,元のファイル名でファイルがコピーされます。

パターン照合文字を使用してファイルをコピーすることもできます。 たとえば,file1file2 および file3 ファイルを reports ディレクトリへコピーする場合は,次のように入力します。

$ cp file* reports
$
 

ファイルを別のディレクトリにコピーする際に,コピー先ファイル名を変更したい場合は,次の構文を使用します。

cp source distnation_directory/filename

source 変数にはコピー元ファイル名を,distnation_directory 変数にはコピー先ディレクトリ名を,filename には新ファイル名を指定します。

次の例では,file3 ファイルを新しいファイル名 notesreports ディレクトリにコピーし, ls コマンドを使用して reports ディレクトリの内容をリストしています。

$ cp file3 reports/notes
$ ls reports
file1  file2  file3  notes
$
 

3.6    ファイル名の変更およびファイルの移動 (mv コマンド)

mv (move) コマンドを使用して,次の操作を行うことができます。

mv コマンドの構文は次のとおりです。

mv oldfilename newfilename

oldfilename 変数には,移動または名前を変更したいファイルの名前を指定します。 newfilename 変数には新しいファイル名を指定します。 これらの変数には,現在のディレクトリにあるファイル名または別のディレクトリにあるファイルのパス名のどちらでも指定できます。 また,パターン照合文字を使用することもできます。

mv コマンドは新しいファイル名を既存のファイル通し番号にリンクし,旧ファイル名とそのファイル通し番号とのリンクを切断します。 ln コマンドと cp コマンドを使用する (3.4 節および3.5 節を参照) 代わりに, mv コマンドを使用すると便利です。 mv(1)ln(1),および cp(1) リファレンス・ページも参照してください。

3.6.1    ファイル名の変更

次の例では,まず ls -i コマンドを使用して,現在のディレクトリ内の各ファイルのファイル通し番号をリストします。 次に,mv コマンドを実行して,file2x ファイルの名前を newfile に変更します。 実際に表示されるファイル通し番号は異なります。

$ ls -i
1077 file1    1088 file2x   1080 project
1078 file2    1079 file3    1085 reports
$ mv file2x newfile
$
 

再びディレクトリの内容をリストします。

$ ls -i
1077 file1    1079 file3    1080 project
1078 file2    1088 newfile  1085 reports
$
 

ここでは次のことに注意してください。

mv コマンドはファイル通し番号 1088 とファイル名 file2x との関係を切り離し,代わりにファイル通し番号 1088 とファイル名 newfile とを結びつけています。 ただし,このコマンドはファイル自体を変更することはありません。

3.6.2    別のディレクトリへのファイルの移動

mv コマンドを使用して,ファイルを現在のディレクトリから別のディレクトリに移動することもできます。

注意

移動先のディレクトリ名は注意して入力してください。 mv コマンドはファイル名とディレクトリ名とを区別しないため,存在しないディレクトリ名を入力すると,mv コマンドはそのディレクトリ名を新しいファイル名と解釈します。 この結果,別のディレクトリへの移動ではなく,ファイル名の変更が行われることになります。

次の例では,ls コマンドでログイン・ディレクトリの内容をリストし, 次に mv コマンドで,file2 ファイルを現在のディレクトリから reports ディレクトリに移動しています。 その後,再度 ls コマンドを使用して,ログイン・ディレクトリの file2 ファイルが削除されていることを確認しています。

$ ls
file1    file2    file3    newfile  project  reports
$ mv file2 reports
$ ls
file1    file3    newfile  project  reports
$
 

reports ディレクトリの内容をリストすると,file2 ファイルが移動していることがわかります。

$ ls reports
file2  file3  notes
$
 

パターン照合文字を使用してファイルを移動することもできます。 たとえば,file1 および file3 ファイルを reports ディレクトリに移動する場合は,次のコマンドを入力します。

$ mv file* reports
$
 

ログイン・ディレクトリの内容をリストすると,file1 および file3 ファイルが移動していることがわかります。

$ ls
newfile  project  reports
$
 

file1file2file3 の各ファイルをログイン・ディレクトリにコピーする場合は,次のように入力します。 次の例で使用しているドット (.) は現在のディレクトリを指定します。 この例では,現在のディレクトリはログイン・ディレクトリです。

$ cp reports/file* .
$
 

ls コマンドを実行すると,ファイルがログイン・ディレクトリに戻っていることが確認できます。

$ ls
file1    file2    file3    newfile  project  reports
$
 

ここで reports ディレクトリの内容をリストすると,file1file2,および file3 の各ファイルが reports ディレクトリにあることが確認できます。

$ ls reports
file1    file2    file3    newfile  project  reports
$
 

3.7    ファイルの比較 (diff コマンド)

diff コマンドを使用すると,2 つのテキスト・ファイルの内容を比較することができます。 diff コマンドは,多少違いがあると予想される 2 つのファイルの内容の違いを正確に示したい場合に使用します。

diff コマンドの構文は次のとおりです。

diff file1 file2

diff コマンドは,2 つのファイルを 1 行ずつ走査します。 異なる行が見つかると,次の情報を出力します。

違いが追加である場合は,次の形式で情報を表示をします。

l[,l] a r[,r]
 

lfile1 の行番号であり,rfile2 の行番号です。 a は追加を示しています。 違いが削除によるものである場合,diff コマンドの出力では d で示され,行の変更である場合は c で示されます。

これらの情報の次に,実際に異なる行が表示されます。 左端のカラムの左山カッコ (<) は file1 の中の実際の行を示し,右山カッコ (>) は file2 の中の実際の行を示します。

たとえば,ファイル jan15mtg および jan22mtg の内容が次のような出席者名簿であるとします。

jan15mtg jan22mtg
alice alice
colleen brent
daniel carol
david colleen
emily daniel
frank david
grace emily
helmut frank
howard grace
jack helmut
jane jack
juan jane
lawrence juan
rusty lawrence
soshanna rusty
sue soshanna
tom sue
  tom

これらのファイルの内容を表示して 1 行ずつ比較する代わりに,diff コマンドを使用して,jan15mtgjan22mtg の内容を比較することができます。 この場合,diff コマンドの出力は次のようになります。

$ diff jan15mtg jan22mtg
2a3,4
> brent
> carol
10d11
< howard
$
 

この出力から,Brent と Carol が 1 月 15 日の会議に欠席し,Howard が 1 月 22 日の会議に欠席していたことがわかります。

2 つのファイルに違いがない場合は,システムは単にプロンプトを返します。 詳細は, diff(1) リファレンス・ページを参照してください。

3.8    ファイル内容のソート (sort コマンド)

sort コマンドを使用すると,テキスト・ファイルの内容をソートすることができます。 このコマンドは,1 つのファイルに対しても,複数のファイルに対しても使用できます。

sort コマンドの構文は次のとおりです。

sort filename

filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。 また,パターン照合文字を使用してファイルを指定することもできます。 パターン照合文字については第 2 章を参照してください。

sort コマンドの使用例としては,名前のリストをソートして,現在のロケールで定義されている照合順に並べることなどがあります。 たとえば,list1list2,および list3 の 3 つのファイルに,それぞれ名前のリストが含まれているとします。

list1 list2 list3
Zenith, andre Rocca, Carol Hamilton, Abe
Dikson, Barry Shepard, Louis Anastio, William
D'Ambrose, Jeanette Hillary, Mimi Saluccio, William
Julio, Annette Chung, Jean Hsaio, Peter

3 つのファイルに含まれているすべての名前をソートするには,次のように入力します。

$ sort list*
Anastio, William
Chung, Jean
D'Ambrose, Jeanette
Dickson, Barry
Hamilton, Abe
Hillary, Mimi
Hsaio, Peter
Julio, Annette
Rocca, Carol
Saluccio, Julius
Shepard, Louis
Zenith, andrew
$
 

次のように入力して,指定するファイルに画面出力をリダイレクトすると,新しいソート済みのリストを含むファイルを作成することができます。

$ sort list* > newlist
$
 

出力のリダイレクトについての詳細は,第 6 章を参照してください。 sort コマンドとそのオプションについての詳細は, sort(1) リファレンス・ページを参照してください。

3.9    ファイルの削除 (rm コマンド)

ファイルが必要ではなくなった場合には,rm (remove file) コマンドを使用して,ファイルを削除することができます。 1 つのファイルを削除することも,複数のファイルを同時に削除することもできます。

rm コマンドの構文は次のとおりです。

rm filename

filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはファイル名リストを指定します。 使用するコマンド形式は,ファイルが現在のディレクトリとの関係でどこに位置しているかによって変わります。 このコマンドについての詳細は, rm(1) リファレンス・ページを参照してください。

3.9.1    単一のファイルの削除

次の例では,file1 ファイルをログイン・ディレクトリから削除しています。

まず,cd (change directory) コマンドでログイン・ディレクトリに移ります。 次に,pwd (print working directory) コマンドを入力して,現在のディレクトリがログイン・ディレクトリであることを確認し,ディレクトリの内容をリストします。 実際には,/u/uname にはログイン・ディレクトリの名前が表示されます。

$ cd
$ pwd
/u/uname
$ ls
file1    file2    file3    newfile  project  reports
$
 

rm コマンドを使用して newfile を削除した後,ディレクトリの内容をリストして,システムがそのファイルが削除されたことを確認します。

$ rm newfile
$ ls
file1    file2    file3    project  reports
$
 

ディレクトリからファイルを削除するには,そのディレクトリにアクセスする許可が必要です。 ディレクトリ許可については,第 5 章を参照してください。

注意

rm コマンドは,1 つまたは複数のファイルを削除するだけでなく,ファイルとファイル名とのリンクも削除します。 rm コマンドは,そのファイルへの最後のリンクを削除する際に,ファイルそのものも削除します。 rm コマンドによるリンクの削除については,3.4.5 項を参照してください。

3.9.2    複数のファイルの削除 (パターン照合)

rm コマンドとともにパターン照合文字を使用して,複数のファイルを同時に削除することができます。 パターン照合文字については第 2 章を参照してください。

たとえば,現在のディレクトリに次のファイルが含まれているとします。

rm *.jun コマンドを使用すると,これらの 4 つのファイルをすべて削除することができます。

注意

パターン照合文字 * を使用する場合は十分に注意してください。 たとえば,通常のユーザの場合,rm * コマンドを入力すると,ドット (.) で始まるファイル名を持つファイルを除いて,現在のディレクトリにあるすべてのファイルが削除されます。

ファイル名の始めまたは終わりに使用するパターン照合文字 * には,特に注意してください。 rm *name の代わりに誤って rm * name と入力すると, name で終わるファイルだけでなく,現在のディレクトリにあるすべてのファイルを削除します。

rm コマンドに -i フラグを指定すると,ファイルを削除する前に,確認のためのプロンプトを表示します。

パターン照合の例を実行するには,ディレクトリにファイル record1record2record3record4record5,および record6 が入っていなければなりません。 次のように touch コマンドを使用して,ログイン・ディレクトリにこれらのファイルを作成します。

$ touch record1 record2 record3 record4 record5 record6
$

touch コマンドは,上の例のように空のファイルを作成したい場合に便利です。 touch コマンドについての詳細は, touch(1) リファレンス・ページを参照してください。

ファイル名が 1 文字だけ異なるファイルを削除する場合は,rm コマンドでパターン照合文字 ? を使用することもできます。 たとえば,現在のディレクトリに record1record2record3,および record4 の各ファイルが含まれている場合, rm record? コマンドを使用すると,4 つのファイルすべてを削除することができます。

パターン照合文字についての詳細は,第 2 章を参照してください。

パターン照合文字を使用する場合は,rm コマンドの -i (interactive) フラグが便利です。 rm -i コマンドを使用すると,ファイルを選択的に削除することができます。 コマンドによって選択された各ファイルについてプロンプトが表示されるので,ファイルを削除するか,あるいはそのまま残すかを選択することができます。

たとえば,文字列 record で始まる 6 つのファイルのうち 4 つを削除したい場合は,次のように入力します。

$ rm -i record?
rm: remove record1?n
rm: remove record2?y
rm: remove record3?y
rm: remove record4?y
rm: remove record5?y
rm: remove record6?n
$
 

注意

rm コマンドは,ファイルを削除するだけでなく,-r フラグを指定すると,フィアルとディレクトリを同時に削除します。 詳細は,第 4 章を参照してください。

3.10    ファイル・タイプの参照 (file コマンド)

ファイルに含まれている情報がどのような種類のデータであるかをファイルの内容を表示しないで調べる場合は,file コマンドを使用します。 file コマンドは,ファイルが次のどのタイプであるかを表示します。

file コマンドは,コンパイル済みのプログラムや,オーディオ・データ,またはイメージ・データがファイルに含まれているかどうかを確認する際に有用です。 これらのタイプのファイルの内容を表示すると画面が乱れます。 これらのタイプのファイルの目的はまだわからないかも知れませんが, UNIX コマンド使用の経験が豊富になるにつれ,目的がよく理解できるようになります。

file コマンドの構文は次のとおりです。

file filename

filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。 使用するコマンド形式は,ファイルが現在のディレクトリとの関係でどこに位置しているかによって変わります。 また,パターン照合文字を使用してファイルを指定することもできます。 パターン照合文字については第 2 章を参照してください。

たとえば,ログイン・ディレクトリにあるファイルのファイル・タイプを参照する場合は,次のように入力します。

$ cd
$ pwd
/u/uname
$ file *
file1:  ascii text
file2:  English text
file3:  English  text
project:  directory
record1:  empty
record6:  empty
reports:  directory
$
 

この例では,file1file2,および file3 を英語のテキスト・ファイル, projectreports をディレクトリ,record1record6 を空ファイルと識別しています。

file コマンドについての詳細は, file(1) リファレンス・ページを参照してください。