目次 | 索引 |
---|---|
情報処理Iでは、階層的ファイルシステムについて学びました。 ファイルシステムは、木の構造としてとらえると分かりやすくなります。 以下は、木の構造として描かれたファイルシステムの例です。
パス名(pathname)とは、ファイルシステムにあるファイルやディレクトリを参照する名前です。 パス名には絶対パス名と相対パス名があります。 ファイルの絶対パス名(absolute pathname)とは、記号 / から始まり、ファイルシステムを表す木の根から順にたどり、そのファイルに至るまでのディレクトリ名とファイル名を、記号 / で区切って書き並べたものです。 ディレクトリの絶対パス名も同様に、記号 / から始まり、木の根からそのディレクトリに至るまでのディレクトリ名を、記号 / で区切って書き並べたものです。 なお、木の根に相当するディレクトリをルートディレクトリ(root directory)と呼びます。 例えば、図の最も下のファイル ex1.html の絶対パス名は| +-----+-----+---.. | | home tmp | : +-----+-----+---.. | | b00a b00c | : +-----+-----+---.. | | b00a001 b00a002 | : +-----+-----+-----------+-----------+ | | | | Mail Maildir WABI WWW : : : | +-----------+-----------+-----+-----+ | | | | index.html index.html~ ip2a mike.jpg | +-----+-----+ | | ex1.html ex1.html~
/home/b00a/b00a001/WWW/ip2a/ex1.html
です。 また、下から2段目のファイル index.html の絶対パス名は
/home/b00a/b00a001/WWW/index.html
です。 ディレクトリ ip2a の絶対パス名は
/home/b00a/b00a001/WWW/ip2a
です。
絶対パス名を用いると、ファイルシステムにあるファイルやディレクトリが確実に参照できます。 しかし、いちいち木の根からディレクトリ名を書き並べるのは大変です。 ファイルの相対パス名(relative pathname)とは、木の根からではなく、カレントディレクトリから順にたどり、そのファイルに至るまでのディレクトリ名とファイル名を、記号 / で区切って書き並べたものです。 ここでカレントディレクトリ(current directory)とは、その時の操作の基準となるディレクトリです。 ディレクトリの相対パス名も同様に、カレントディレクトリから順にたどり、そのディレクトリに至るまでのディレクトリ名を、記号 / で区切って書き並べたものです。 先頭に記号 / がつかないことに注意してください。
: | b00a001 | +-----+-----+-----------+-----------+ | | | | Mail Maildir WABI WWW : : : | +-----------+-----------+-----+-----+ | | | | index.html index.html~ ip2a mike.jpg | +-----+-----+ | | ex1.html ex1.html~
例えば、カレントディレクトリが WWW であるとき、ファイル ex1.html の相対パス名は ip2a/ex1.html です。 カレントディレクトリが ip2a のときは、単に ex1.html となります。 カレントディレクトリが b00a001 であるとき、ディレクトリ ip2a の相対パス名は WWW/ip2a です。 カレントディレクトリが WWW のときは、単に ip2a となります。
相対パス名が、カレントディレクトリの下にあるファイルやディレクトリしか参照できないように思えますが、特別なディレクトリ名 .. を使えば、カレントディレクトリの上にあるものも参照できます。 特別なディレクトリ名 .. は、一つ上のディレクトリを意味します。 例えば、カレントディレクトリが ip2a であるとき、ディレクトリ b00a001 の相対パス名は ../.. ですし、ファイル mike.jpg の相対パス名は ../mike.jpg です。
.. の他にも特別なディレクトリがあります。 次の表を参照してください。 ここで、ホームディレクトリ(home directory)とは、ログインしたときにユーザに位置付けれられるディレクトリです。
指定 | 意味 |
---|---|
. | カレントディレクトリ |
.. | 一つ上のディレクトリ |
~ | 自分のホームディレクトリ |
~user | ユーザuserのホームディレクトリ |
端末エミュレータの中では、シェル(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 14 09:19:49 JST 2001 b00a001@Ampere:~%
今度は、今日の日付と今の時刻が表示されました。
コンピュータに登録されているプログラムには名前がついています。 例えば、今日の日付と今の時刻を出力するプログラムの名前は date です。 シェルは、入力が与えられますと、その文字列をプログラムの名前と見なします。 そして、その名前をある順番にしたがってシステムの中から検索します。 もし見つかれば、その名前のプログラムを実行します。 なければ、コマンドが見つからないというメッセージを表示します。 この例では、xyz という名前が見つからなかったので、コマンドが見つからないと表示され、date という名前が見つかったので、今日の日付と今の時刻が表示されたのです。
実は、シェルへの入力で、プログラムの名前と見なされるのは、空白で区切られた最初の成分だけです。 残りの成分は、そのプログラムへの引数(argument)と見なされます。 引数とは、プログラムに与えられる情報です。 例えば、カレンダーを出力するプログラム(名前は cal)では、
b00a001@Ampere:~% cal 2001年 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 2001 2001年 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:~%
引数を書かなければ、今月のカレンダーが出力されます。 引数を書きますと、西暦2001年7月という情報がプログラムに与えられ、その月のカレンダーが出力されます。
プログラムによっては、必ず引数を書かなくてはいけません。 また、引数の形式もプログラムによってまちまちです。 引数の順序を変えますと、普通はプログラムに異なる情報が与えられます。 例えば、cal 2001 7 では、西暦7年2001月となります。
プログラムの名前とその引数の並びを、ここではコマンド(command)とよぶことにします。 端末エミュレータでは、コマンドを入力することによってコンピュータを操作することになります。 文字列をタイプするのは面倒かもしれませんが、コマンドさえ覚えれば、コンピュータに備わっているほとんどすべての機能を働かせることができるのです。
プログラムの名前は知っているけれど、何をするものなのか分からないときや、引数の書き方を確認したいときは、マニュアルがすぐに見られれば便利です。 UNIXでは、コマンドでマニュアルが表示できます。 これを、オンラインマニュアルといいます。
オンラインマニュアルを表示するコマンドは 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/ b00a001@Ampere:~% ls WWW index.html index.html~ ip2a/ mike.jpg b00a001@Ampere:~% ls WWW/ip2a ex1.html ex1.html~ b00a001@Ampere:~% ls WWW/ip2a/ex1.html WWW/ip2a/ex1.html b00a001@Ampere:~%
lessコマンド は、ファイルのパス名を引数に取り、そのファイルの内容を表示します。 表示しているときのキーボードの割り当ては、 man コマンドと同じです。
キーボード | 機能 |
---|---|
q | 表示終了 |
h | ヘルプの表示 |
Space | 一画面分次の表示 |
Enter | 一行分次の表示 |
b | 一画面分前の表示 |
k | 一行分前の表示 |
cdコマンド は、引数がなければカレントディレクトリをホームディレクトリに変更します。 引数がディレクトリのパス名ならば、カレントディレクトリをそのディレクトリに変更します。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW/ b00a001@Ampere:~% cd WWW b00a001@Ampere:~/WWW% pwd /home/b00a/b00a001/WWW b00a001@Ampere:~/WWW% 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/ b00a001@Ampere:~% cd WWW b00a001@Ampere:~/WWW% ls index.html index.html~ ip2a/ mike.jpg b00a001@Ampere:~/WWW% cd ip2a b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW/ip2a% cp ex1.html test.txt b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test.txt b00a001@Ampere:~/WWW/ip2a%
rmコマンド は、ファイルのパス名を引数に取り、そのファイルを消去します。
b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test.txt b00a001@Ampere:~/WWW/ip2a% rm test.txt rm: test.txt を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW/ip2a%
mvコマンド には、2つの形式があります。
mv file1 file2
では、パス名 file1 で表されるファイルを、パス名 file2 で表されるファイルに移動します。 同じディレクトリの中で移動させますと、ファイル名を変更したことになります。
mv file... directory
では、パス名の並び file... で表される一つ以上のファイルを、パス名 directory で表されるディレクトリの中に移動します。
もし移動先のファイルがすでにあれば、そのファイルに上書きされます。
b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW/ip2a% cp ex1.html test2.txt b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test2.txt b00a001@Ampere:~/WWW/ip2a% mv test2.txt test3.txt b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test3.txt b00a001@Ampere:~/WWW/ip2a%
mkdirコマンド は、ディレクトリのパス名を引数に取り、その名前のディレクトリを作成します。
b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test3.txt b00a001@Ampere:~/WWW/ip2a% mkdir trial b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ test3.txt trial/ b00a001@Ampere:~/WWW/ip2a% ls trial b00a001@Ampere:~/WWW/ip2a% mv test3.txt trial b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ trial/ b00a001@Ampere:~/WWW/ip2a% ls trial test3.txt b00a001@Ampere:~/WWW/ip2a%
rmdirコマンド は、ディレクトリのパス名を引数に取り、そのディレクトリを消去します。 ディレクトリが消去できるのは、その中にファイルもディレクトリもなく、カレントディレクトリがそのディレクトリより上であるときに限ります。
b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ trial/ b00a001@Ampere:~/WWW/ip2a% ls trial test3.txt b00a001@Ampere:~/WWW/ip2a% rm trial/test3.txt rm: trial/test3.txt を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW/ip2a% ls trial b00a001@Ampere:~/WWW/ip2a% rmdir trial b00a001@Ampere:~/WWW/ip2a% ls ex1.html ex1.html~ b00a001@Ampere:~/WWW/ip2a%
今日は、レポート課題を出す代わりに、授業内容に関するアンケートを行ないます。 以下の質問に答え、回答をkonishi@twcu.ac.jpあてにメールで送ってください。 メールには、学生番号、氏名、科目名、授業の日付けを明記してください。 アンケートに回答すれば、今日の授業に出席したものと見なします。
/ directory / file または / fileという形に限られます。 「姓名式ファイルシステム」が使い物になるかどうか、自由に議論してください。