Windows におけるフォルダに相当するものを, UNIX ではディレクトリ (directory)またはディレクトリファイル (directory file)と呼びます 。 ディレクトリはファイルを格納する器です。 ディレクトリを利用することで,様々なファイルを,その用途別に分類して整理 することができます。
ディレクトリファイルという名称から予想できるとおり, ディレクトリもファイルの一種です。 これまでに扱ってきたファイルを「通常のファイル」と呼んで, ディレクトリではないことを明示することがあります。
mkdir tmpdir
ディレクトリもファイルの一種なので,ls コマンドで名前を表示できま す。ls を実行してください。
ls -F
ディレクトリの場合にはディレクトリ名の後に / が付加されます。ただ し,この / はディレクトリであることを表す印であって,ディレクトリ 名の一部ではありません。
cat コマンドは,通常のファイルの内容を表示するコマンドであること を思い出しましょう。
UNIX で利用できるファイルやディレクトリは,必ずいずれかのディレクトリ内
にあります2。
これまでに幾つかのファイルを作成しましたが,それらはユーザー毎に予め用意
されたディレクトリ内に作成していたのです。そのディレクトリをユーザーの
ホームディレクトリ (home directory) と呼びます。ホームディレクト
リを記号 ~
で表すことがあります。
コマンド操作でファイルやディレクトリを扱うときに必要な概念として, カレントディレクトリ (current directory; current は「現在の」,「現行 の」という意味) 3 があります。カレントディレクトリは文 字通り,現在使っているディレクトリを意味する用語です。
例えば,ls を引数無しで実行して表示されるのは,カレントディレクトリに存 在するファイルの名前です。また,cp や mkdir 等のコマンドに ファイル名やディレクトリ名を与えると,コマンドが処理するのは カレントディレクトリ内のファイルやディレクトリとなります4 。
ユーザーがログインしたときのカレントディレクトリはホームディレクトリです。 これまで,ファイルやディレクトリがホームディレクトリに作成されたのはその ためです。
ホームディレクトリ (~
) 以外のディレクトリに存在するファイルやディ
レクトリを,これまでと同様の方法で操作するには,
カレントディレクトリの変更を行います。
カレントディレクトリを変更するコマンドは cd (change directory) です。cd の引数には変更先のディレクトリを指定します。引数を指定しなければ,ホーム ディレクトリがカレントディレクトリになります(ホームディレクトリに戻れま す)。
以下では,上の図に示すように,ホームディレクトリ(~
)に通常のファイ
ル loc とディレクトリ tmp を作り,さらにディレクトリ tmp に通常の
ファイル loc とディレクトリ tmpsub を作ります。次の点に留意してお
きましょう。
それでは,自分が今どのディレクトリにいるのか(カレントディレクトリがどこ なのか)を常に意識しながら,次の操作をしてください。
echo Here is my home > loc正しくできたか,ls と cat で確認してください。
mkdir tmpls コマンドを使って結果を確認してください。
cd tmp何も表示されなければ成功です5。
カレントディレクトリである tmp には,まだ何も作っていませんから, 何も表示されません。
ちゃんとホームに帰れましたか? ファイル loc の中身を確認してください。
ディレクトリ tmp を削除できませんね。rmdir は中身が空のディレクト リを削除するコマンドだからです。
前節で作成した,ホームディレクトリ (~
) 内のディレクトリ/ファイルの
構造を再掲します。
あるディレクトリの一つ上位のディレクトリを 親ディレクトリ (parent directory)と呼びます。 上の図では,tmpsub の親ディレクトリは tmp で あり,tmp の親ディレクトリは ~ です。 逆に,tmpsub を tmp の子ディレクトリ (child directory)またはサブディレクト リ (subdirectory)と呼びます。tmp は ~ の子ディレクトリです。
カレントディレクトリの子ディレクトリは「カレントディレクトリに存在するディ レクトリ」です。そのため,第 1.2.2 節で述べたとおり,ディレ クトリ名をそのままコマンドの引数として指定すれば,それがコマンドの処理対 象となります。
一方,カレントディレクトリ自身や「カレントディレクトリの親ディレ クトリ」は,カレントディレクトリに存在するディレクトリではありませんので, ディレクトリ名をコマンドの引数に与えても,コマンドの処理対象にはなりませ ん。これらをコマンドの引数にしたければ,次の記号を使います。
以下を順に実行して,このことを確認しましょう。
ls の引数にディレクトリを指定すると,ls はそのディレクトリ内のファ イル一覧を表示します6。
ちゃんと同じになりますね。
tmpsub はカレントディレクトリに存在するディレクトリではないので, cd tmpsub だけではうまくいきません。まず tmp に移ってから, tmpsub に移りましょう。
tmpsub には何もありませんね。
-a は . で始まるものを含めてファイル名を表示する ls のオプション だったことを思い出してください。
ls -aFカレントディレクトリ自身とその親ディレクトリの存在を確認できまし たか。
まず,cd tmp を試しましょう。
コマンドの引数には,カレントディレクトリに存在するファイル/ディ レクトリ名を指定するのでしたから,これではうまくいきません。
そこで,親ディレクトリの記号 .. を使います。
cd ..
エラーメッセージは出ませんね。
今はちゃんと tmp にいますね。
また,ls -aF の表示では .. も現われました。さらに親ディレクトリ (ホームディレクトリ) に移動するには .. を使うことができます。
では .. を使ってホームディレクトリに戻りましょう。
前回は, mv と cp の引数に二つのファイル名を与え,ファイル名の変更とファイルの複写を行いましたが, これらの最後の引数に既存のディレクトリ名 directory を指定すると,mv と cp は次のとおり動作します。
mv の場合,file としてディレクトリ名を与えれば, ディレクトリを別のディレクトリに移動することもできます。
mv file directory file を directory に移動する cp file directory file を directory に,同じ名前のファイルとして複写する
以下を試しましょう。
ファイル now が無ければ date > now で作成してください。
ディレクトリ tmp のファイル now は,ホームディレクトリに複写され ましたね。
以上,ファイルやディレクトリの最も基本的な操作法である,カレントディレク トリに存在するファイルの操作や,カレントディレクトリの親および子ディレク トリへのファイル複写や移動の方法について学びました。
カレントディレクトリがどこであるかに拘らず, 任意のディレクトリに存在するファイルを操作することもできます。 その方法は次章で学習します。
.
(ドット) で指定で
きる。
~
で
表すことがある。
..
(ドット二つ) で指定できる。
コマンド | 機能 |
ls [directory ...] | カレントディレクトリ(または directory ...)に存在するファイルの名前を表示 |
ls -F [directory ...] | ファイルの種類を表す記号を付加して,カレントディレクトリ(または directory ...)に存在するファイルの名前を表示 |
ls -a [directory ...] | ドットで始まるファイルを含め,カレントディレクトリ(または directory ...)に存在するファイルの名前を表示 |
cd [directory] | カレントディレクトリを directory に変更 (directory を省略した場合はホームディレクトリに変更) |
mkdir directory ... | directory ...の作成 |
rmdir directory ... | 空のディレクトリ directory ... の削除 |
cat file ... | file ... の内容を表示 |
cp file1 file2 | file1 を file2 に複写 |
cp file ... directory | file ... を directory に複写 |
mv file1 file2 | file1 の名前を file2 に変更 |
mv directory1 directory2 | directory1 の名前を directory2 に変更 |
mv file ... directory | file ... を directory に移動 |
rm file ... | file ... を削除 |
rm -r file ... | file ... をディレクトリ階層を含めてすべて削除(誤操作に注意) |
pwd | カレントディレクトリ名を絶対パス名で表示 |
以下を順に実行してみましょう。
/ で区切られた文字列の一番右側に,自分のユーザー名 (ログイン名) が表示されていれば,ホームディレクトリにいます。 詳しくは第 2.2.1 節で説明します。
ls -aF | headを実行してください。
..
(親ディレクトリ) がありますね。みな
さんのホームディレクトリには,さらに上位のディレクトリが存在する
のです。
cd ..
を繰り返し実行して,どんどん上位のディレクトリに移動
してみましょう。移動する毎に pwd
や ls
を実行して,
結果を観察しましょう。
pwd の出力が / になったら,何度 cd .. を実行しても,pwd は / を出 力します。行き止まり。このディレクトリをルートディレクトリ (root directory)といいます。
図 1 は
UNIX システムにおける
ディレクトリやファイルの階層構造の一例です。
各ユーザーのホームディレクトリも,すべてこの階層構造内にあります。
図において や
は,
各々,ユーザー OOOO や XXXX のホームディレクトリです。
階層構造におけるディレクトリやファイルの位置を表す名前をパス名 (pathname) といいます。パス名には絶対パス名 (absolute pathname) と 相対パス名 (relative pathname) の二種類があります。
ファイル名やディレクトリ名だけでは,カレントディレクトリのファイルやディ レクトリ しか操作できませんでしたが,パス名を利用することにより,システム内の任意 のディレクトリに存在するファイルやディレクトリを扱うことが可能になります。
絶対パス名 | 相対パス名 | 備考 |
/home/OOOO | . | カレントディレクトリ |
/home/OOOO/unix | unix または ./unix | |
/home/OOOO/unix/temp | unix/temp または ./unix/temp | |
/home/OOOO/unix/misc | unix/misc または ./unix/misc | |
/home | .. | カレントディレクトリの親 |
/ | ../.. | カレントディレクトリの親の親 |
/home/XXXX | ../XXXX | カレントディレクトリの親の子 |
/var | ../../var | |
/var/tmp | ../../var/tmp |
絶対パス名は,ディレクトリやファイルの位置をルートディレクトリを基点として 表すものです。 絶対パス名は次のように構成されます。
例えば,
図 1
におけるディレクトリ の絶対パス名は
/home/OOOO であり,ファイル temp の絶対パス名は
/home/OOOO/unix/temp です8。
絶対パス名を用いれば,システム内のファイルやディレクトリを一意に表現でき ます。第 2.1節で使った pwd コマンドは,カレントディレクト リを絶対パス名で出力するコマンドです。
相対パス名は,カレントディレクトリとの相対的な関係によって,ディレクトリ やファイルの位置を表すものです9。 そのため,カレントディレクトリを変更すれば相対パス名も変わります。 相対パス名の書き方は次のとおりですが,絶対パスとの表記上の違いは, パス名の先頭に / を付けないことです。
カレントディレクトリから当該ディレクトリまでの道筋を / で区
切りながら順に記す。ただし,カレントディレクトリ名自身は記さ
ない。カレントディレクトリを意味する . (ドット) を明示して,
./
に続いて道筋を記述してもよい。
親ディレクトリを意味する .. (ドット二つ) を / で区切りながら 書き並べることにより,カレントディレクトリの祖先 (図1では左 側) を表現する。
さらに,その子孫であるディレクトリやファイルを表したい場合に は,引き続き当該ディレクトリやファイルまでの道筋を / で区切っ て書き並べる。
カレントディレクトリが図 1
の であるとします。
このとき,図 1におけるディレクトリやファイルのいくつか
を,絶対パス名と相対パス名で表したのが表 1です。
ファイル名やディレクトリ名を引数とするコマンドでは,ファイル名やディレク トリ名に代えパス名を指定することができます。パス名には,絶対パス名と相対 パス名のどちらを利用しても構いません。
以下を順に実行してください。カレントディレクトリを変更(別のディレクトリ に移る)する度に,pwd コマンドを実行してカレントディレクトリを確認してく ださい。
cd /
cd /var/tmp
cd
cd unix/misc
cd ../..
ls /
ls /etc
cat /etc/passwd
以下は,すべてホームディレクトリをカレントディレクトリとした状態で実行し てください。実行したら,ls コマンド等で結果を確認してください。 コマンドの第2引数に与えるファイルの種類(ファイルかディレクトリか)に注意してください (第 1.5 節参照)。
cp unix/temp unix/misc
cp unix/temp unix/misc/tempfile
mv unix/misc/tempfile .
(ドット)
ファイル名やディレクトリ名を,そのままコマンドの引数とすればよい。
ファイルやディレクトリを,パス名でコマンドの引数に与える。
>
を使います。
ファイル kokugo の内容は aiueo とし,sansu の内容は 1+1=2 としておきましょう。