UNIXの操作/UNIXでのファイル・ディレクトリ操作/コマンドの一覧と前提知識

ここではファイル・ディレクトリ操作に必要な知識を説明します.ワイルドカードによる指定やパイプ・リダイレクションの使い方はコマンドを理解していないと難しい部分ですので,まずファイル・ディレクトリの指定まで読んだあと,次にあげる表の通りに読み進めてから戻っても構いません.


表: コマンドの一覧
目的 コマンド ページ
ファイル・ディレクトリの一覧表示 ls 3.2
カレントディレクトリへの絶対パスを表示 pwd 3.3
カレントディレクトリの変更 cd 3.4
新しいディレクトリの作成 mkdir 3.5
ファイル・ディレクトリの削除 rm rmdir 3.6
ファイル・ディレクトリのコピー cp 3.8
ファイル・ディレクトリの移動 mv 3.9
ファイル・ディレクトリへのリンク ln 3.10
ファイルの内容を表示 cat 3.11
ファイルの内容を表示(2) more less 3.12
ファイル・ディレクトリの検索 find 3.13
特定の用語を検索 grep 3.14

3.1.1 引数でのファイル・ディレクトリの指定

コマンドの引数としてファイル・ディレクトリを指定する場合は絶対パス,相対パスのどちらでもかまいません.パスを省略した場合や,`./ ファイル・ディレクトリ名'とした場合にはカレントディレクトリのファイルやディレクトリを表します. `../' は1つ上のディレクトリを表します.

3.1.2 ファイル・ディレクトリの表示

あるディレクトリに,どのようなファイル・ディレクトリがあるかを知るためには,lsコマンドを使用します.ファイル・ディレクトリの情報は他のさまざまなコマンドを利用する際に必要となります. lsコマンドの詳しい使い方は,3.2を参照してください.

次にlsコマンドのもっとも簡単な使い方を示します.

%ls <RET>
Mail            Wnn             report.tex

lsコマンドを実行すると,現在位置するディレクトリ(カレントディレクトリ)にあるファイル・ディレクトリ名が一覧表示されます.


3.1.3 ワイルドカード


例えば,ファイル名に`.log'が含まれているファイルをすべて消去するような場合,ワイルドカードによる置換機能を使うと効率的に行えます.

``ワイルドカード''とは任意の文字列や任意の1文字を指定するための特殊な文字のことです.シェルにはワイルドカードを展開して,入力されたファイル名を置換する機能があります.ワイルドカードを利用することによって,複数のファイルを効率的に操作できます.

0文字以上の任意の文字列を表すワイルドカード *

アスタリスク`*'は0文字以上の任意の文字列を表すワイルドカードです.例えば,`*.tex'はファイル名が`.tex'で終わるすべてのファイルを意味します.その際,シェルは`*'を0文字の文字列としても解釈します.そのため,`abc*'と入力すると,`abc'という名前のファイルも操作の対象に含まれます.ただし,`*'が先頭で用いられた場合には,ファイル名が`.'ではじまるファイルは含まれません.


%ls -a <RET>
./   ../     .mathmatics     economics.tex    micro.c    .statistics
macro.tex       micro.tex
%ls *.tex <RET>
economics.tex macro.tex micro.tex
%ls m* <RET>
macro.tex micro.c micro.tex
%rm * <RET>rmコマンドでファイルを削除する
%ls -a <RET>
./ ../ .mathmatics .statistics
% _


任意の1文字を表すワイルドカード ?

クエスチョンマーク(`?')は任意の1文字を表すワイルドカードです.この1文字はアルファベットでも数字でもかまいませんが,`*'と異なり必ず1文字存在していなければ一致しません.例えば,`m?cro.tex'という指定には,`mcro.tex'は含まれません.

%ls <RET>
economics.tex   macro.tex   micro.c   micro.tex   mcro.tex
%ls m?cro.tex <RET>
macro.tex       micro.tex
% _

ワイルドカードを用いたファイル名をつけるとそのファイルの操作が困難になるので,ファイル名にはワイルドカードを用いないようにしてください.

ワイルドカードは,多くのファイルを同時に操作する際に便利ですが,一方では操作を間違えてしまった場合の影響も大きいので注意する必要があります.特にファイルを消去するような場合にはコマンドを実行する前によく確認してください.


3.1.4 入出力のリダイレクションとパイプ

通常,コマンドはキーボード(標準入力)から入力され,結果は画面(標準出力)に出力されます.しかし,コマンドの実行結果を用いて次の処理をするときに,実行結果をファイルや次のコマンドに出力できれば効率的に作業を行えます.シェルは``リダイレクション''と``パイプ''と呼ばれるコマンドの入力や出力を切り替える機能をもっています.

リダイレクション

リダイレクションは,ファイルの内容を標準入力として使用したり,標準出力の内容をファイルに書き込むための機能です.リダイレクションを使うことによって,ファイルの内容をコマンドに入力したり,コマンドの実行結果をファイルに書き込めます.リダイレクションには,`<'や`>'を用います.

  • リダイレクションを用いた入力

    ファイルからデータを読み込んでコマンドに実行させるには,`<'を用います.`<'の左側に実行するコマンドを,右側にそのコマンドに入力する内容を書いた,ファイルの名前を指定します.

    % [実行するコマンド] < [ファイル名]<RET>
  • リダイレクションを用いた出力

    コマンドの結果をファイルに出力するには`>'を用います.`>'を用いたリダイレクションには次の3つの書式があります.

    % [コマンド] >  [出力するファイル名]<RET>
    % [コマンド] >> [出力するファイル名]<RET>
    % [コマンド] >& [出力するファイル名]<RET>

    1つめの`>'はコマンドの処理結果をファイルに上書きします.そのため,同じ名前のファイル名が存在する場合には,以前の内容は消去されてしまいます.それに対して,2つめの`>>'はコマンドの処理結果を,指定したファイルの末尾に書き加えます.3つめの`>&'はコマンドの標準出力に加えて,標準エラー出力をファイルに上書きします.これはエラーメッセージなどをファイルに出力する場合などに用 いますが,あまり利用することはありません.

    次の例では,lsコマンドの出力結果を`result'というファイルに書き込んでいます.なお`>'を用いた場合,コマンドの実行結果はファイルに出力されます.

    %ls <RET>lsコマンドを実行してカレントディレクトリのファイルを表示
    report.tex proposal.gif
    %ls > result<RET>lsコマンドの結果を`result'というファイルに格納
    %more result<RET>`result'というファイルの中身を読む
    report.tex
    proposal.gif
    % _

パイプ

パイプは,ある1つのコマンドの標準出力を次のコマンドの標準入力として使用する際に用います.

次の例では,`ls -l'の標準出力を次のlessコマンドの標準入力として用いています.こうすることで,lsコマンドの出力が1画面以上の長さにわたる場合でも,1画面ごとに止めて見られます.

%ls -l | less<RET>

パイプは2つ以上のコマンドをつなぎ合わせられます.なお,パイプの後に`&'をつけると,コマンドの標準出力だけでなく標準エラー出力も次のコマンドの入力として使えます(表3.1).

% [コマンド1] | [コマンド2]<RET>


表 3.1: パイプの種類
記号 意味
| 標準出力のパイプ
|& 標準出力と標準エラー出力のパイプ


コマンドの入力と出力先に同じファイル名を指定してはいけません.同じファイル名を指定するとファイルの内容が失われてしまいます.出力リダイレクトによる 新規ファイルの作成を防止するときには,あらかじめシェルで`set noclobber'と入力しておきます.