next up previous contents
Next: 2 ファイルの詳細情報とアクセス権 Up: UNIX 基礎演習 B 組 Previous: 目次

Subsections


1 ファイルとディレクトリ

1.1 復習 -- カレントディレクトリと親ディレクトリのファイル操作

第一部入門 で学んだことの復習から始めましょう。

1.1.1 用語

ファイル(file):
文書やデータなどを保存しておくためのもの。

ディレクトリ(directory):
ファイルを分類して格納するための器。 ディレクトリもファイルの一種である。

カレントディレクトリ(current directory):
現在使っているディレク トリ。コマンドの引数に与えるファイル名やディレクトリ名は,カ レントディレクトリのファイルやディレクトリを指す。コマンド行 において,カレントディレクトリを . (ドット) で指定で きる。

ホームディレクトリ(home directory):
各ユーザーが自分のファイルや ディレクトリを格納するためのディレクトリ。ログイン直後のカレ ントディレクトリはホームディレクトリである。記号 ~ で 表すことがある。

親ディレクトリ(parent directory)
あるディレクトリの一つ上位のディ レクトリ。例えば,下の図において,unix の親は ~ (ホー ムディレクトリ) であり,rensyu の親は unix である。コマンド 行において,カレントディレクトリの親ディレクトリを .. (ドット二つ) で指定できる。

サブディレクトリ(subdirectory) または子ディレクトリ(child directory)
あるディレクトリ(の直下)に存在するディレクトリ。例えば, unix は ~ のサブディレクトリである。

\framebox[1em]{\texttt{\~{}}}-+- \framebox[4em]{\texttt{unix}}-+- \framebox[4em]{rensyu}-+- kokugo
    |                         |
    +-  temp                  +- sansu
    |
    


1.1.2 問題

  1. ホームディレクトリに存在する通常のファイルやディレクトリの名前一 覧を表示しましょう。

  2. その中でディレクトリはどれでしょう? ファイルの種類を表す記号 (ディ レクトリの場合は / ) がつくように,ファイルやディレクトリ名の一覧 を表示しましょう。

    unix というディレクトリはありますか? 無ければ作成してください。

  3. カレントディレクトリを unix に変更しましょう。

  4. ディレクトリ unix に temp という通常のファイルはありま すか? 無ければ touch temp を実行してください。 中身が空のファイル temp ができあがります。

  5. カレントディレクトリ (unix) に rensyu というディレクトリはありま すか。無ければ作りましょう。

  6. unix に存在するすべてのファイル名一覧を表示しましょ う。 カレントディレクトリを意味する .(ドット) や 親ディレクトリを意味する ..(ドット二つ) はありますね。

  7. ファイル temp を親ディレクトリに移動しましょう。

  8. カレントディレクトリを親ディレクトリ(ホームディレクトリ)に変更しましょう。

  9. カレントディレクトリをホームディレクトリとしたままの状態で,ディ レクトリ unix に存在するファイルやディレクトリの名前を表示しましょう。

1.1.3 ファイル・ディレクトリ操作の主なコマンド

コマンド 機能
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 file1file2 に複写
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 カレントディレクトリ名を絶対パス名で表示
file ... は複数のファイルを指定できることを,[ ] は中の要素が省略可能である ことを表します。


1.2 UNIX システムにおけるディレクトリ/ファイルの階層構造

以下を順に実行してみましょう。

  1. 引数無しで cd コマンドを実行し,カレントディレクトリをホームディ レクトリにしてください。

  2. カレントディレクトリ名を表示する pwd というコマンドを実行してみま しょう。

    / で区切られた文字列の一番右側に,自分のユーザー名 (ログイン名) が表示されていれば,ホームディレクトリにいます。 詳しくは第 1.3.1 節で説明します。

  3. ls -aF を実行して,ホームディレクトリに存在する全てのファイ ルとディレクトリを,ファイルの種類を表す印つきで表示しましょう。 表示が画面に納まらない場合,おまじないとして
    ls -aF | head
    を実行してください。.. (親ディレクトリ) がありますね。みな さんのホームディレクトリには,さらに上位のディレクトリが存在する のです。

  4. cd .. を繰り返し実行して,どんどん上位のディレクトリに移動 してみましょう。移動する毎に pwdls を実行して, 結果を観察しましょう。

    pwd の出力が / になったら,何度 cd .. を実行しても,pwd は / を出 力します。行き止まり。このディレクトリをルートディレクトリ (root directory)といいます。

