ファイルとディレクトリ

共通科目情報処理(実習)、国際総合学類対象、1997年01月10日

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/kokusai2-enshu-1996/1997-01-10 /file-dir.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
http://www.ipe.tsukuba.ac.jp/~yshinjo
http://www.ipe.tsukuba.ac.jp

■ファイル -- データを保存する箱

1996年1月8日の講義 でも話たように、ファイルは、コンピュータでデータを保存するための基本的 な仕組みです。ファイルには、次の2つの重要な側面があります。

ファイルに名前を付ける働きを持っているソフトウェア的な仕掛けは、ディレ クトリ(directory)と呼ばれています。 ディレクトリには、ファイルやディレクトリの文字列の名前と、 そのファイルやディレクトリの「実体」の番地(番号、数値)が入っています。

ディレクトリの中にディレクトリ名を登録することができるので、全体ではディ レクトリは、全体では 木構造(tree structure) になっています。階層化ディレクトリ(hierarchical directory)ということ もあります。

図1-1 ファイルとディレクトリの木

図1-1 ファイルとディレクトリの木

ファイルは、葉(leaf)になります。ディレクトリは、節(node)になります。特 殊な節として、根(root)があるます。これを、ルート・ディレクトリ(root directory)といいます。ルート・ディレクトリは、「/」で表します。

◆ホーム・ディレクトリ

個人個人のファイルの名前を登録するディレクトリを、ホーム・ディレクトリ (home directory)といいます。

たとえば、新城のホーム・ディレクトリは、/home1/yshinjo/ です。 これは、次のような意味です。

自分のホーム・ディレクトリは、~/ または、~ (画面では、 (tilde) または と表示される)で表わされます。

■コマンド名、オプション、引数

このページでは、ファイルとディレクトリの木の探検に出かけましょう。 それには、ls コマンド(プログラム)を使います。 その前に、簡単に「コマンド・モード」の使い方を復習します。 詳しくは、次のページにあります。

1996年12月06日 コマンドモードの利用(1)

コマンド・モードでは、次のようにして、コンピュータを操作をします。

----------------------------------------------------------------------
% コマンド名 オプション1 オプション2 ... 引数1 引数2 .. [←]
----------------------------------------------------------------------

コマンド名は、必須です。オプション(option)とは、コマンドの動きを少し変 えるためのものです。引数(ひきすう、argument,parameter)は、コマンドの 種類によっては、必ず必要とするものです。オプションと引数の区別は、必ず しも厳密ではなく、混同して使われることもあります。

たとえば、次の行は、「mnewsいう名前のコマンドを、オプショ ンも引数も無しで実行する」という意味です。

----------------------------------------------------------------------
% mnews  [←]
----------------------------------------------------------------------
次の行は、「mnewsいう名前のコマンドを、オプション -n MAILで実行する」という意味です。この結果、mnews を実行 して MAILi で選んだ画面になます。
----------------------------------------------------------------------
% mnews -n MAIL [←]
----------------------------------------------------------------------
次の行は、「lsいう名前のコマンドを、引数/で 実行する」という意味です。
----------------------------------------------------------------------
% ls / [←]
----------------------------------------------------------------------

■ルート・ディレクトリとホーム・ディレクトリの表示

各自で、次のようなことをやってみましょう。

◆ls /

次のように打つと、ルート・ディレクトリの内容が表示されます。

----------------------------------------------------------------------
% ls / [←]
bin         cdrom       home1       home6       lost+found  tmp_mnt
boot        core        home10      home7       mnt         usr
ccecs       dev         home2       home8       pcfs        var
ccecs1      etc         home3       home9       sbin        vmunix
ccecs2      export      home4       kadb        sys         vmunix.old
ccecs3      home        home5       lib         tmp
% []
----------------------------------------------------------------------

◆ls -l /

ls コマンドには、-l (long)というオプションが あります。次のように打つと、ルート・ディレクトリの内容が表示されますが、 -l を付けた効果で長く表示されます。
----------------------------------------------------------------------
% ls -l / [←]
total 5029
lrwxrwxrwx  1 root            7 Mar 18  1993 bin -> usr/bin
-r--r--r--  1 root       103512 Mar 18  1993 boot
lrwxrwxrwx  1 root            7 Mar 24  1993 ccecs -> /ccecs1
drwxr-xr-x 19 root         1024 May  5  1996 ccecs1
drwxr-xr-x  8 root          512 May  5  1996 ccecs2
<中略>
drwxr-xr-x 35 root         1024 Jul 25  1994 usr
drwxr-xr-x 12 root          512 Mar 22  1993 var
-rwxr-xr-x  1 root      2204271 Feb  5  1995 vmunix
-rwxr-xr-x  1 root      2204161 Apr  1  1993 vmunix.old
% []
----------------------------------------------------------------------
一番左端の文字で、ファイルの種類がわかります。
-
ファイル
d
ディレクトリ
l
シンボリック・リンク

