第一部入門 で学んだことの復習から始めましょう。
.
(ドット) で指定で
きる。
~
で
表すことがある。
~
(ホー
ムディレクトリ) であり,rensyu の親は unix である。コマンド
行において,カレントディレクトリの親ディレクトリを ..
(ドット二つ) で指定できる。
~
のサブディレクトリである。
unix というディレクトリはありますか? 無ければ作成してください。
.
(ドット) や
親ディレクトリを意味する ..
(ドット二つ) はありますね。
コマンド | 機能 |
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 | カレントディレクトリ名を絶対パス名で表示 |
以下を順に実行してみましょう。
/ で区切られた文字列の一番右側に,自分のユーザー名 (ログイン名) が表示されていれば,ホームディレクトリにいます。 詳しくは第 1.3.1 節で説明します。
ls -aF | headを実行してください。
..
(親ディレクトリ) がありますね。みな
さんのホームディレクトリには,さらに上位のディレクトリが存在する
のです。
cd ..
を繰り返し実行して,どんどん上位のディレクトリに移動
してみましょう。移動する毎に pwd
や ls
を実行して,
結果を観察しましょう。
pwd の出力が / になったら,何度 cd .. を実行しても,pwd は / を出 力します。行き止まり。このディレクトリをルートディレクトリ (root directory)といいます。
図 1 はワークステーション室のシステムにおける
ディレクトリやファイルの階層構造の一部です。
各ユーザーのホームディレクトリも,すべてこの階層構造内にあります。
図において や
は,
各々,ユーザー hs○○ や hs△△ のホームディレクトリです。
階層構造におけるディレクトリやファイルの位置を表す名前をパス名 (pathname)といいます。パス名には絶対パス名 (absolute pathname)と 相対パス名 (relative pathname)の二種類があります。
ファイル名やディレクトリ名だけでは,カレントディレクトリのファイルやディ レクトリ しか操作できませんでしたが,パス名を利用することにより,システム内の任意 のディレクトリに存在するファイルやディレクトリを扱うことが可能になります。
絶対パス名は,ディレクトリやファイルの位置をルートディレクトリを基点として 表すものです。 絶対パス名は次のように構成されます。
例えば,
図 1
におけるディレクトリ の絶対パス名は
/home/1/hs/hs○○ であり,ファイル temp の絶対パス名は
/home/1/hs/hs○○/temp です。
絶対パス名を用いれば,システム内のファイルやディレクトリを一意に表現でき ます。第 1.2節で使った pwd コマンドは,カレントディレクト リを絶対パス名で出力するコマンドです。
相対パス名は,カレントディレクトリとの相対的な関係によって,ディレクトリ やファイルの位置を表すものです2。 そのため,カレントディレクトリを変更すれば相対パス名も変わります。 相対パス名の書き方は次のとおりですが,絶対パスとの表記上の違いは,パス名の先頭に / を付けないことです。
カレントディレクトリから当該ディレクトリまでの道筋を / で区
切りながら順に記す。ただし,カレントディレクトリ名自身は記さ
ない。カレントディレクトリを意味する . (ドット) を明示して,
./
に続いて道筋を記述してもよい。
親ディレクトリを意味する .. (ドット二つ) を / で区切りながら 書き並べることにより,カレントディレクトリの祖先 (図1では左 側) を表現する。
さらに,その子孫であるディレクトリやファイルを表したい場合に は,引き続き当該ディレクトリやファイルまでの道筋を / で区切っ て書き並べる。
カレントディレクトリが図 1
の
であるとします。
このとき,図 1におけるディレクトリやファイルのいくつか
を,絶対パス名と相対パス名で表したのが表 1です。
絶対パス名 | 相対パス名 | 備考 |
/home/1/hs/hs○○ | . | カレントディレクトリ |
/home/1/hs/hs○○/unix | unix | または ./unix |
/home/1/hs/hs○○/ temp | temp | または ./temp |
/home/1/hs/hs○○/unix/rensyu | unix/rensyu | または ./unix/rensyu |
/home/1/hs | .. | カレントディレクトリの親 |
/home/1 | ../.. | カレントディレクトリの親の親 |
/home | ../../.. | |
/ | ../../../.. | |
/home/1/hs/hs△△ | ../hs△△ | カレントディレクトリの親の子 |
/var | ../../../../var | |
/var/tmp | ../../../../var/tmp |
ファイル名やディレクトリ名を引数とするコマンドでは,ファイル名やディレク トリ名としてパス名を指定することができます。パス名には,絶対パス名と相対 パス名のどちらを利用しても構いません。
以下を順に実行してください。カレントディレクトリを変更(別のディレクトリ に移る)する度に,pwd コマンドを実行してカレントディレクトリを確認してく ださい。
cd /
cd /var/tmp
cd
cd unix/rensyu
cd ../..
ls /
ls /etc
cat /etc/hosts
以下は,すべてホームディレクトリをカレントディレクトリとした状態で実行し てください。実行したら,ls コマンド等で結果を確認してください。
cp temp unix/rensyu
cp temp unix/rensyu/tempfile
mv unix/rensyu/tempfile .
ファイル名やディレクトリ名を,そのままコマンドの引数とすればよい。
ファイルやディレクトリを,パス名でコマンドの引数に与える。
ls /bin
を実行してください。
cat, cp, ls, pwd などのコマンドが,/bin の中のファイルの名前とし て表示されます。
/bin/pwd
とタイプして <ENTER> を押してみ
てください。
/bin/pwd でも pwd コマンドを実行できましたね。
このことから予想されるとおり,pwd コマンドの実体は,ディレクトリ /bin に 存在する通常のファイル pwd です。UNIX コマンドの多くは,コマンドと同名の ファイルとして存在していて,/bin に存在するファイルはすべて実行可能な コマンドです4。
コマンドの引数にパス名が使えるのと同様に,コマンド自身を指定する際にもパ ス名が使えます。先ほど /bin/pwd で pwd コマンドを実行できたのは, そのためです。相対パス名でも可能です。
より正確にいうと,ファイルとして存在するコマンドを実行するには,本来,コ マンドのパス名を使う必要があります。しかし,それでは不便ですので,/bin のような特定のディレクトリに存在するコマンドを,コマンド名のみで実行でき るようにする仕組みが 設けられています5。そのおかげで,/bin/pwd や /bin/ls 等を pwd や ls とだけタイプして実行できるのです。
emacs &
を実行してから,ホームディレクト
リに存在するファイル commands_file を,絶対パス名を使って読み込
み,コマンド pwd の説明を追加して保存しましょう。ファイル読み込み
時には,ミニバッファの内容 (~/
) を消してから絶対パス名を打っ
てください。ディレクトリ名やファイル名の入力には <TAB> による補
完機能を活用しましょう。