UNIX では,ディレクトリやファイルから成る階層構造(木構造)がただ一つ存 在します。ルートディレクトリは階層構造に唯一存在する最上位 (根; root) の ディレクトリです。ルートディレクトリを記号 / (スラッシュ)で表し ます 1

図 1 はワークステーション室のシステムにおける ディレクトリやファイルの階層構造の一部です。 各ユーザーのホームディレクトリも,すべてこの階層構造内にあります。 図において \fbox{hs○○}\fbox{hs△△} は, 各々,ユーザー hs○○ や hs△△ のホームディレクトリです。

図 1: UNIX システムにおけるディレクトリ/ファイルの階層構造例
\begin{figure}\renewedcommand{baselinestretch}{0}
\begin{alltt}
\relax{} \frameb...
...s{} \vdots
\\ \relax \end{alltt}\renewedcommand{baselinestretch}{1}
\end{figure}

1.3 パス名

階層構造におけるディレクトリやファイルの位置を表す名前をパス名 (pathname)といいます。パス名には絶対パス名 (absolute pathname)相対パス名 (relative pathname)の二種類があります。

ファイル名やディレクトリ名だけでは,カレントディレクトリのファイルやディ レクトリ しか操作できませんでしたが,パス名を利用することにより,システム内の任意 のディレクトリに存在するファイルやディレクトリを扱うことが可能になります。


1.3.1 絶対パス名

絶対パス名は,ディレクトリやファイルの位置をルートディレクトリを基点として 表すものです。 絶対パス名は次のように構成されます。

ルートディレクトリ:
/

ルートディレクトリ以外:
ルートディレクトリを意味する / に続き, ルートディレクトリから当該ディレクトリやファイルまでの道筋 を / で区切りながら順に記す。

例えば, 図 1 におけるディレクトリ \fbox{hs○○} の絶対パス名は /home/1/hs/hs○○ であり,ファイル temp の絶対パス名は /home/1/hs/hs○○/temp です。

絶対パス名を用いれば,システム内のファイルやディレクトリを一意に表現でき ます。第 1.2節で使った pwd コマンドは,カレントディレクト リを絶対パス名で出力するコマンドです。

1.3.2 相対パス名

相対パス名は,カレントディレクトリとの相対的な関係によって,ディレクトリ やファイルの位置を表すものです2。 そのため,カレントディレクトリを変更すれば相対パス名も変わります。 相対パス名の書き方は次のとおりですが,絶対パスとの表記上の違いは,パス名の先頭に / を付けないことです。

カレントディレクトリの子孫の場合:
(図1では右側が子孫)

カレントディレクトリから当該ディレクトリまでの道筋を / で区 切りながら順に記す。ただし,カレントディレクトリ名自身は記さ ない。カレントディレクトリを意味する . (ドット) を明示して, ./ に続いて道筋を記述してもよい。

カレントディレクトリの子孫以外:

親ディレクトリを意味する .. (ドット二つ) を / で区切りながら 書き並べることにより,カレントディレクトリの祖先 (図1では左 側) を表現する。

さらに,その子孫であるディレクトリやファイルを表したい場合に は,引き続き当該ディレクトリやファイルまでの道筋を / で区切っ て書き並べる。

カレントディレクトリが図 1 \framebox[3.5em]{hs○○}であるとします。 このとき,図 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  

1.4 パス名を用いたファイルやディレクトリの操作

ファイル名やディレクトリ名を引数とするコマンドでは,ファイル名やディレク トリ名としてパス名を指定することができます。パス名には,絶対パス名と相対 パス名のどちらを利用しても構いません。

1.4.1 例題 -- カレントディレクトリの変更

以下を順に実行してください。カレントディレクトリを変更(別のディレクトリ に移る)する度に,pwd コマンドを実行してカレントディレクトリを確認してく ださい。

  1. まず,pwd コマンドでカレントディレクトリの絶対パス名を確認しましょ う。

  2. 絶対パス名を使ってルートディレクトリに移る

    cd /

  3. 絶対パス名を使ってディレクトリ /var/tmp に移る

    cd /var/tmp

  4. ホームディレクトリに移る (ここではパス名を使わずに,引数無しの cd で済ませます)

    cd

  5. 相対パス名を使って,ディレクトリ unix の子ディレクトリである rensyu に移る

    cd unix/rensyu

  6. 相対パス名を使ってホームディレクトリに移る

    cd ../..

