next up previous contents
Next: 7 マニュアルページの閲覧 Up: UNIX 基礎演習 B 組 資料 Previous: 5 入力の終わりとコマンドの強制終了

Subsections


6 ディレクトリ

Windows におけるフォルダに相当するものを, UNIX ではディレクトリ (directory)またはディレクトリファイル (directory file)と呼びます 22。ディレクトリはファイル を格納する器です。 ディレクトリを利用することで,様々なファイルを,その用途別に分類して整理 することができます。

ディレクトリファイルという名称から予想できるとおり,ディレクトリもファイ ルの一種です。これまでに扱ってきたファイルを「通常のファイル」と呼んで, ディレクトリではないことを明示することがあります。

6.1 ディレクトリ操作

まずディレクトリの作成や削除,ディレクトリ名変更の方法を学びましょう。 ファイルと同じくディレクトリにも名前(ディレクトリ名)が必要です。 ディレクトリ名の付け方はファイル名と同様です。

6.1.1 ディレクトリの作成 -- mkdir

ディレクトリを作成するには mkdir (make directories) コマンドを使います。 引数には作成するディレクトリの名前を指定します。

  1. tmpdir という名前のディレクトリを作成してください。
    mkdir tmpdir

  2. ディレクトリ tmpdir ができたかどうか確認します。

    ディレクトリもファイルの一種なので,ls コマンドで名前を表示できま す。ls を実行してください。

  3. 通常のファイルとディレクトリが同じように表示されるのは不便ですね。 両者を区別したいときには,ls にオプション -F を指定します。
    ls -F

    ディレクトリの場合にはディレクトリ名の後に / が付加されます。ただ し,この / はディレクトリであることを表す印であって,ディレクトリ 名の一部ではありません。

  4. ディレクトリに対して cat コマンドを実行したらどうなるでしょう。 cat tmpdir を試してみましょう。

6.1.2 ディレクトリ名の変更とディレクトリ削除 -- mv, rmdir

ディレクトリ名の変更には,ファイル名変更と同様に mv を使います。 ディレクトリの削除は rmdir (remove directories) です。

  1. mv tmpdir mydir を実行して,tmpdir の名前を mydir に変更し てください。 ls コマンドで結果を確認してください。

  2. mydir を削除します。rmdir mydir を実行してください。 結果を確認してください。

6.2 ホームディレクトリとカレントディレクトリ

6.2.1 ホームディレクトリ

UNIX で利用できるファイルやディレクトリは,必ずいずれかのディレクトリ内 にあります23。 これまでに幾つかのファイルを作成しましたが,それらはユーザー毎に予め用意 されたディレクトリ内に作成していたのです。そのディレクトリをユーザーの ホームディレクトリ (home directory) と呼び,記号 ~ で表す ことがあります。


6.2.2 カレントディレクトリ

コマンド操作でファイルやディレクトリを扱うときに必要な概念として,カレントディレクトリ (current directory; current は「現在の」,「現行 の」という意味) 24 があります。カレントディレクトリは文 字通り,現在使っているディレクトリを意味する用語です。

例えば,ls を引数無しで実行して表示されるのは,カレントディレクトリに存 在するファイルの名前です。また,cp や mkdir 等のコマンドに ファイル名やディレクトリ名を与えると,コマンドが処理するのは カレントディレクトリ内のファイルやディレクトリとなります25

ユーザーがログインしたときのカレントディレクトリはホームディレクトリです。 これまで,ファイルやディレクトリがホームディレクトリに作成されたのはその ためです。

6.3 カレントディレクトリの変更 -- cd

カレントディレクトリを変更すれば, ホームディレクトリ (~) 以外のディレクトリに存在する ファイルやディレクトリを操作できます。

カレントディレクトリを変更するコマンドは cd (change directory) です。cd の引数には変更先のディレクトリを指定します。引数を指定しなければ,ホーム ディレクトリがカレントディレクトリになります(ホームディレクトリに戻れま す)。


\framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{tmp}-+- \framebox[4em]{tmpsub}
    |            |
    |            +-location
    +-location
    

以下では,上の図に示すように,ホームディレクトリ(~)に通常のファイ ル location とディレクトリ tmp を作り,さらにディレクトリ tmp に通常の ファイル location とディレクトリ tmpsub を作ります。次の点に留意してお きましょう。