次の9文字は、ファイルの属性の1つで、ファイルの許可された操作を表わし ています。rwxrwxrwx の9文字は、次の順番に左から3文字ず つ区切って読みます。

rwx は、それぞれ次のような意味です。
r
内容を読む(read)ことができる
w
内容を書き込む(write)ことができる
x
内容を(プログラムとして)実行する(execute)ことができる (ファイルの場合)
x
検索すことができる(ディレクトリの場合)
rwxが来るべき所に、-が来ている時には、 その操作が許可されていないことを意味します。

第2カラムの数字は、リンク数と呼ばれていて、ファイル名の数を表わしています。 普通は気にしなくてもかまいません。

第3カラムの文字は、ファイルの所有者のログイン名です。ログイン名とは、 ログインの時に login: に対して打ち込む文字列です。 YMM_Computer(root) は、システム管理者のログイン名です。

第4カラムの文字は、ファイルの大きさ(バイト数)です。

第5カラム〜第7カラムは、ファイルが最後に更新された時刻(日付)を表わ しています。

第8カラムは、ファイル名です。

◆ls -l

ホーム・ディレクトリの内容を表示させましょう。

----------------------------------------------------------------------
% ls ~/ [←]
mbox   mbox~
% []
----------------------------------------------------------------------
mbox は、 個人用のメー ルボックスです。この中に受け取って取り込んだメールが保存されています。 mbox~ は、前回メールを操作した時(新着メールの取り込むなど)の メール・ボックスです。こういうファイルを、バックアップ(backup)といい ます。バックアップは、本物が壊れた時に代り使います。1つ前のバックアッ プがあると、メールを操作する時に間違った場合に元にもどれるので安心です。

◆ls -l ~/

ls -lでホーム・ディレクトリの内容を表示させてみましょう。
----------------------------------------------------------------------
% ls -l ~/ [←]
total 2
-rw-------  1 ta08          609 Jan  9 21:07 mbox
-rw-------  1 ta08          304 Jan  9 21:07 mbox~
% []
----------------------------------------------------------------------

◆ls -l ~/mbox

lsコマンドでは、引数としてディレクトリの名前ではなく ファイルの名前を与えることもできます。その時は、ディレクトリの内容では なく、ファイルの名前が表示されます。
----------------------------------------------------------------------
% ls -l ~/mbox [←]
-rw-------  1 ta08          609 Jan  9 21:07 /home1/ta08/mbox
% []
----------------------------------------------------------------------
lsコマンドには、引数として、ファイル名をいくつも与えるこ とができます。この機能は、いくつかのファイルを比較する時に便利です。
----------------------------------------------------------------------
% ls -l ~/mbox /var/spool/mail/ta08 [←]
-rw-------  1 ta08          609 Jan  9 21:07 /home1/ta08/mbox
-rw-------  1 ta08            0 Jan  9 21:07 /var/spool/mail/ta08
% []
----------------------------------------------------------------------
lsコマンドには、引数として、ディレクトリ名をいくつも与え ることもできます。

■muleやnetscapeによる木の探索

ファイルとディレクトリの木を探索するには、 lsコマンドの他に、 Mule のDirectory Editor や、 Netscape を使う方法もあります。

■lessコマンド

less コマンドは、長いファイルをゆっくりと眺めるためのプロ グラムです。less では、長いファイルを1ページを表示するごとに、ユーザ からのスペース・キーの打込みを待ちます。less コマンドの使い方は、mnews の「ページャ・モード」とよく似ていてます。(歴史的には、less が先にあ り、mnews ページャ・モードが less コマンドに似せて作られました。)

less コマンドは、次のようにして使います。すなわち、less というコマンド 名に続いて、引数としてファイル名を与えます。