1.4.2 例題 -- ファイル名の一覧表示やファイルの内容閲覧

  1. ルートディレクトリに存在するファイルの一覧

    ls /

  2. ディレクトリ /etc に存在するファイルの一覧

    ls /etc

  3. ディレクトリ /etc に存在するテキストファイル hosts の内容閲覧 3

    cat /etc/hosts

1.4.3 例題 -- ファイルの複写や移動

以下は,すべてホームディレクトリをカレントディレクトリとした状態で実行し てください。実行したら,ls コマンド等で結果を確認してください。

  1. ホームディレクトリに存在するファイル temp をディレクト リ rensyu に複写
    (cp file directory の形式で cp を実行)

    cp temp unix/rensyu

  2. ホームディレクトリに存在するファイル temp をディレクト リ rensyu に,ファイル名 tempfile として複写 (rensyu に tempfile と いうディレクトリは存在しないとする)
    (cp file1 file2 の形式で cp を実行)

    cp temp unix/rensyu/tempfile

  3. tempfile をカレントディレクトリに移動 (mv file directory の 形式で mv を実行)

    mv unix/rensyu/tempfile .

1.4.4 まとめ -- コマンドに対するファイル名やディレクトリ名の指定方法

1.5 パス名を用いたコマンドの実行

  1. ディレクトリ /bin にどんなファイルがあるか調べましょう。 ls /bin を実行してください。

    cat, cp, ls, pwd などのコマンドが,/bin の中のファイルの名前とし て表示されます。

  2. コマンド行に /bin/pwd とタイプして <ENTER> を押してみ てください。

    /bin/pwd でも pwd コマンドを実行できましたね。

このことから予想されるとおり,pwd コマンドの実体は,ディレクトリ /bin に 存在する通常のファイル pwd です。UNIX コマンドの多くは,コマンドと同名の ファイルとして存在していて,/bin に存在するファイルはすべて実行可能な コマンドです4

コマンドの引数にパス名が使えるのと同様に,コマンド自身を指定する際にもパ ス名が使えます。先ほど /bin/pwd で pwd コマンドを実行できたのは, そのためです。相対パス名でも可能です。

より正確にいうと,ファイルとして存在するコマンドを実行するには,本来,コ マンドのパス名を使う必要があります。しかし,それでは不便ですので,/bin のような特定のディレクトリに存在するコマンドを,コマンド名のみで実行でき るようにする仕組みが 設けられています5。そのおかげで,/bin/pwd や /bin/ls 等を pwdls とだけタイプして実行できるのです。


1.6 問題

  1. カレントディレクトリをホームディレクトリとしたままで,ディレクト リ unix の子ディレクトリである rensyu に存在するファイルの名前を確認 し,rensyu に存在する temp を削除しましょう。

  2. カレントディレクトリをホームディレクトリとしたままで, /bin/ls を実行しましょう。次に,/bin/ls の代わりに相対パ ス名を使って ls コマンドを実行してください。

  3. ディレクトリ /bin に存在するファイル ls を,ホームディレクトリの 子ディレクトリ unix に複写しましょう。ただし,複写先でファイル名 が myls となるようにしてください。使うコマンドは cp だけです。

  4. カレントディレクトリをホームディレクトリとした状態で,unix に複写 した myls を実行してみましょう。ディレクトリ unix に存在するコマ ンドはコマンド名のみでは実行できないため,パス名で myls を実行す る必要があることに注意してください6

  5. myls を削除してください。 削除の際に警告がでたら y を入力してください。 ホームディレクトリの tempfile も削除しましょう。

  6. GNU Emacs でファイル名を指定する際にも絶対パス名が使えます。ホー ムディレクトリで emacs & を実行してから,ホームディレクト リに存在するファイル commands_file を,絶対パス名を使って読み込 み,コマンド pwd の説明を追加して保存しましょう。ファイル読み込み 時には,ミニバッファの内容 (~/) を消してから絶対パス名を打っ てください。ディレクトリ名やファイル名の入力には <TAB> による補 完機能を活用しましょう。


next up previous contents
Next: 2 ファイルの詳細情報とアクセス権 Up: UNIX 基礎演習 B 組 Previous: 目次

平成17年12月21日