それでは,自分が今どのディレクトリにいるのか(カレントディレクトリがどこ なのか)を常に意識しながら,次の操作をしてください。

  1. 通常のファイル location をホームディレクトリに作ります。 location の中身は Here is my home とします。
    echo Here is my home > location
    正しくできたか,ls と cat で確認してください。

  2. mkdir コマンドを使って,ディレクトリ tmp をホームディレクトリ に作成します。
    mkdir tmp
    ls コマンドを使って結果を確認してください。

  3. カレントディレクトリをホームディレクトリから tmp に変更します。 (今後,単に「tmp に移動する」のように表現することがあります。)
    cd tmp
    何も表示されなければ成功です。

  4. ディレクトリ tmp の中のファイル名一覧を得るために ls を実行 してください。

    カレントディレクトリである tmp には,まだ何も作っていませんから, 何も表示されません。

  5. echo コマンドを使って,ディレクトリ tmp の中に location という通 常のファイルを作ってください。ファイルの中身は Here is tmp としま す。正しくできたか確認してください。

  6. mkdir コマンドを使って,ディレクトリ tmp の中に tmpsub というディ レクトリを作ってください。結果を確認してください。

  7. ホームディレクトリに戻るために,引数無しで cd を実行してく ださい。

    ちゃんとホームに帰れましたか? ファイル location の中身を確認してください。

  8. rmdir tmp を試してください。

    ディレクトリ tmp を削除できませんね。rmdir は中身が空のディレクト リを削除するコマンドだからです。

6.4 カレントディレクトリと親ディレクトリの操作

前節で作成した,ホームディレクトリ (~) 内のディレクトリ/ファイルの 構造を再掲します。

\framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{tmp}-+- \framebox[4em]{tmpsub}
    |            |
    |            +-location  (Here is tmp)
    |
    +-location  (Here is my home)
    

6.4.1 親ディレクトリと子ディレクトリ

あるディレクトリの一つ上位のディレクトリを 親ディレクトリ (parent directory)と呼びます。 上の図では,tmpsub の親ディレクトリは tmp で あり,tmp の親ディレクトリは ~ です。 逆に,tmpsub を tmp の子ディレクトリ (child directory)またはサブディレクト リ (subdirectory)と呼びます。tmp は ~ の子ディレクトリです。

6.4.2 カレントディレクトリと親ディレクトリの指定法 -- ``.'' と ``..''

カレントディレクトリの子ディレクトリは「カレントディレクトリに存在するディ レクトリ」ですので,第 6.2.2 節で述べたように,ディレクトリ 名をそのままコマンドの引数として指定することができます。 一方,カレントディレクトリ自身や「カレントディレクトリの親ディレクトリ」 をコマンドの引数にしたければ,次の記号を使います。

. (ドット)
: カレントディレクトリ自身
.. (ドット二つ)
: カレンディレクトリの親ディレクトリ

以下を順に実行して,このことを確認しましょう。

  1. ホームディレクトリで ls -F を実行して,カレントディレクトリ に,ディレクトリ tmp があることを確認しましょう。

  2. ls コマンドの引数にはディレクトリを指定することができます。 ls tmp を実行してください。 ls -F tmp も試してください。

    ls の引数にディレクトリを指定すると,ls はそのディレクトリ内のファ イル一覧を表示します26

  3. ls の引数として,カレントディレクトリを明示してみます。 ls .(ドット) と ls の結果と比べてください。

    ちゃんと同じになりますね。

  4. カレントディレクトリを上図の tmpsub に変更してください。

    tmpsub はカレントディレクトリに存在するディレクトリではないので, cd tmpsub だけではうまくいきません。まず tmp に行ってから, tmpsub に行きましょう。

  5. tmpsub に存在するファイルを ls コマンドで調べましょう。

    tmpsub には何もありませんね。

  6. ls -a を実行しましょう。

    -a は . で始まるものを含めてファイル名を表示する ls のオプション だったことを思い出してください。

  7. ls に -F と -a の二つのオプションを付けて実行してみましょう。ls に複数のオプションを付けるときには,それらを -aF のようにまとめて 書くことができます。
    ls -aF
    カレントディレクトリ自身とその親ディレクトリの存在が確認できまし たか。

  8. カレントディレクトリを tmp に変更します。 まず,cd tmp を試しましょう。

    コマンドの引数には,カレントディレクトリに存在するファイル/ディ レクトリ名を指定するのでしたから,これではうまくいきません。

    そこで,先ほどの .. を使います。

    cd ..

    エラーメッセージは出ませんね。

  9. カレントディレクトリの内容を ls -aF で表示してみてください。 location というファイルが存在するはずですから,ファイルの中を見て ください。

    今はちゃんと tmp にいますね。

    また,ls -aF の表示では .. も現われました。さらに親ディレクトリ (ホームディレクトリ) に移動するには .. を使うことができます。

    では .. を使ってホームディレクトリに戻りましょう。