----------------------------------------------------------------------
% less ファイル名 [←]
----------------------------------------------------------------------
less コマンドでは、次のようなキーが使えます。
----------------------------------------------------------------------
キー		動き		|	キー		動き
----------------------------------------------------------------------
SPACE		1ページ進める	|	b		1ページ戻す
j		1行進める	|	k		1行戻す
q		終了する	|	h		ヘルプの表示
----------------------------------------------------------------------

次のファイルを less コマンドで表示してみなさい。

■「~(tilde)」の利用

~」は、ユーザのホーム・ディレクトリを表すために使われます。 たとえば、「~/」、または、単に「~」で、「自分」のホー ム・ディレクトリを表わします。「less ~/mbox」で、ホーム・ ディレクトリにあるmboxという名前のファイルを表示させることがで きます。

~」には、他のユーザのホーム・ディレクトリを示す機能もありま す。たとえば、次のように打つと、ユーザ名yshinjo のホーム・ ディレクトリの内容を表示することができます。

----------------------------------------------------------------------
% ls ~yshinjo [←]
----------------------------------------------------------------------

注意すべきことは、「~/mbox」と「~mbox」(/なし) の意味が違うということです。前者は、「自分のホーム・ディレクトリの下に あるmbox」という意味です。後者は、「mboxという名 前のログイン名を持つ人のホーム・ディレクトリ」です。

なお、~は、画面、キーボード、プリンタで形が違う事があります。 とあったり、となっていたりします。Macintosh では、 1 の左の 「〜/`」のキーで打てます。「~」は、上段なので、シフ トを押しながら打ちます。

それから、Macintosh の telnet を使っていて、シフトを押さずに単に「〜/`」 を打つと、「」ではなく、ESC が入ることがあります。これは、ng (emacs) を使っていると、ESC をよく使うので、通信プログラム(telnet)がそ れを打ちやすくしているのです。

  1. 自分のホーム・ディレクトリの内容を「~ログイン名」という形式を使っ て表示させなさい。
  2. 隣にすわっている人のログイン名を聞き、その人のホーム・ディレクト リの内容を表示しなさい。

■高度なlsの利用(ls -l, ls -a)

ls コマンドに -l(long) オプションを付けると、ファイルの種類(ディレクト リか普通のファイルか)、ファイルの所有者、ファイルの大きさやファイルが 最後に更新された日付を調べることができます。
----------------------------------------------------------------------
% ls ~/ [←]
mbox   mbox~
% ls -l ~/ [←]
total 2
-rw-------  1 ta08          609 Jan  9 21:07 mbox
-rw-------  1 ta08          304 Jan  9 21:07 mbox~
% []
----------------------------------------------------------------------
ls コマンドは、普通、.から始まるファイル名を表示しません。しか し、-a (all) オプションを付けると、.から始まるファイル名も表示 します。
----------------------------------------------------------------------
% ls ~/ [←]
mbox   mbox~
% ls -a ~/ [←]
.           .exrc       .less       .mailrc     .ng-vt100
..          .history    .login      .newsrc     mbox
.cshrc      .hushlogin  .logout     .newsrc~    mbox~
% []
----------------------------------------------------------------------

  1. 自分のホーム・ディレクトリの内容を、「ls -l」で表示 しなさい。
  2. 自分のホーム・ディレクトリの内容を、「ls -a」で表示 しなさい。
  3. 自分のホーム・ディレクトリの内容を、「ls -la」で表 示しなさい。「ls -la」の代わりに「ls -l -a」 でもよい。
  4. less コマンドを使って、自分のホーム・ディレクトリにある次のファイ ルの内容を見てみなさい。

■ファイルのコピー

ファイルをコピーするには、cp (copy) コマンドを使います。 cp は、次の形式で使います
----------------------------------------------------------------------
% cp 古いファイルの名前 新しいファイルの名前 [←]
----------------------------------------------------------------------
これで、新しいファイルが作られ、古いファイルの内容が新しいファイルの内 容にコピーされます。注意することは、既に「新しいファイルの名前」があっ た時には、そのファイルが消されるということです。

