この章では,システムでファイルを管理する方法について説明します。 この章の説明を理解すると,次の操作が可能になります。
ファイルのリスト (3.1 節)
ファイルの表示 (3.2 節)
ファイルの印刷 (3.3 節)
ファイルのリンク (3.4 節)
ファイルのコピー (3.5 節)
ファイルの名前変更,移動 (3.6 節)
ファイルの比較 (3.7 節)
ファイルのソート (3.8 節)
ファイルの削除 (3.9 節)
ファイル・タイプの決定 (3.10 節)
この章で説明する例に従って (同じ順序で) 実際に操作することにより,ファイルの管理について理解することができます。 画面に表示される情報が本書の説明と一致するように,必ずすべての例を実行してください。
例を実行するためにはまずログインしなければなりません。 また, 第 2 章で作成した次の 3 つのファイルが,ログイン・ディレクトリに存在する必要があります。
file1
file2
file3
ログイン・ディレクトリに存在するファイルのリストを作成するためには,ls
コマンドを入力してください。
ls
コマンドについては,3.1 節で説明します。
例とは異なるファイル名を使用している場合は,適当に置き換えてコマンドを実行してください。
ログイン・ディレクトリに戻る場合は,次のように
cd
(change directory) コマンドを入力してください。
$ cd
なお,上記の例でドル記号 ($
) はシェル・プロンプトを表しています。
システムによっては表示されるシェル・プロンプトが異なる場合もあります。
また,この章の例に取り組む前に,ログイン・ディレクトリの下にサブディレクトリ
project
を作成しておいてください。
ディレクトリを作成するコマンドは
mkdir
(make directory) です。
ログイン・ディレクトリから次のように
mkdir
コマンドを入力します。
$ mkdir project
cd
コマンドおよび
mkdir
コマンドについての詳細は,
それぞれ4.2 節または
cd
(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 $
現在のディレクトリ以外のディレクトリの内容のリストをする場合は,次のコマンドを入力します。
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
コマンドでよく使用する便利なフラグを示します。
フラグ | 機能 |
|
隠しファイルも含め,すべてのエントリをリストする。
このフラグを指定しない場合,ls
コマンドは.profile ,.login ,および相対パス名のようにドット (.) で始まるエントリの名前はリストしない。 |
|
詳細なリストを表示する。 具体的には,リストされる各ファイルおよびディレクトリのタイプ,許可,リンク数,所有者,グループ,サイズ,および最後の修正日時を示す。 |
|
ソート順を逆にしてリストする。
ls -r
は
ls
の逆順でリストし,
ls -tr
は
ls -t
の逆順でリストする。 |
|
ファイルおよびディレクトリを,名前による照合順序ではなく,最後に修正された日時に従って,最新のものから順にソートする。 |
|
ファイルがディレクトリの場合は,各ファイル名の後ろに
/
(スラッシュ) を付け,
ファイルが実行できる場合は,各ファイル名の後ろに
*
(アスタリスク) を付ける。 |
|
すべてのサブディレクトリを再帰的にリストする。 各ディレクトリおよびサブディレクトリを下って,ディレクトリ・ツリー全体のリストを提供する。 |
例 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] $
このディレクトリに含まれるファイルが占める 512 バイト・ブロック数。 [例に戻る]
101
--
ファイルのバイト数。
[例に戻る]
larry
-- ファイルの所有者のユーザ名。
実際には,larry
の代りにユーザのユーザ名が表示されます。
[例に戻る]
system
--
ファイルが属するグループ。
実際には,system
の代りにユーザが所属するグループ名が表示されます。
[例に戻る]
file3
-- ファイルまたはディレクトリの名前。
[例に戻る]
Jun 5 10:06
--
ファイルが作成された日時。
あるいは最後に修正された日時。
日時の表示方法は,ユーザの現在のロケールに依存します。 現在から 6 ヶ月以前の日付の場合は,4 桁の西暦が表示されます。 [例に戻る]
drwxr-xr-x
--
各ファイルまたはディレクトリに設定されているファイル・タイプと許可。
このフィールドの最初の文字はファイル・タイプを示します。:
-
(ハイフン) 通常ファイル
b
ブロック型特殊ファイル
c
文字型特殊ファイル
d
ディレクトリ
l
シンボリック・リンク
p
パイプ型特殊ファイル (先入れ先出し)
s
ローカル・ソケット
残りの文字列は,所有者,グループ,およびその他のユーザに対して,読み取り許可 (r
),
書き込み許可 (w
),実行許可 (x
) がそれぞれ設定されているかどうかを示します。
(-
) が表示された場合,対応する許可が設定されていません。
Tru64 UNIX オペレーティング・システムでは,ls
コマンドには上記以外にもフラグが用意されています。
ls
コマンド・フラグについての詳細は,
ls
(1)3.2 ファイル内容の表示
テキスト・エディタを使用して,システムに格納されているテキスト・ファイルの内容を参照することができます。
ファイル内容を参照するだけで変更を行わない場合は,いくつかのオペレーティング・システムのコマンドを使用することができます。
以降の各項で,これらのコマンドについて説明します。
3.2.1 フォーマッティングを伴わないファイル表示 (pg, more, cat コマンド)
次のコマンドは,内容の体裁を制御する特殊文字を一切付け加えずに,ファイルをそのまま表示します。
pg
cat
more
page
フォーマット処理を行ってファイルを表示するコマンドについては,3.2.2 項を参照してください。
フォーマット処理を伴わないファイル表示コマンドの構文は次のとおりです。
command filename
変数
command
には
pg
,more
,page
,または
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
コマンドはポーズを置き,それまでにファイルの何パーセントを表示したかを知らせるメッセージを表示します。
この時点で,次のいずれかの操作を行うことができます。
ファイルの残りを 1 ページずつ表示させる場合は,スペース・バーを押す。
1 行ずつ表示させる場合は,Return キーを押す。
ファイルの表示を中止する場合は,q
をタイプする。
page
コマンドは
more
コマンドとほぼ同様ですが,ファイルの行数が多くて 1 ページに収まらない場合,page
コマンドは画面をクリアして画面の最上部から表示を始めます。
ご使用のオペレーティング・システム環境や表示デバイスによっては,この違いはほとんど認識されない場合もあります。
cat
コマンドを使用してテキストを表示することもできます。
ただし,このコマンドはファイルのページ付けを行わないため,1 画面よりも長いファイルを表示すると一挙にファイルの最後まで表示され,内容を読むことができません。
このような場合は,Ctrl/S を押して表示を停止させてください。
こうすることにより,テキストを読むことができます。
ファイルの残りの部分を表示させたいときは,Ctrl/Q を押してください。
長いファイルを表示させる場合は,cat
コマンドではなく
pg
コマンド,more
コマンド,または
page
コマンドを使用するのがよいでしょう。
pg
,more
,page
,および
cat
コマンドには,それぞれオプションが用意されています。
詳細については,リファレンス・ページの
cat
(1)more
(1)page
(1)pg
(1)3.2.2 フォーマッティングを伴うファイル表示 (pr コマンド)
フォーマッティングとは,ファイルの内容を表示または印刷する際に,見た目を制御するための処理です。
pr
コマンドは,簡潔で便利なスタイルにファイルをフォーマットします。
注意
pr
コマンドはテキスト・フォーマッティング情報は解釈しないため,ファイル内にこれらのマクロがある場合には注意してください。 このコマンドはnroff
やtroff
のようにファイルをフォーマットするわけではありません。 ワード・プロセッサやデスクトップ・パブリッシング・ソフトウェアで作成されたファイルは,pr
コマンドでは認識されません。
簡単なフォーマット処理を行ってファイルを表示する場合は,次の構文で
pr
コマンドを実行します。
pr
filename
filename
変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。
使用するコマンド形式は,ファイルが現在のディレクトリとの関係でどこに位置しているかによって変わります。
パターン照合文字を使用してファイルを指定することもできます。
パターン照合については第 2 章を参照してください。
filename
をダッシュ (-) として指定することができます。
この場合,pr
コマンドは,ファイルの終了を示すマーク
(通常は Ctrl/D) で入力を終了するまで,端末からの入力を読み取ります。
pr
コマンドをオプションなしで実行すると,次の処理を行います。
ファイルの内容を各ページに分割する。
各ページの上部に見出しとして,日時,ページ番号,およびファイル名を表示する。
ページの終わりに 5 行のブランク行を追加する。
pr
コマンドを使用してファイルを表示すると,内容が一挙にスクロールして読むことができないかもしれません。
その場合には,pr
コマンドと
more
コマンドを併用することによって,フォーマッティングされたファイルを読むことができます。
more
コマンドは,1 画面分のテキストを表示した時点でポーズを置くようシステムに指示します。
たとえば,長いファイル
report
を表示し,画面が一杯になった時点で停止するように指示する場合は,次のコマンドを入力します。
$ pr report | more $
システムが最初の 1 画面分のテキストを表示して停止したら,スペース・バーを押して次の画面を表示します。
上記のコマンドは,パイプ記号 (|) を使用して,pr
コマンドからの出力を
more
コマンドへの入力として使用しています。
パイプについての詳細は,7.4.2 項を参照してください。
pr
コマンドには,より美しいフォーマットでファイルを表示するためのフラグが用意されています。
表 3-2
に,pr
で使用できるいくつかのフラグを示します。
フラグ | 機能 |
+ page |
page に指定したページからフォーマットを開始する。 このフラグを省略した場合,1 ページ目からフォーマットを開始する。 たとえば, |
-column | 各ページを
column
に指定した数のカラムでフォーマットする。
このフラグを省略した場合, たとえば, |
-m |
指定されたすべてのファイルを,各ファイル 1 カラムで同時に横に並べてフォーマットする。 たとえば, |
-d |
出力をダブル・スペースでフォーマットする。 このフラグを省略した場合,出力はシングル・スペースでフォーマットされる。 たとえば, |
-f |
新しいページに進む場合に改ページ文字を使用する。
このフラグを省略した場合, |
-F |
新しいページに進む場合に改ページ文字を使用する。
このフラグを省略した場合, |
-w num |
行の長さを num に指定したカラム数に設定する。 このフラグを省略した場合,行の長さは 72 カラムになる。 たとえば, |
-o num |
num に指定したカラム位置だけ各行をオフセット (インデント) する。 このフラグを省略した場合,オフセットは 0 カラム位置になる。 たとえば, |
-l num |
ページ長を num に指定した値に設定する。 このフラグを省略した場合,ページ長は 66 行になる。 たとえば, |
-h string |
各ページの上部に表示されるヘッダ (タイトル) として,ファイル名ではなくこのフラグの後に指定した文字列を使用する。
string
がブランクまたは特殊文字を含んでいる場合は,文字列を一重引用符 ( たとえば, |
-t |
ヘッダおよび各ページ末のブランク行をフォーマットしないことを指定する。 たとえば, |
-s char |
各カラムをブランク・スペースではなく文字 char で区切る。 特殊文字を使用する場合は一重引用符で囲む。 たとえば, |
pr
コマンドには,同時に複数のフラグを指定することができます。
次の例では,下記のような形式で
file1
をフォーマットするように
pr
コマンドに指示しています。
ダブル・スペース (-d
)
タイトルをファイル名ではなく "My Novel" とする (-h
)。
$ 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
など),管理者の名前であったり,あるいはその他の説明的な名称であったりします。
システムで利用可能なプリンタの種類が複数ある場合は,それらの機能を示す
slide
や
color
などの名前を割り当てる場合もあります。
ご使用のシステムで利用できるプリンタの構成については,システム管理者にお問い合わせください。
システムに複数のプリンタが接続されている場合は,そのうちの 1 つが省略時のプリンタとして設定されています。
特定の
printername
が入力されない場合,プリント要求はその省略時のプリンタに送られます。
システムで利用できるプリンタの名前を調べるには,lpstat
コマンドを使用します。
例 3-4に示すのは,1 つあるいは複数のファイルを
lp0
というプリンタで印刷する場合の例です。
例 3-4: lpr コマンドの使用
$ lpr -Plp0 file1 [1] $ lpr -Plp0 file2 file3 [2] $
最初の
lpr
コマンドを実行すると,file1
を
lp0
プリンタに送り,$ プロンプトを表示します。
[例に戻る]
2 番目の
lpr
コマンドを実行すると,file2
ファイルおよび
file3
ファイルを同じプリント・キューに送り,ファイルの印刷が終わる前にシェル・プロンプトを表示します。
[例に戻る]
lpr
コマンドにフラグを指定することによって,ファイルの印刷方法を制御することができます。
lpr
コマンドのフラグは次の形式で使用します。
lpr
flag filename
lpr
コマンドで使用できるフラグのいくつかを表 3-3
に示します。
lpr
コマンド・フラグについての完全な説明は,
lpr
(1)
フラグ | 機能 |
-# num |
ファイルを
num
部印刷する。
このフラグを省略した場合,lpr
はファイルを 1 部印刷する。
たとえば,lpr -#2 file1
というコマンドは,file1
ファイルを 2 部印刷する。 |
-w num |
行の長さを
num
カラムに設定する。
このフラグを省略した場合,行の長さは 72 カラムになる。
たとえば,lpr -w40 file1
というコマンドは,file1
ファイルを行の長さ 40 カラムで印刷する。 |
-i num |
各行を
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 種類があります。
同じファイル・システム内のファイルのリンクのみ可能です。 ハード・リンクを作成する場合は,1 つのファイルに対して別のファイル名を付与します。 オリジナルのファイル名を含めて,ファイルのハード・リンク名はすべて対等です。 一方のファイル名を「本当の名前」,他方を「単なるリンク」と考えるのは正しくありません。
ファイルとディレクトリのどちらでもリンクすることができます。 さらに,異なるファイル・システム間でもファイルあるいはディレクトリのどちらでもリンクすることができます。 シンボリック・リンクは,別のファイルまたは別のディレクトリへのポインタを含む別個のファイルです。 このポインタはデスティネーション・ファイルまたはディレクトリへのパス名です。 オリジナルのファイル名のみがそのファイルまたはディレクトリの本当の名前です。 ハード・リンクとは異なり,ソフト・リンクは「単なるリンク」です。
ハード・リンクでもソフト・リンクでも,ある名前で呼び出したファイルに対して変更を加えた後,別の名前で同じファイルを呼び出すと,変更した内容が反映されています。
ハード・リンクとソフト・リンクとの大きな違いは,ファイルを削除する際に明らかになります。
複数の名前がハード・リンクされているファイルは,それらの名前がすべて削除されるまで残ります。
複数の名前がソフト・リンクされているファイルは,オリジナルの名前が削除されると消滅します。
その場合,残っているソフト・リンクは実在しないファイルを指すことになります。
リンクの削除については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
ファイルの内容が同じであることを確認しています。
$ 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] $
2 つのファイルの間にハード・リンクを作成します。 [例に戻る]
file3
のテキストを表示します。
[例に戻る]
次に
checkfile
のテキストを表示します。
[例に戻る]
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 番目のフィールド,つまりユーザ名の左に表示される数字は,そのファイル通し番号へのリンク数を表します。
file3
と
checkfile
が 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 $
この節では,ローカル・システムでファイルをコピーする方法について説明します。 リモート・システムとの間でファイルをコピーする方法については, 第 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 $
別のディレクトリへファイルをコピーする場合は,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
を指定していません。
コピー先ファイル名を省略すると,元のファイル名でファイルがコピーされます。
パターン照合文字を使用してファイルをコピーすることもできます。
たとえば,file1
,file2
および
file3
ファイルを
reports
ディレクトリへコピーする場合は,次のように入力します。
$ cp file* reports $
ファイルを別のディレクトリにコピーする際に,コピー先ファイル名を変更したい場合は,次の構文を使用します。
cp
source distnation_directory/filename
source 変数にはコピー元ファイル名を,distnation_directory 変数にはコピー先ディレクトリ名を,filename には新ファイル名を指定します。
次の例では,file3
ファイルを新しいファイル名
notes
で
reports
ディレクトリにコピーし,
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
コマンドにより
file2x
のファイル名が
newfile
に変更されている。
元のファイル (file2x
) のファイル通し番号と
newfile
ファイルのファイル通し番号は同じ 1088 である。
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 $
file1
,file2
,file3
の各ファイルをログイン・ディレクトリにコピーする場合は,次のように入力します。
次の例で使用しているドット (.) は現在のディレクトリを指定します。
この例では,現在のディレクトリはログイン・ディレクトリです。
$ cp reports/file* . $
ls
コマンドを実行すると,ファイルがログイン・ディレクトリに戻っていることが確認できます。
$ ls file1 file2 file3 newfile project reports $
ここで
reports
ディレクトリの内容をリストすると,file1
,file2
,および
file3
の各ファイルが
reports
ディレクトリにあることが確認できます。
$ ls reports file1 file2 file3 newfile project reports $
diff
コマンドを使用すると,2 つのテキスト・ファイルの内容を比較することができます。
diff
コマンドは,多少違いがあると予想される 2 つのファイルの内容の違いを正確に示したい場合に使用します。
diff
コマンドの構文は次のとおりです。
diff
file1 file2
diff
コマンドは,2 つのファイルを 1 行ずつ走査します。
異なる行が見つかると,次の情報を出力します。
違いのある行番号
違いの種類
記述の追加であるか,削除であるか,それとも行の変更であるかを明示します。
違いが追加である場合は,次の形式で情報を表示をします。
l[,l] a r[,r]
l
は
file1
の行番号であり,r
は
file2
の行番号です。
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
コマンドを使用して,jan15mtg
と
jan22mtg
の内容を比較することができます。
この場合,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
filename
filename 変数には,ファイル名,ファイルの相対パス名,ファイルの完全パス名,あるいはスペースで区切ったファイル名リストを指定します。 また,パターン照合文字を使用してファイルを指定することもできます。 パターン照合文字については第 2 章を参照してください。
sort
コマンドの使用例としては,名前のリストをソートして,現在のロケールで定義されている照合順に並べることなどがあります。
たとえば,list1
,list2
,および
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 項を参照してください。
rm
コマンドとともにパターン照合文字を使用して,複数のファイルを同時に削除することができます。
パターン照合文字については第 2 章を参照してください。
たとえば,現在のディレクトリに次のファイルが含まれているとします。
receivable.jun
payable.jun
payroll.jun
expenses.jun
rm *.jun
コマンドを使用すると,これらの 4 つのファイルをすべて削除することができます。
注意
パターン照合文字
*
を使用する場合は十分に注意してください。 たとえば,通常のユーザの場合,rm *
コマンドを入力すると,ドット (.) で始まるファイル名を持つファイルを除いて,現在のディレクトリにあるすべてのファイルが削除されます。ファイル名の始めまたは終わりに使用するパターン照合文字
*
には,特に注意してください。rm
*name の代わりに誤ってrm *
name と入力すると, name で終わるファイルだけでなく,現在のディレクトリにあるすべてのファイルを削除します。
rm
コマンドに-i
フラグを指定すると,ファイルを削除する前に,確認のためのプロンプトを表示します。
パターン照合の例を実行するには,ディレクトリにファイル
record1
,record2
,record3
,record4
,record5
,および
record6
が入っていなければなりません。
次のように
touch
コマンドを使用して,ログイン・ディレクトリにこれらのファイルを作成します。
$ touch record1 record2 record3 record4 record5 record6 $
touch
コマンドは,上の例のように空のファイルを作成したい場合に便利です。
touch
コマンドについての詳細は,
touch
(1)
ファイル名が 1 文字だけ異なるファイルを削除する場合は,rm
コマンドでパターン照合文字
?
を使用することもできます。
たとえば,現在のディレクトリに
record1
,record2
,record3
,および
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 章を参照してください。
ファイルに含まれている情報がどのような種類のデータであるかをファイルの内容を表示しないで調べる場合は,file
コマンドを使用します。
file
コマンドは,ファイルが次のどのタイプであるかを表示します。
テキスト・ファイル
ディレクトリ
FIFO (パイプ) 型特殊ファイル
ブロック型特殊ファイル
文字型特殊ファイル
C または FORTRAN プログラミング言語のソース・コード
実行可能 (バイナリ) ファイル
ar
フォーマットのアーカイブ・ファイル
cpio
または拡張
tar
フォーマットのアーカイブ・ファイル
zip フォーマットのアーカイブ・ファイル
gzip
フォーマットの圧縮データ・ファイル
コマンド・テキストのファイル (シェル・スクリプト)
.voc
,.iff
,または
.wav
フォーマットのオーディオ・ファイル
TIFF
,GIF
,MPEG
,または
JPEG
フォーマットのイメージ・ファイル
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 $
この例では,file1
,file2
,および
file3
を英語のテキスト・ファイル,
project
と
reports
をディレクトリ,record1
と
record6
を空ファイルと識別しています。
file
コマンドについての詳細は,
file
(1)