6.5 ディレクトリ間のファイルの移動と複写

4.4節 (p. [*]) では,mv と cp の引数に 二つのファイル名を与えてファイル名の変更とファイルの複写を行いましたが, これらの最後の引数に既存のディレクトリ名 directory を指定すると,mv と cp は次のとおり動作します。

mv file directory filedirectory に移動する
cp file directory filedirectory に,同じ名前のファイルとして複写する
mv の場合,file にディレクトリ名を与えれば, ディレクトリを別のディレクトリに移動することもできます。

以下を試しましょう。

  1. 準備
    1. 念のため,cd コマンドを引数無しで実行して,カレントディレクトリを ホームディレクトリにしておきましょう。

    2. ホームディレクトリに通常のファイル now はありますか? 中身はどうなっていますか?

      ファイル now が無ければ date > now で作成してください。

    3. ディレクトリ tmp がホームディレクトリに存在することを ls -F で確認してください。

  2. ファイルの移動

    1. ファイル now をディレクトリ tmp に移動します。 mv now tmp を実行してください。

    2. ls を実行して,ホームディレクトリから now が無くなったこと を確認しましょう。

    3. ls tmp を実行して,ディレクトリ tmp に now が存在することを 確認しましょう。

    4. カレントディレクトリを tmp に変更してから,ファイル now の内容を 見てみましょう。now はちゃんと移動できましたね。

  3. ファイルの複写
    1. ディレクトリ tmp のファイル now を親ディレクトリ(ホームディレク トリ)に複写します。 cp now .. を実行してください。

    2. ls を実行して, カレントディレクトリ (tmp) に now が残っていることを確認しましょう。

    3. ls .. を実行して,親ディレクトリ (ホームディレクトリ) にファ イル now ができ上がったことを確認しましょう。

    4. カレントディレクトリ (tmp) のファイル now の内容を見てみましょう。

    5. カレントディレクトリを親ディレクトリ (ホームディレクトリ) に変更 して,now の内容を見てみましょう。

      ディレクトリ tmp のファイル now は,ホームディレクトリに複写され ましたね。

以上,ファイルやディレクトリの最も基本的な操作法である,カレントディレク トリに存在するファイルの操作や,カレントディレクトリの親および子ディレク トリへのファイル複写や移動の方法について学びました。カレントディレクトリ がどこであるかに拘らず,任意のディレクトリに存在するファイルを操作するこ ともできますが,その方法については後の回で学習します。

6.6 ファイル/ディレクトリ操作コマンドのまとめ(主なもの)

コマンド 機能
ls [directory] カレントディレクトリ(または directory)に存在するファイルの 名前を表示
ls -F [directory] ファイルの種類を表す記号を付加して,カレントディレクトリ(または directory)に存在するファイルの名前を表示
ls -a [directory] ドットで始まるファイルを含めて,カレントディレクトリ(または directory)に存在するファイルの名前を表示
cd [directory] カレントディレクトリを directory に変更 (directory を省略した場合はホームディレクトリに変更)
mkdir directory directory を作成
rmdir directory 空のディレクトリ directory を削除
cp file1 file2 file1file2 に複写
cp file directory filedirectory に複写
mv file1 file2 file1 の名前を file2 に変更
mv directory1 directory2 directory1 の名前を directory2 に変更
mv file directory filedirectory に移動
rm file file を削除


6.7 問題

  1. ホームディレクトリに存在する通常のファイルのうち,不要なファイル を削除してください。ただし,. (ドット) で始まるファイルは削 除しないこと

  2. ホームディレクトリに存在するディレクトリ tmp の名前を junk に変更 してください。

  3. ディレクトリ junk と,その中のすべてのファイルやディレクトリを削 除してください。

  4. 次の図に示すディレクトリやファイルを ホームディレクトリ(~)に作成してください。 ファイル kokugo の内容は aiueo とし,ファイル sansu の内容は 1+1=2 としておきましょう。
    \framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{unix}-+- kokugo
                     |
                     +- sansu
                     |
                     +- \framebox[4em]{sonota}

  5. 次の図に示すとおりに,同じ中身の kokugo を cp コマンドで作って ください。
    \framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{unix}-+- kokugo
                     |
                     +- sansu
                     |
                     +- \framebox[4em]{sonota}--- kokugo

  6. さらに次のようにしてください。
    \framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{unix}-+- \framebox[4em]{rensyu}-+- kokugo
                                  |
                                  +- sansu


next up previous contents
Next: 7 マニュアルページの閲覧 Up: UNIX 基礎演習 B 組 資料 Previous: 5 入力の終わりとコマンドの強制終了

平成17年12月7日