以下に説明するファイルとディレクトリを扱うための機構をファイルシステムといいます. ファイルシステムを理解し, 自由に扱うことができるようになれば, UNIX / Linux を使いこなす基礎はできたといってよいでしょう.
ディレクトリは更にディレクトリやファイルを束ねることが可能です. 現実世界で例えると, ある分類によって書類(ファイル)をいくつかの箱に分けて詰め, それらの箱をまとめる, より大きな箱に入れる…, という方法で書類を整理することを想像すれば分かりやすいでしょうか.
複数のディレクトリで作られた階層構造は 図 2.1 (を逆さに見るべき)にあるように樹の枝が分かれていく様に例えられ ており, "ツリー構造"といいます. UNIX (Linux) ではファイルはたった1つのツリー構造からなっており, 一番最初のディレクトリを "/" (ルートディレクトリ) とよびます. "/" はまさに樹の"根"に相当し, そこから全てのファイル(葉)に つながっていくわけです.
pwd は現在あなたが作業をしているディレクトリを表示します. コマンドを実行してみましょう.
$ pwd /home/foo |
< "foo" の部分はログインした人のアカウント名 |
ルートディレクトリにあるファイルの一覧をみて見ましょう.
$ ls / |
< うまく表示できない場合はコマンド入力の約束を読むべし. |
参考として "/" (ルートディレクトリ)にあるディレクトリの一覧を示します.
ディレクトリ名 | 意味 |
---|---|
/root | スーパーユーザー(root)のホームディレクトリ |
/boot | 起動時に読み込まれるカーネル等が置かれます. |
/dev | Linux では, ハードウェアもファイルとして扱われます. ここにはそれらのデバイスファイルがまとめられます. |
/etc | 各種の設定ファイルや, 起動時に実行されるスクリプト等が置かれます. |
/home | ユーザー毎のホームディレクトリが置かれます. |
/lib | /bin, /sbinなどが使う共有ライブラリが置かれます. |
/mnt | 一時的なマウント用ディレクトリです. デフォルトで, このディレクトリ内に FD と CD-ROM をマウントするディレクトリが作られています. (/mnt/cdrom /mnt/floppy) |
/proc | カーネルの動作情報を示す, 特殊なファイルが置かれます. それらのファイルは, 全てカーネルが作成する仮想ファイルで, カーネルの機能を制御する目的にも使われます. ハードディスク空間は一切消費しません. |
/bin | 各種のコマンドで, バイナリ形式の実行ファイルが置かれます. |
/sbin | システム管理用コマンドの実行ファイルが置かれます. |
/tmp | 一時的なファイルの保管場所(一定期間アクセスが無いと削除されます) |
/usr | カーネルソースを含め, 多くのソフトウェアがここに入ります. |
上記のディレクトリの内, 一般ユーザが使用できるのは /home/(ユーザ名)/ のディレクトリで, それ以外はシステムが使う領域になっています.
みなさんが UNIX を使って作業するとき, 実際はどこかのディレクトリの中で作業していることになります. 先にディレクトリは"箱"の様なものと表現しましたが, 作業をする空間という意味では"部屋"のようなものともいえます. 自分が今いるディレクトリがどこであるかということは UNIX において非常に重要です.
ログインしたときは自分の「ホームディレクトリ」の中にいることになります. 「ホームディレクトリ」は自分のアカウント名がついたディレクトリで, あなたが自由に使うことができる領域です(先の pwd コマンドの結果を思い出してください).
ディレクトリの中には「ホームディレクトリ」の他に 「ルートディレクトリ」といった特別な名前が付いているものがいくつかあります.
呼び方 | 意味 |
---|---|
ルートディレクトリ | UNIX のディレクトリ構造の頂点に存在するディレクトリ. "/" (スラッシュ)で表す. |
ホームディレクトリ | それぞれのユーザ専用のディレクトリ. "~" (チルダ, にょろ)で表す. |
カレントディレクトリ | 現在ユーザが作業しているディレクトリ. pwd (Print current Working Directory)コマンドで表示される. |
親ディレクトリ | カレントディレクトリの 1 段上のディレクトリ. ".." (ドットドット)で表す. |
子ディレクトリ | カレントディレクトリの 1 段下のディレクトリ. |
そのディレクトリ自身 | ディレクトリに含まれるファイルにはそのディレクトリ自身も含まれます. これは "." (ドット) 一文字で表されます. |
cd コマンドはカレントディレクトリを変えるコマンドです(Change Directory).
$ cd ~ $ pwd $ cd ../ $ pwd $ cd |
< ~ を使ってホームディレクトリに移動 < 現在のカレントディレクトリを表示 < 親ディレクトリに移動. < 現在のカレントディレクトリを表示 < さて, 今どこにいる?? |
ディレクトリやファイルの指定の仕方には 2 通りあります. 「絶対パス」で指定するか「相対パス」で指定するかです.
![]() |
例えば / (ルートディレクトリ)の下の home ディレクトリの下の sugiyama ディレクトリの下の work ディレクトリの下の jupiter.txt というファイルを 読みたいとしましょう. ここで現在自分は "/" (ルートディレクトリ) の下の home ディレクトリの下の dongury ディレクトリ中にいるものとします. この場合, 以下の 2 通りの方法でファイルを指定することができます. なお, 先に説明したように, ディレクトリとディレクトリは "/" (スラッシュ)で区切ります. |
名前 | 意味 |
---|---|
絶対パス | ディレクトリやファイルの位置を / (ルートディレクトリ)から見た
位置として記述する方法. 例えば /home/sugiyama/work/jupiter.txt |
相対パス | ディレクトリやファイルの位置をカレントディレクトリ
(あるいは先にあげた特殊なディレクトリ)から見た位置として
記述する方法. 例えば ../sugiyama/work/jupiter.txt あるいは ~/work/jupiter.txt など |
実はこれまでの作業編で "相対/絶対パス" を使い分けていたのですが 気づいていましたか?? ここでは, 意識して両者を使ってみましょう.
$ cd ~ $ pwd $ echo "hello World" > hello.txt $ cd /home/bar $ pwd $ cat ../foo/hello.txt $ cat /home/foo/hello.txt |
< ホームディレクトリに移動(自分のアカウント名を仮に "foo" とします.) < カレントディレクトリを表示 < hello.txt というファイルを作成. "Hello World" と書き込む < 同席の相方(アカウント名を仮に"bar"とします)のホームディレクトリに移動. < 現在のカレントディレクトリを表示 < hello.txt を読む (foo には自分のユーザ名を入れる) < hello.txt を読む (foo には自分のユーザ名を入れる) |
絶対パス, 相対パスの 2 通りの方法でファイルが読めましたか? 実際にはカレントディレクトリの位置と作業したいファイルの位置関係を 考えて相対/絶対パスをつかいわけることになります.
上の図のようなディレクトリ構造を計算機上で表示するコマンドとして tree コマンドがあります.
$ tree /home/ `-- konijo `-- michi `-- yukiko `-- ***(自分のアカウント名) |
こんな表示が出てきましたか?
では,
$ tree /etc/ | less |
とやってみて下さい. 先週の講義で紹介した, /etc/passwd, /etc/shadow が見つかりますか?
/etc/ .... |-- passwd .... |-- shadow .... |
/etc/ と less の間にある | はパイプと呼ばれる機能で, 次回に詳しく紹介します. 恐らく, 実行した結果は kterm の画面には収まりきらないと思います. そのときは, カーソルキーで上下させてください.
その他, 上の表にあるディレクトリについても, tree コマンドで構造を確かめてみて下さい.
$ cat /etc/passwd $ cat /etc/shadow |
< /etc/passwd の中身を読む < /etc/shadow の中身を読む |
とやってみてください. しかし! どちらかのファイルは見ることができないはずです. なぜでしょうか? 考えてみて下さい!
見ることができなかったファイルについては, VTA の人に見せてもらって下さい.
ディレクトリ操作に関係するコマンドを一通り使ってみましょう.
ls コマンドに -F オプションをつけるとディレクトリファイルには 続けて"/"(スラッシュ)が表示され 普通のファイルと区別することが可能です.
$ ls -F / |
pwd コマンドによって現在のカレントディレクトリを知ることができます.
cd コマンドの後に移動先のディレクトリ名を指定すると, 指定したディレクトリに 移動することができます. 移動先のディレクトリ名は絶対パス, 相対パスの どちらでもいいです.
例えば /home/bar から /home/foo に移動するには, 以下のような 3 通りの方法があります.
$ cd /home/bar $ cd ~baz/ $ cd ../foo |
< 絶対パスを指定して, 相方のホームディレクトリに移動. (bar は相方のアカウント名) < ~ (チルダ)をつかって T.A. のホームディレクトリへ移動. (baz は TA のアカウント名) < 相対パスで指定して, 自分のホームディレクトリに移動. (foo は自分のアカウント名) |
新たなディレクトリを作成する場合は mkdir コマンドを実行します. 引数として作成するディレクトリ名を指定します.
例えば /home/foo の下に work というディレクトリを作成するには, 以下のような方法があります. 今任意のディレクトリにいるとします.
$ mkdir /home/foo/work2 $ cd ~ $ mkdir ./work $ mkdir ~foo/work |
< 絶対パスで指定 < 相対パスで指定 < ~foo は foo のホームディレクトリの意味となる. |
既に存在するディレクトリを削除する場合は rmdir コマンドもしくは rm コマンドを実行します. 引数として削除するディレクトリ名を指定します.
例えば /home/foo の下の work というディレクトリを削除するには, 以下のようにします. 但しカレントディレクトリは /home/foo とします. 尚, work ディレクトリの下に存在するファイルごと削除する場合, rm コマンドを実行します.
$ rmdir /home/foo/work $ rmdir work $ rmdir ~foo/work $ rm -r /home/foo/work $ rm -r work $ rm -r ~foo/work |
< 絶対パスで指定 (ディレクトリ内が空の場合) < 相対パスで指定 (ディレクトリ内が空の場合) < ~foo は foo のホームディレクトリを意味する. < 絶対パスで指定 (ディレクトリ内のファイルごと削除する場合) < 相対パスで指定 (ディレクトリ内のファイルごと削除する場合) < ~foo は foo のホームディレクトリを意味する. |
既に実行してもらっていますが, サイズの小さなファイルを作成する簡単な方法として echo コマンドを利用する方法があります.
$ cd ~ $ echo 'hogehoge' > test.txt |
< ホームディレクトリに移動. < 文字列 'hogehoge' を test.txt というファイルに入れる. |
長めの文章やプログラムを作成する場合はエディターと呼ばれる プログラム(vi, mule, emacs, ae, ex などなど)を使いますが, 今日は説明しません.
既存ファイルの他のファイルへのコピーは cp コマンドを用います.
$ cd ~ $ cp test.txt hoge.txt $ cat hoge.txt |
< ホームディレクトリに移動. < 先程作成した test.txt というファイルを hoge.txt というファイルにコピー. < hoge.txt の内容を出力させる(hogehoge と出力されたかな?). |
既存ファイル名の変更は mv コマンドを用います.
$ cd ~ $ echo 'herohero' >> test.txt $ cat test.txt $ mv test.txt hero.txt $ ls $ cat hero.txt |
< ホームディレクトリに移動. < ">>" と2度大なり記号を続けて入力する. < test.txt の内容を確認. < test.txt というファイルを hero.txt という名のファイルに変更. < ファイルリストを出力. (test.txt は存在しないことを確認!) < hero.txt の内容を出力させる. (test.txt と内容が同じことを確認!) |
ファイルの削除は rm コマンドを用います. Windows とは異なり, 一度消したファイルは復帰できません.
$ cd ~ $ rm hero.txt $ ls |
< ホームディレクトリに移動. < 先程作成した hero.txt と hoge.txt を消去する. < ファイルリストを表示させ, 上記ファイルが無くなっていることを確認. |
尚, hoge.txt は次の作業のために残しておいてください.
最終更新日: 2004/10/22(小西丈予) | Copyright © 2004 inex |