目次 | 索引 |
---|---|
情報処理Iでは、ファイルとディレクトリ(フォルダ)について学びました。 ここでは、ファイルとディレクトリについて復習します。
ファイル ( file )とは、コンピュータシステムにおけるデータ単位の一つです。 ファイルは、バイトデータの列という構造を持ちます。 ファイルには、システム上に永続的に保存できるという特徴があります。
ファイルは、テキストファイルとバイナリファイルの大きく2つに分類されます。 テキストファイル ( text file )とは、単にバイトデータの列ではなく、文字符号の列と解釈できるファイルです。 バイナリファイル ( binary file )とは、テキストファイルでないファイルです。
これまでに取り扱った中では、HTMLファイルがテキストファイル、画像ファイルがバイナリファイルです。 なお、ワープロソフトの保存ファイルは、一般的にバイナリファイルです。 これは、文字の位置、大きさなどのデータが、文字符号以外で表現され、ファイルに保存されるからです。
ディレクトリ ( directory )とは、コンピュータシステムにおけるデータ単位の一つです。 ディレクトリは、ファイルの登録データを保持します。 ファイルと同様、ディレクトリもシステム上に永続的に保存できます。 なお、ディレクトリは、 フォルダ ( folder )ともよばれます。
ディレクトリを用いますと、ファイルの分類ができます。 何らかの関連性のあるファイルを、同じディレクトリに登録すれば、ファイルを分類したことになります。 ファイルを分類することには、
などの利点があります。
実は、ディレクトリには、ファイルだけでなくディレクトリも登録できます。 ディレクトリに(他の)ディレクトリが登録できる機能を、 階層的ディレクトリ ( hierarchical directory )とよびます。 階層的ディレクトリによって、ファイルだけでなく、ディレクトリも分類できます。 つまり、ファイルを分類してディレクトリに登録し、それらのディレクトリを分類してより上位のディレクトリに登録し、さらにそれらのディレクトリを分類してさらに上位のディレクトリに登録し、…ということができるのです。
階層的ディレクトリでは、 ルートディレクトリ ( root directory )とよばれる特別なディレクトリが用意されます。 すべてのファイルはルートディレクトリに登録されているか、ルートディレクトリに登録されているディレクトリに登録されているか、ルートディレクトリに登録されているディレクトリに登録されているディレクトリに登録されているか、…のいずれかです。
階層的ディレクトリは、木の構造としてとらえると分かりやすくなります。 以下は、木の構造として描かれた階層的ディレクトリの例です。 木の根(図の一番上)がルートディレクトリに対応します。 ルートディレクトリにディレクトリ home や tmp が登録され、ディレクトリ home にディレクトリ b00a や b00c が登録され、…、ディレクトリ ip2a にファイル ex1.html と ex1.html~ が登録されていることを表しています。
| +-----+-----+---.. | | home tmp | : +-----+-----+---.. | | b00a b00c | : +-----+-----+---.. | | b00a001 b00a002 | : +-----+-----+-----------+-----------+ | | | | Mail Maildir WABI WWW-local : : : | +-----------+-----------+-----+-----+ | | | | index.html index.html~ ip2a photo.jpg | +-----+-----+ | | ex1.html ex1.html~
パス名 ( pathname )とは、階層的ディレクトリにあるファイルやディレクトリを参照する名前です。 パス名には絶対パス名と相対パス名があります。 ファイルの 絶対パス名 ( absolute pathname )とは、記号 / から始まり、階層的ディレクトリを表す木の根から順にたどり、そのファイルに至るまでのディレクトリ名とファイル名を、記号 / で区切って書き並べたものです。 ディレクトリの絶対パス名も同様に、記号 / から始まり、木の根からそのディレクトリに至るまでのディレクトリ名を、記号 / で区切って書き並べたものです。 なお、ルートディレクトリは単に / です。
例えば、図の最も下のファイル ex1.html の絶対パス名は
/home/b00a/b00a001/WWW-local/ip2a/ex1.html
です。 また、下から2段目のファイル index.html の絶対パス名は
/home/b00a/b00a001/WWW-local/index.html
です。 ディレクトリ ip2a の絶対パス名は
/home/b00a/b00a001/WWW-local/ip2a
です。
絶対パス名を用いますと、階層的ディレクトリにあるファイルやディレクトリが確実に参照できます。 しかし、いちいち木の根からディレクトリ名を書き並べるのは大変です。 ファイルの 相対パス名 ( relative pathname )とは、木の根からではなく、カレントディレクトリから順にたどり、そのファイルに至るまでのディレクトリ名とファイル名を、記号 / で区切って書き並べたものです。 ここで カレントディレクトリ ( current directory )とは、その時の操作の基準となるディレクトリです。 ディレクトリの相対パス名も同様に、カレントディレクトリから順にたどり、そのディレクトリに至るまでのディレクトリ名を、記号 / で区切って書き並べたものです。 先頭に記号 / がつかないことに注意してください。
: | b00a001 | +-----+-----+-----------+-----------+ | | | | Mail Maildir WABI WWW-local : : : | +-----------+-----------+-----+-----+ | | | | index.html index.html~ ip2a photo.jpg | +-----+-----+ | | ex1.html ex1.html~
例えば、カレントディレクトリが WWW-local であるとき、ファイル ex1.html の相対パス名は ip2a/ex1.html です。 カレントディレクトリが ip2a のときは、単に ex1.html となります。 カレントディレクトリが b00a001 であるとき、ディレクトリ ip2a の相対パス名は WWW-local/ip2a です。 カレントディレクトリが WWW-local のときは、単に ip2a となります。
相対パス名が、カレントディレクトリの下にあるファイルやディレクトリしか参照できないように思えますが、特別なディレクトリ名 .. を使えば、カレントディレクトリの上にあるものも参照できます。 ディレクトリ名 .. は、一つ上のディレクトリを意味します。 例えば、カレントディレクトリが ip2a であるとき、ファイル photo.jpg の相対パス名は ../photo.jpg ですし、ディレクトリ b00a001 の相対パス名は ../.. です。
.. の他にも特別なディレクトリ名があります。 以下の表を見てください。 ここで、 ホームディレクトリ ( home directory )とは、ユーザの個人的な利用のために割り当てられているディレクトリです。 情報処理センターでは、例えば学生番号b00a001のユーザに対しては、ディレクトリ
/home/b00a/b00a001
を割り当てています。 ユーザがログインしますと、ホームディレクトリが最初のカレントディレクトリになります。
名前 | 意味 |
---|---|
. | カレントディレクトリ |
.. | 一つ上のディレクトリ |
~ | 自分のホームディレクトリ |
~user | ユーザuserのホームディレクトリ |
その昔、コンピュータを利用するとき、ユーザはテレタイプとよばれる装置を操作しました。 テレタイプとは、タイプライタに電話がついたようなもので、ユーザが文字をタイプしますと、その文字列が電話回線を通じて遠くのコンピュータに伝わり、今度はコンピュータからの文字列が電話回線を通じてテレタイプに伝わり、紙に印刷されるという仕組みでした。
1回目の授業で用いた端末エミュレータは、このテレタイプのような端末装置のまねをするソフトです。 タイプライタの代りにキーボードとディスプレーを使いますが、文字列のやり取りでコンピュータを操作する点は同じです。
どこにでもパソコンがあり、グラフィカルなウィンドウを見ながらマウスでパソコンが操作できる現在、なぜテレタイプ時代のまねをするのか不思議に思えるでしょう。 端末エミュレータ(端末ソフト)は、以下のような状況では役に立つのです。
端末エミュレータの中では、 シェル ( shell , 具体的には tcsh)とよばれる機能が働いています。 シェルは、ユーザから入力された文字列を解釈し、それに応じたプログラムを実行させます。 シェルを用いますと、コンピュータに登録されているほとんどすべてのプログラムが実行できます。
ここで、端末エミュレータを開きます。 ウィンドウの左下に次のような文字列が表示されているのに注目してください。
b00a001@Ampere:~%
この文字列を プロンプト ( prompt )といいます。 b00a001 の部分と Ampere の部分は、ユーザとコンピュータによって異なります。 プロンプトの表示は、シェルがユーザからの入力を待っていることを意味します。
次に、入力したい文字列の文字を順にタイプしてください。 間違ってタイプしたときは、Delete キーをタイプすると取り消せます。 Enter キーをタイプすると入力終了となります。
例えば、
b00a001@Ampere:~% xyz xyz: Command not found. b00a001@Ampere:~%
シェルに文字列 xyz を入力したわけですが、そのコマンドは見つからないというメッセージが表示されました。 続いて、文字列 date を入力してみます。
b00a001@Ampere:~% date Thu Jun 13 09:26:49 JST 2002 b00a001@Ampere:~%
今度は、今日の日付と今の時刻が表示されました。
コンピュータに登録されているプログラムには名前がついています。 例えば、今日の日付と今の時刻を出力するプログラムの名前は date です。 シェルは、入力が与えられますと、その文字列をプログラムの名前と見なします。 そして、その名前をある順番にしたがってシステムの中から検索します。 もし見つかれば、その名前のプログラムを実行します。 なければ、コマンドが見つからないというメッセージを表示します。 この例では、xyz という名前が見つからなかったので、コマンドが見つからないと表示され、date という名前が見つかったので、今日の日付と今の時刻が表示されたのです。
実は、シェルへの入力で、プログラムの名前と見なされるのは、空白で区切られた最初の成分だけです。 残りの成分は、そのプログラムへの引数と見なされます。 引数 ( argument )とは、プログラムを実行するときに渡されるデータです。 例えば、カレンダーを出力するプログラム(名前は cal )では、
b00a001@Ampere:~% cal 2002年 6月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 b00a001@Ampere:~% cal 7 2002 2002年 7月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 b00a001@Ampere:~%
引数を書かなければ、今月のカレンダーが出力されます。 引数を書きますと、西暦2002年7月というデータがプログラムに渡され、その月のカレンダーが出力されます。
プログラムによっては、必ず引数を書かなくてはいけません。 また、引数の形式もプログラムによってまちまちです。 引数の順序を変えますと、普通はプログラムに異なるデータが渡されます。 例えば、 cal 2002 7 では、西暦7年2002月となります。
プログラムの名前とその引数の並びを、ここでは コマンド ( command )とよぶことにします。 端末エミュレータでは、コマンドを入力することによってコンピュータを操作することになります。 文字列をタイプするのは面倒かもしれませんが、コマンドさえ覚えれば、コンピュータに備わっているほとんどすべての機能を働かせることができるのです。
プログラムの名前は知っているけれど、何をするものなのか分からないときや、引数の書き方を確認したいときは、マニュアルがすぐに見られれば便利です。 UNIXでは、コマンドでマニュアルが表示できます。 これを、 オンラインマニュアル ( on-line manual )といいます。
オンラインマニュアルを表示するコマンドは man name です。 ここで、 name はプログラムの名前です。 例えば、
b00a001@Ampere:~% man cal
と入力しますと、cal コマンドのマニュアルが表示されます。 マニュアルを表示しているときのキーボードの割り当ては、以下の表の通りです。
キーボード | 機能 |
---|---|
q | 表示終了 |
h | ヘルプの表示 |
Space | 一画面分次の表示 |
Enter | 一行分次の表示 |
b | 一画面分前の表示 |
k | 一行分前の表示 |
情報処理Iでは、ファイルマネージャを用いてファイルの管理をしました。 この授業では、端末エミュレータを用いてファイルの管理をします。 ファイルの管理に関する基本的なコマンドを説明します。
pwdコマンド は、カレントディレクトリの絶対パス名を出力します。
b00a001@Ampere:~% pwd /home/b00a/b00a001 b00a001@Ampere:~%
lsコマンド は、引数がなければ、カレントディレクトリの内容を並べて出力します。 引数がディレクトリのパス名ならば、そのディレクトリの内容を並べて出力します。 引数がファイルのパス名ならば、そのパス名を出力します。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% ls WWW-local index.html index.html~ ip2a/ photo.jpg b00a001@Ampere:~% ls WWW-local/ip2a ex1.html ex1.html~ b00a001@Ampere:~% ls WWW-local/ip2a/ex1.html WWW-local/ip2a/ex1.html b00a001@Ampere:~%
lessコマンド は、ファイルのパス名を引数に取り、そのファイルの内容を表示します。 バイナリファイルは指定しないでください。 表示しているときのキーボードの割り当ては、 man コマンドと同じです。
キーボード | 機能 |
---|---|
q | 表示終了 |
h | ヘルプの表示 |
Space | 一画面分次の表示 |
Enter | 一行分次の表示 |
b | 一画面分前の表示 |
k | 一行分前の表示 |
cdコマンド は、引数がなければカレントディレクトリをホームディレクトリに変更します。 引数がディレクトリのパス名ならば、カレントディレクトリをそのディレクトリに変更します。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% cd WWW-local b00a001@Ampere:~/WWW-local% pwd /home/b00a/b00a001/WWW-local b00a001@Ampere:~/WWW-local% cd b00a001@Ampere:~% pwd /home/b00a/b00a001 b00a001@Ampere:~%
cpコマンド には、2つの形式があります。
cp file1 file2
では、パス名 file1 で表されるファイルの内容を、パス名 file2 で表されるファイルにコピーします。
cp file... directory
では、パス名の並び file... で表される一つ以上のファイルの内容を、パス名 directory で表されるディレクトリの中に、それぞれ同じファイル名でコピーします。
もしコピー先のファイルがすでにあれば、そのファイルに上書きされます。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% ls WWW-local index.html index.html~ ip2a/ photo.jpg b00a001@Ampere:~% cd WWW-local/ip2a b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW-local/ip2a% cp ex1.html test.txt b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test.txt b00a001@Ampere:~/WWW-local/ip2a%
rmコマンド は、ファイルのパス名を引数に取り、そのファイルを消去します。
b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test.txt b00a001@Ampere:~/WWW-local/ip2a% rm test.txt rm: test.txt を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW-local/ip2a%
mvコマンド には、2つの形式があります。
mv file1 file2
では、パス名 file1 で表されるファイルを、パス名 file2 で表されるファイルに移動します。 同じディレクトリの中で移動させますと、ファイル名を変更したことになります。
mv file... directory
では、パス名の並び file... で表される一つ以上のファイルを、パス名 directory で表されるディレクトリの中に移動します。
もし移動先のファイルがすでにあれば、そのファイルに上書きされます。
b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW-local/ip2a% cp ex1.html test2.txt b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test2.txt b00a001@Ampere:~/WWW-local/ip2a% mv test2.txt test3.txt b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test3.txt b00a001@Ampere:~/WWW-local/ip2a%
mkdirコマンド は、ディレクトリのパス名を引数に取り、その名前のディレクトリを作成します。
b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test3.txt b00a001@Ampere:~/WWW-local/ip2a% mkdir trial b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ test3.txt trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial b00a001@Ampere:~/WWW-local/ip2a% mv test3.txt trial/test4.txt b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial test4.txt b00a001@Ampere:~/WWW-local/ip2a%
rmdirコマンド は、ディレクトリのパス名を引数に取り、そのディレクトリを消去します。 ディレクトリが消去できるのは、その中にファイルもディレクトリもなく、カレントディレクトリがそのディレクトリより上であるときに限ります。
b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial test4.txt b00a001@Ampere:~/WWW-local/ip2a% rm trial/test4.txt rm: trial/test4.txt を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW-local/ip2a% ls trial b00a001@Ampere:~/WWW-local/ip2a% rmdir trial b00a001@Ampere:~/WWW-local/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW-local/ip2a%
今日は、レポート課題を出す代りに、授業内容に関するアンケートを行います。 以下の質問に答え、回答をkonishi@twcu.ac.jpあてにメールで送ってください。 メールには、学生番号、氏名、科目名、授業の日付け(6/13)を明記してください。 アンケートに回答すれば、今日の授業に出席したものと見なします。
A子のディレクトリの使い方が適切か否かについて、自由に議論してください。jan-aug | +---------------+---------------+ | | jan-apr may-aug | | +-------+-------+ +-------+-------+ | | | | jan-feb mar-apr may-jun jul-aug | | | | +---+---+ +---+---+ +---+---+ +---+---+ | | | | | | | | jan.dat feb.dat mar.dat apr.dat may.dat jun.dat jul.dat aug.dat