次のようにして、cp コマンドの動きを確かめなさい。

  1. ls -a ~ [←] と打ち、.cshrc という名前 のファイルが存在すること、および、dot.cshrc という名前のファイ ルが「存在しない」ことを確認する。
    ----------------------------------------------------------------------
    % ls -a ~/ [←]
    .           .exrc       .less       .mailrc     .ng-vt100
    ..          .history    .login      .newsrc     mbox
    .cshrc      .hushlogin  .logout     .newsrc~    mbox~
    % []
    ----------------------------------------------------------------------
    
  2. cp コマンドを使って、~/.cshrc という名前のファ イルを、~/dot.cshrcという名前のファイルにコピーする。
    ----------------------------------------------------------------------
    % cp ~/.cshrc ~/dot.cshrc [←]
    %
    ----------------------------------------------------------------------
    
  3. コピーしたあと、ls コマンドを使って、ファイルが作られたことを確認 する。
    ----------------------------------------------------------------------
    % ls -a ~/ [←]
    .           .exrc       .less       .mailrc     .ng-vt100   mbox~
    ..          .history    .login      .newsrc     dot.cshrc
    .cshrc      .hushlogin  .logout     .newsrc~    mbox
    % []
    ----------------------------------------------------------------------
    
  4. ls -l コマンドを使って、~/.cshrc という名前のファイルと、 ~/dot.cshrcという名前のファイルの大きさが同じことを確認しなさい。
    ----------------------------------------------------------------------
    % ls -l ~/.cshrc ~/dot.cshrc [←]
    -rw-r--r--  1 ta08          119 Dec  3 09:18 /home1/ta08/.cshrc
    -rw-r--r--  1 ta08          119 Jan  9 23:00 /home1/ta08/dot.cshrc
    % []
    ----------------------------------------------------------------------
    
  5. less コマンドを使って、~/.cshrc という名前のファイルと、 ~/dot.cshrcという名前のファイルの内容が同じことを確認しなさい。
    ----------------------------------------------------------------------
    % less ~/.cshrc [←]
    <内容が表示される>
    % less ~/dot.cshrc [←]
    <内容が表示される>
    % []
    ----------------------------------------------------------------------
    
こうして作った ~/dot.cshrcという名前のファイルは、以下の練習問 題mv コマンドや rm コマンドの練習に使うとよ い。

■ファイル名の変更

ファイルの名前を変更するには、mv (move) コマンドを使います。mv は、次 の形式で使います
----------------------------------------------------------------------
% mv 古いファイルの名前 新しいファイルの名前 [←]
----------------------------------------------------------------------
これで、「古いファイルの名前」いうファイルの名前が「新しいファイルの名 前」になります。ファイルの内容は、変りません。ファイルの名前だけが変り ます。注意することは、既に「新しいファイルの名前」があった時には、その ファイルが消されるということです。

次のようにして、mv コマンドの動きを確認しなさい。

  1. cp コマンドを使って、なにかファイルを作る。
  2. ls コマンドを使って、ファイルが作られたことを確認する。
  3. less コマンドを使って、ファイルの内容を確認する。
  4. mv コマンドを使ってファイル名を変える。
  5. ls コマンドを使って、ファイル名が変ったことを確認する。
  6. less コマンドを使って、ファイルの内容が変っていない ことを確認する。

■ファイルの削除

ファイルを削除するには、rm (remove) コマンドを使います。 rm は、次の形式で使います

----------------------------------------------------------------------
% rm ファイル1 ファイル2 ファイル3 [←]
----------------------------------------------------------------------
これで、ファイル1,ファイル2,ファイル3が削除さ れます。

次のようにして、rm コマンドの動きを確認しなさい。

  1. cp コマンドを使って、なにかファイルを作る。
  2. ls コマンドを使って、ファイルが作られたことを確認する。
  3. rm コマンドを使って、ファイルを削除する。
  4. ls コマンドを使って、ファイル名が削除されたことを確 認する。

■ディレクトリの作成と削除

自分でディレクトリを作ることもできます。それには、mkdir (make directory)コマンドを使います。 mkdir は、次の形式で使います
----------------------------------------------------------------------
% mkdir ディレクトリ名 [←]
----------------------------------------------------------------------
これで、ディレクトリが作成されます。

ディレクトリを削除するには、rmdir コマンドを使います。rmdir は、次の形 式で使います

----------------------------------------------------------------------
% rmdir ディレクトリ名 [←]
----------------------------------------------------------------------
これで、ディレクトリが削除されます。ただし、ディレクトリの中が空の時に しかディレクトリを削除することができません。本当にそのディレクトリを削 除したい時には、まず、中のファイルを rm で削除するか、mv コマンドで他 のディレクトリに移します。

