以下に説明するファイルとディレクトリを扱うための機構をファイルシステムといいます. ファイルシステムを理解し, 自由に扱うことができるようになれば, UNIX 1年生は卒業といっても過言ではありません.
ディレクトリは更にディレクトリとファイルを束ねることが可能です (ディレクトリもファイルの一種ですから当然ですね:-). 現実世界で例えると, ある分類によって書類(ファイル)をおなじ箱に詰め (ここでは教科毎に箱につめたとします), さらにそういった箱を束ねる箱(年度毎の箱といったところかな?)にいれる... という方法で書類を整理することを想像すれば分かりやすいでしょうか.
複数のディレクトリで作られた階層構造は 図 2.1 (を逆さに見るべき)にあるように樹の枝が分かれていく様に例え, "ツリー構造"といいます. UNIX (Linux) ではファイルはたった1つのツリー構造からなっており, 一番最初のディレクトリを "/" (ルートディレクトリ) とよびます. "/" はまさに樹の"根"に相当し, そこから全てのファイル(葉)に つながっているわけです.
まとめると, UNIX ではルートディレクトリを起点とした 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 通りの方法でファイルが読めましたか? 実際にはカレントディレクトリの位置と作業したいファイルの位置関係を 考えて相対/絶対パスをつかいわけることになります.
練習: 同様に /home/ ディレクトリに移動し, そこから 相対パス, 絶対パスの 2通りの方法で hello.txt ファイルの内容を出力してみましょう.
ディレクトリ操作に関係するコマンドを一通り使ってみましょう.
ls コマンドに -F オプションをつけるとディレクトリファイルには 続けて"/"(スラッシュ)が表示され 普通のファイルと区別することが可能です.
$ ls -F / |
pwd コマンドによって現在のカレントディレクトリを知ることができます.
cd コマンドの後に移動先のディレクトリ名を指定すると, 指定したディレクトリに 移動することができます. 移動先のディレクトリ名は絶対パス, 相対パスの どちらでもいいです.
例えば /home/bar から /home/foo に移動するには, 以下のような 3 通りの方法があります.
$ cd /home/bar $ cd ~baz/ $ cd ../foo |
< 絶対パスを指定して, 相方のホームディレクトリに移動. (bar は相方のアカウント名) < ~ (チルダ)をつかって T.A. のホームディレクトリへ移動. (baz は T.A. のアカウント名) < 相対パスで指定して, 自分のホームディレクトリに移動. (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 コマンドや touch コマンドを利用する方法があります.
$ cd ~ $ echo 'hogehoge' > test.txt $ touch null.txt $ ls |
< ホームディレクトリに移動. < 文字列 'hogehoge' を test.txt というファイルに流し込む. < 中身のないファイル null.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 というファイルに "herohero" という文字列を追加. < test.txt の内容を確認. < test.txt というファイルを hero.txt という名のファイルに変更. < ファイルリストを出力. (test.txt は存在しない) < hero.txt の内容を出力させる. (test.txt と内容が同じはず) |
ファイルの削除は rm コマンドを用います. 某 OS と異なり, 一度消したファイルは復帰できません.
$ cd ~ $ rm hero.txt hoge.txt $ ls |
< ホームディレクトリに移動. < 先程作成した hero.txt と hoge.txt を消去する. < ファイルリストを表示させ, 上記ファイルが無くなっていることを確認. |
最終更新日: 2002/10/24(やまだまなぶ) | Copyright © 2002 inex |