次のようにして、mkdir コマンドとrmdir コマン ドの動きを確認しなさい。

  1. ls コマンドを使って、自分のホーム・ディレクトリは、~/dir1という名前のファイルやディレクトリが「存在しない」ことを確 認する。
    ----------------------------------------------------------------------
    % ls ~/ [←]
    mbox   mbox~
    % []
    ----------------------------------------------------------------------
    
  2. mkdir コマンドを利用して、ホーム・ディレクトリの下に dir1という名前のディレクトリを作成する。
    ----------------------------------------------------------------------
    % mkdir ~/dir1 [←]
    % []
    ----------------------------------------------------------------------
    
  3. ls コマンドを使って、作成されたディレクトリが存在することを確認す る。
    ----------------------------------------------------------------------
    % ls ~/ [←]
    dir1   mbox   mbox~
    % []
    ----------------------------------------------------------------------
    
  4. ls -l コマンドを使って、作成されたディレクトリが存在することを確認す る。
    ----------------------------------------------------------------------
    % ls -l ~/ [←]
    total 3
    drwxr-xr-x  2 ta08          512 Jan  9 23:10 dir1
    -rw-------  1 ta08          609 Jan  9 21:07 mbox
    -rw-------  1 ta08          304 Jan  9 21:07 mbox~
    % []
    ----------------------------------------------------------------------
    
  5. ls コマンドを使って、作成されたディレクトリの内容が空であることを 確認する。
    ----------------------------------------------------------------------
    % ls ~/dir1 [←]
    %
    ----------------------------------------------------------------------
    
  6. 作成したディレクトリを、rmdir コマンドで削除する。
    ----------------------------------------------------------------------
    % rmdir ~/dir1 [←]
    %
    ----------------------------------------------------------------------
    
  7. ls コマンドを使って、先ほど削除したディレクトリが確かに削除された ことを確認する。
    ----------------------------------------------------------------------
    % ls ~/ [←]
    dir1   mbox   mbox~
    % []
    ----------------------------------------------------------------------
    

■ファイル名の検索

ls コマンドを活用すると、簡単なファイル名の検索をすることができます。 次の例は、ディレクトリ /usr/bin の下にある a から始まるファイル名を 検索して表示させています。
----------------------------------------------------------------------
% ls /usr/bin/a* [←]
/usr/bin/acctcom          /usr/bin/align_equals     /usr/bin/atoplot
/usr/bin/adb              /usr/bin/ar               /usr/bin/atq
/usr/bin/addbib           /usr/bin/arch             /usr/bin/atrm
/usr/bin/adjacentscreens  /usr/bin/as               /usr/bin/awk
/usr/bin/aedplot          /usr/bin/at
% []
----------------------------------------------------------------------
このように、「*」は、任意の文字と対応します。「*」は、いろいろ所に使う ことができます。
a*
aから始まるファイル名
abc*
abcから始まるファイル名
*a
aで終わるファイル名
*a*
aを含むファイル名
*a*a*
aを2文字含むファイル名
*a*a*a*
aを3文字含むファイル名
a*b
aで始まりbで終わるファイル名

* と似た ものに、? があります。? は、任意の1文 字と対応します。また、[a-c]のように打つ方法もあります。これは、 a,b,c のいずれかに対応します。[a-z]と打つと、アルファベットの 小文字、[A-Z]では、アルファベットの大文字、[0-9]では、 数字に対応します。

*, ?, [...]によるファイル名の検索機能は、普通、 コマンドといっしょに使われます。しかし、他のコマンドでも、同じような機 能が働いています。たとえば、lsコマンドの代わりに、echo コマンドを使う こともできます。echo コマンドは、引数をそのまま画面に表示するコマンド です。

----------------------------------------------------------------------
% echo hello [←]
hello
% []
----------------------------------------------------------------------
echo と *, ?, [...]を組み合わせることができま す。
----------------------------------------------------------------------
% ls /usr/bin/a*b [←]
/usr/bin/adb     /usr/bin/addbib
% echo /usr/bin/a*b [←]
/usr/bin/adb /usr/bin/addbib
% ls -l /usr/bin/a*b [←]
lrwxrwxrwx  1 root           14 Mar 18  1993 /usr/bin/adb ->
../kvm/adb/adb
-rwxr-xr-x  1 root        16384 Jul 24  1992 /usr/bin/addbib
% echo -l /usr/bin/a*b [←]
-l /usr/bin/adb /usr/bin/addbib
% []
----------------------------------------------------------------------

ディレクトリ /usr/bin/ には、いろいろな名前のプログラム(コマンド) が、ファイルとして保存されている。ここにある、次のような名前のプログラ ムを検索してみなさい。