言語処理系、ファイルの整理

					2012年06月12日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2012/2012-06-12
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■補足

「画面指向」からの脱却と「モデル」の構築へ

コンピュータを操作する時の態度:

コンピュータと人間

■コンパイラとインタプリタ

人間が書いたプログラムを実行する方法には、大きく2種類ある。
コンパイラ(compiler, 翻訳系)を使う
人間が書いたプログラム(ソース・プログラム) を、一度、機械語に変換する。 機械語に変換するプログラムを、「コンパイラ」という。 実行時には、コンパイラは不要。
インタプリタ(interpreter, 通訳系)を使う
人間が書いたプログラムを(機械語に変換することなく)直接実行する。 このプログラムを実行するプログラムを、インタプリタという。 実行時にも、インタプリタが必要。

ソース・プログラム、コンパイラ、プロセス、CPU

図? コンパイラ方式でのプログラムの実行

プログラム、インタプリタのプロセス、CPU

図? インタプリタ方式でのプログラムの実行

その中間的な方法もある。

ソース・プログラム、中間形式、インタプリタのプロセス、CPU

図? コンパイラとインタプリタの併用によるプログラムの実行

■C言語

プログラミング言語の1つ。情報科学類の多くの必修科目で必要となる。
プログラミング入門I (1年2学期)
http://www.coins.tsukuba.ac.jp/syllabus/GB10714_GB10724.html
プログラミング入門II (1年3学期)
http://www.coins.tsukuba.ac.jp/syllabus/GB10734_GB10744.html
データ構造とアルゴリズム (2年1学期)
http://www.coins.tsukuba.ac.jp/syllabus/GB11911_GB11921.html
データ構造とアルゴリズム実験 (2年1学期)
http://www.coins.tsukuba.ac.jp/syllabus/GB11916_GB11926.html

コンピュータ・リテラシでは、夏休みに予習するために、C言語で書いたプロ グラムをどうやって学類のコンピュータで動作させるかを説明する。

The Unix Super Text 第57章 Cの使いかた 参照

◆ccコマンド

C言語のソース・プログラムは、Emacs などのテキスト・エディタで 作成する。Cコンパイラは、cc (または gcc)というコマンドで、 端末の中でシェルから実行するのが一般的。

$ mkdir ~/c_progs [←]
$ cd ~/c_progs [←]
$ ls [←]
(何も表示されない。mkdir 直後は、ディレクトリは空。)
$ cp ~yas/public_html/coins/literacy-2012/2012-06-12/ex/hello.c . [←]
$ ls [←]
hello.c
$ cat hello.c  [←]
#include <stdio.h>

#define NAME "(name)"

int main()
{
        printf("Hello, %s\n", NAME );
}
$ cc hello.c  [←]
$ ls [←]
a.out   hello.c
$ ./a.out  [←]
Hello, (name)
$ []
cc は、C compiler の意味。gcc は、GNU project が開発している cc の意味。 MacOSX では、cc と打っても gcc が実行される。

◆エラー

(C言語で)プログラムを記述していると、エラーの山に遭遇する。人間は間違え るものであることをさとることになる。エラーにいちいちめげていてはプログ ラムは書けない。
$ cat error.c [←]
#include <stdio.h>

#define NAME "(name)"

int main()
{
        printf("Hello, %s\n", NAME )
}
$ cc error.c [←]
error.c: In function 'main':
error.c:8: error: parse error before '}' token
$ []
この場合は、cc は、実行ファイルを作らない。 ファイル名と行番号をたよりに、プログラムを修正して、 エラーが出なくなるまで cc を実行する。

コンパイル・エラーがでなくなっても、プログラムは完成ではない。コンパイ ラにはわからない(分かり得ない) 間違いは残っている可能性がある。

◆cc -o

cc コマンドに -o オプションを付けると、a.out ではなく、-o の次に与えら れた名前のファイルに実行可能なプログラムが保存される。
$ ls [←]
a.out   hello.c
$ rm a.out  [←]
$ ls [←]
hello.c
$ cc -o hello hello.c  [←]
$ ls [←]
hello   hello.c
$ ./hello  [←]
Hello, (name)
$ []

◆ヘッダファイル

C言語のソース・プログラムは、2種類に分類される。
拡張子 .c
関数定義を記述する。 C言語のプログラムは、 関数と呼ばれる小さなプログラムの集合で構成される。
拡張子 .h (ヘッダ・ファイル)
定数やデータ構造の定義を記述する。 複数の .c のプログラムに、#include で読み込まれる。
stdio.h などのヘッダ・ファイルは、/usr/include/ 以下に ある。他の場所にある時には、cc コマンドに -I オプションで 指定する。

◆ライブラリ

(大きな)プログラムを記述する時に共通で使える 関数(小さな プログラム)を集めたもの。cc コマンドは、libc (library C)という ライブラリにある関数を標準で自動的に取り出して結合する(リンクする)。 libc などよくつかわれるライブラリは、 /usr/lib にある。

libc 以外のライブラリを使う時には、cc に -l オプションを付ける。 たとえば、三角関数 sin(), 指数関数 exp() 等を使う時には、-lm (mathematicsの意味)を指定する。 /usr/lib 以外の場所にあるライブラリを使うには、-L オプションで ディレクトリのパス名を与える。

■Java言語

プログラミング言語の1つ。多くの情報科学のいくつかの選択科目で必要となる。

C言語と比べて近代的な機能、豊富なライブラリがある。 「オブジェクト指向」は、難しい。

コンパイラとインタプリタの2つを使って動作する。

javac コマンド
コンパイラ。Java ソースプログラムを読み込み、 「Javaバイトコード」と呼ばれる 中間的なプログラム に変換する。
java コマンド
「Javaバイトコード」を解釈実行する。

◆javac コマンドと java コマンド

以下は、ディレクトリを作成し、Hello.java をコピーし、コンパイルして、実 行している。
$ mkdir ~/java_progs [←]
$ cd ~/java_progs [←]
$ ls [←]
(何も表示されない。mkdir 直後は、ディレクトリは空。)
$ cp ~yas/public_html/coins/literacy-2012/2012-06-12/ex/Hello.java . [←]
$ ls [←]
Hello.java
$ cat Hello.java  [←]
class Hello
{
    static String Name = "(name)";
    public static void main(String args[])
    {
        System.out.printf("Hello, %s\n",Name);
    }
}
$ javac Hello.java  [←]
$ ls [←]
Hello.class     Hello.java
$ java Hello [←]
Hello, (name)
$ []
javac コマンドは、拡張子 .java のソース・プログラムを コンパイルし、結果を 拡張子 .class のファイルに保存する。 javac コマンドに複数のソース・ファイルを与えてもよい。 それぞれの .java に対して .class を生成する。

java コマンドは、拡張子 .class の、拡張子を取り除いたファイル名 を与える。java name.class と、.class まで与える とエラーになる。

java コマンドに与える .class ファイルには、特定の形式の main 関 数 (main メソッド) が含まれている必要がある。

◆Eclipse

Java のプログラムを開発するためには、Emacs と javac, java コマンド以外 に、Eclipse という統合開発環境を使う方法もある。これは、エディタとコン パイラが一体的に利用できる。強力な補完機能、見やすいエラー表示、大域的 なソース・プログラムの整理(リファクタリング)が容易である。

学類コンピューティング環境では、Dock に Eclipse を実行すためのアイ コンがある。

■Unixコマンドによるファイルの整理

The Unix Super Text 第9章 ファイルとディレクトリ 参照The Unix Super Text 第21章 ファイルとディレクトリの高度な操作 参照

ホーム・ディレクトリ、 Desktop や Documents(書類)に、多くのファイルを放置することはよくない。 ディレクトリを作成し、整理すべきである。 1つの目安は、ls コマンドで 1画面に入らない時には分割する。

◆ディレクトリの作成

mkdir (make directoryr)コマンドを使う。
$ mkdir dirname [←]
この結果、dirnameという名前のディレクトリが作らる。

◆ファイルの名前を変更

ファイル名を変更するには mv (move) コマンドを使う。
$ mv oldname newname [←]
この結果、ファイルoldfileのファイル名をnewnameに変更される。

ここで、newname のファイルが存在した場合、元の newname は消されてしまう。

◆ディレクトリ名の変更

mvコマンドは、ディレクトリの名前を変更するために使える。

$ mkdir dir1 [←]
$ ls  [←]
dir1
$ mv dir1 dir2 [←]
$ ls  [←]
dir2
$ []

◆ファイルのディレクトリへの移動

ファイル名を変更する mv (move) コマンドは、 同じディレクトリだけでなく、他のディレクトリに対しても使える。
$ mkdir ~/dir1 [←]
$ mv oldname ~/dir1/newname [←]
この結果、カレント・ワーキング・ディレクトリにある ファイルoldfileのファイル名は、 ~/dir1/newnameに変更される。

次のように、ディレクトリだけを指定することもできる。

$ mv name ~/dir1/ [←]
この場合、次のものと同じになる。
$ mv name ~/dir1/name [←]
また、変更先にディレクトリを指定する mv では、ファイル名は1個でなくて も複数でもよい。
$ mv file1 file2 file3 ~/dir1 [←]
シェルの ファイル名置換 を使うと便利。
$ ls file[1-3] [←]
(ファイル名の確認)
$ mv file[1-3] ~/dir1 [←]
$ ls file? [←]
(ファイル名の確認)
$ mv file? ~/dir1 [←]
$ ls file* [←]
(ファイル名の確認)
$ mv file* ~/dir1 [←]

◆ファイルを消す

意義

ファイルを消すには、rm (remove) コマンドを用いる。

$ rm file1 [←]
このファイル file1 が削除される。

rm コマンドで消してしまったファイルは、一般的には2度と戻らない。 消す前に、本当に不要かどうかを確認すること。

◆rm -i

rm コマンドには、-i オプションがあり、ファイルを消すかどうかを対話的 (interactive)に y/n で聞いてくる。消してもよい時には、y と答える。

コマンド名の置換え(alias)等て、rm を rm -i に変えることは、一般的には勧 められない。「rm -i [←] y」という操作が、一連の操作として身に付い てしまうので。

◆ディレクトリの削除

ディレクトリを削除するには、 rmdir (remove directory) コマンドを使う。
$ rmdir dirname [←]
この結果、 ディレクトリdirnameが削除される。

空でないディレクトリは、rmdir()コマンドでは 「Directory not empty」 というエラー・メッセージが表示され削除できない。 この場合は、子供のディレクトリやファイル を削除してからもう一度削除する。

◆ファイルサーバによる古いファイルの自動的な保存

手引き 2.2.8 参照

coins のファイルサーバには、過去のある瞬間の整合性がある状態(スナップ ショット)を自動的に保存する機能がある。過去2週間程度のファイルの状態が わかる。

$ ls /home/.snapshot/ [←]
hourly.0                        nightly.0                       nightly.4
hourly.1                        nightly.1                       nightly.5
hourly.2                        nightly.10                      nightly.6
hourly.3                        nightly.11                      nightly.7
hourly.4                        nightly.12                      nightly.8
hourly.5                        nightly.13                      nightly.9
hourly.6                        nightly.2
lilac-fss(0151728424)_vol1.296  nightly.3
$
nightly*
夜中(日単位)での過去の状態
hourly*
時間単位での過去の状態
たとえば、10日前の ~/.bashrc を次のようにして表示できる。
$ cat /home/.snapshot/nightly.9/prof/yas/.bashrc [←]
cp でコピーしたり、emacs で読むこともできる。

■ファイルとディレクトリの木構造を扱うプログラム

標準では単一のファイルやディレクトリを扱うコマンドも、木構造を扱うこと ができるものもある。 木構造をうまく扱うには、「再帰的な(recursively)」処理が重要になる。 これは、自分と同じ処理を、木構造の子供の節にも行うことである。 くわしくは、2年生の「データ構造とアルゴリズム」で扱う。

例:

再帰的な処理を行わせるためには、大文字 -R (recursively) オプションを取 るコマンドも多いが、小文字 -r のものもある。例: scp -r。 大文字でも小文字でもどちらでも受付けるものもある。

何もしないと、自動的に再帰的な処理を行うプログラムもある。例: tar, tree, find 等。

ディレクトリに対しても mv コマンドは有効である。ディレクトリの名前を mv で変更すると、木構造で考えると、それ以下のファイルの名前を全て変更し たことと同じ効果がある。

ファイルのコピーでは、以下で述べるシンボリック・リンク等の問題があるため、 cp -r では不十分なことが多い。

■木構造の制約と問題点

大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。

◆こうもりの分類問題

図13 こうもりの分類(1)

図13 こうもりの分類(1)

図14 こうもりの分類(2)

図14 こうもりの分類(2)

◆シンボリック・リンク/エイリアス/ショートカット

木構造は、ファイルを整理するのに非常に強力な構造である。しかし、それだ けでは、ファイルを整理するには不都合が起きる。それを解消するために、次 のような名前で呼ばれる仕組みが用意されている。

2つの節に、「別名」をつけて、2つの道からたどり着けるようにする。 (木構造では、1つの節にたどり着く道は、ただ1つしかない。)

注意:bash, csh の alias とファイル名の alias (Macintosh) は、まったくの別物。

図15 こうもりの分類(別名つき)

図15 こうもりの分類(別名つき)

◆ハイパーテキストとハイパーメディア

木構造を補う方法として、 ハイパーテキスト を使うことがある。

■シンボリック・リンク

シンボリック・リンク(symbolic link)は、Unix で、ファイルに別名をつける ための機能。「リンク」とは、木構造の枝の意味で、つまり、ファイル名を意 味する。シンボル(symbol)は、(数ではなくて)文字列であることを意味する。 シンボリック・リンク(symbolic link)は、文字列の形で、ファイルの別名を保 持している。

例:cc と gcc-4.2

$ ls -l /usr/bin/cc [←]
lrwxr-xr-x  1 root  wheel  7  6  1 11:47 /usr/bin/cc -> gcc-4.2
$ []
シンボリック・リンクは、ls -l で見ると、右端に l (小文字の L) と表示さ れる。 ファイル /usr/bin/cc を参照すると、gcc-4.2 (/usr/binにある)が使われる。

シンボリック・リンクを作成するには、ln -s コマンドを使う。

$ ln -s oldname newname [←]
この結果、newname でファイルを参照すると、 oldname というファイルが使われる。(このファイルは、 newnameoldname の2つの名前を持つ。)

◆cpコマンドとシンボリック・リンク

cp コマンドは、コピー元にシンボリック・リンクを指定しても、リンクの先の ファイルをコピーする。
$ cat file1-slink.text  [←]
file1
$ ln -s file1.text file1-slink.text  [←]
$ ls -l file1.text file1-slink.text  [←]
lrwxrwxrwx  1 yas  prof  10  6 13 12:13 file1-slink.text -> file1.text
-rw-r--r--  1 yas  prof   6  6 13 12:13 file1.text
$ cp file1-slink.text file2.text [←]
$ cat file2.text  [←]
file1
$ []

■MacOSX Finder によるファイルの整理

手引き 1.4.1 参照

MacOSX の Finder は、次のような役割を持つ。

◆MacOSX openコマンド

端末を開き、コマンドラインで操作をしている時、open コマンドを使うと ディレクトリを Finder で開くことができる。また、 アプリケーションを実行する(Finder でダブルクリックする) ことができる。

◆デスクトップ

ログインすると、何もウインドウを開いていない状態で「デスクトップ」と呼 ばれる特別の場所にあるファイルやディレクトリが画面に表示される。

デスクトップは、MacOSX では、ホーム・ディレクトリの下の 「~/Desktop」という名前のディレクトリに対応している。

◆ゴミ箱(trash)

Finder でファイルを削除する。この時、実際にファイルを削除するのではなく、 一度、「ゴミ箱」に入れる。 ゴミ箱に入れたファイルは、rm コマンドで削除したものと違って、(入れた直 後なら)元の状態にすることができる。Dock の「ゴミ箱」をクリックすると、 Finder でフォルダのように表示される。そこから、ドラッグで普通のフォルダ に移動させる。

注意事項

◆MacOSX alias

MacOSX には、Unix 系オペレーティング・システムで共通に使える シンボリック・リンクの他に、MacOSX 独自の(MacOS9以前から引き継いだ) 機能として、ファイル名に対するエイリアス(alias)の機能がある。

シンボリック・リンクとエイリアスの違い

■Emacs

◆Emacsのディレクトリ・エディタ

Emacs には、ディレクトリを表示して、ファイルを削除したり、ファイル名を 変える機能がある。これを dired (directory editor) という。 The Unix Super Text 19.4.4 (2) dired 参照

◆英語チュートリアル

Emacs にはチュートリアル機能(自習)がある。Emacs のキー操作は、英語の単 語を元に作れている。このことは、英語でチュートリアルを実施するとよくわ かる。 手引き 3.3.1 参照

■ネットワーク・ファイル・システム

ネットワーク・ファイル・システムとは、ネットワークを越えて別のコンピュー タにあるファイルをローカル・ディスクと同じように(コピーせずにそのまま) 利用するための仕組みである。 次のようなも種類(通信プロトコル)がある。 scp (ssh cp) 等でファイルをコピーする方法との違い オペレーティング・システムの違い等により、制約が生じることがある。

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(1601) Cプログラムのコンパイルと実行

ccコマンド」 の所で用いたhello.c をコピーし、コ ンパイルし、実行しなさい。

★練習問題(1602) Javaプログラムのコンパイルと実行

javac コマンドと java コマンド」で用いた Hello.java をコピーし、コンパイルして実行しなさい。

★練習問題(1603) ls -Rコマンド

ls コマンドには、-R (大文字 R, Recursive) というコマンドがあり、 引数で指定されたディレクトリに子供のディレクトリが含まれていたら、 その子供についても表示する(子供にも子供があればそれも表示する)。 この動きを確かめなさい。
$ cd ~ [←]
$ ls -R    . | lv [←]
$ ls -lR   . | lv [←]
$ ls -laR  . | lv [←]
-R オプションは、このようにしばしば-l オプションや -a オプションと一緒に使われる。また、-R オプションは、大 量の結果を表示することが多いので、パイプに出力してページャで表示するこ とが多い。 (これらのオプションを忘れた人は、man コマンドを見なさい。)

★練習問題(1604) treeコマンド

tree コマンドを利用して、ファイルを木構造が分かりやすいように表示しなさい。

tree コマンドに -N オプションをつけると、ファイル名に漢字を含むものも表 示できる。

$ tree -N ディレクトリ名 [←]
さらに、nkf を使えば、ファイル名を EUC で表示できる。
$ tree -N ディレクトリ名 | nkf -e [←]
詳しくは、man tree を見なさい。

★練習問題(1605) openコマンド

open コマンドは、Finder でダブルクリック(コンテキスト・メニューの開く) を行ったことと同じ効果がある。 ディレクトリ名を指定してopen コマンドを 実行すると、その内容を表示する Finder のウインドウが開く( .app のディレ クトリを除く)。 例: ディレクトリ名「.」を指定して、open コマンドを実行すると、カレント・ワー キング・ディレクトリの内容を表示する Finder のウインドウが開く。

★練習問題(1606) デスクトップ

次のようにすると、デスクトップをFinder で他のディレクトリと同じように表 示することができる。このことを確認しなさい。

★練習問題(1607) mkdir/rmdirコマンドによるディレクトリの作成と削除

Unix のコマンド mkdir コマンドと rmdir コマンドを使って、ディレクトリを 作成したり削除したりしなさ。

★練習問題(1608) ファイルが存在するディレクトリの削除

練習問題(1607) で、ファイルを削除しないで、rmdir コマンド実行すると、エラーになり、ディ レクトリを削除することができない。このことを確認しなさい。

ls コマンドは、「.」から始まるファイル名を表示しない。ls コマンドに -a オプションを付けると、表示する。

ディレクトリを削除しようとした時に、ls コマンドで表示されないが、「.」 で始まるファイルがあるために、削除できないことがある。このことを確認し なさい。

★練習問題(1609) mvコマンドによるディレクトリ間のファイルの移動

Unix のコマンド ls, mv を使って、ディレクトリ間のファイルを移動してみな さい。

★練習問題(1610) Finderによるディレクトリ間のファイルの移動

練習問題(1609) と同様に Finder で複数のディレクトリを表示して、それらの間でドラッグすることで、 ディレクトリ間でファイルを移動させることができる(mv コマンド相当)。 この機能を確認しなさい。

  1. 練習問題(1609) と同様に、 練習用のディレクトリとファイルを作成する。
  2. Finder で 2 つのウィンドウを開く。 その他に、open コマンドを使う方法もある。
    $ open ~/from_dir [←]
    $ open ~/to_dir [←]
    
  3. 移動元のディレクトリから、移動したいファイルを選択し、 移動先のディレクトリにドラッグする。
1つのディレクトリしか表示しない状態でも移動することはできるが、 マウスの操作が難しいので、2つ開いた方が良い。

★練習問題(1611) Finderによるディレクトリのファイルのコピー

Finder で、ファイルを選択肢し、コピー&ペーストで「コピー」することがで きる。このことを確認しなさい。

option キーを押しながらドラッグすると、移動ではなく、コピーになる。 このことを確認しなさい。

なお、コピーを行った後、元のファイルを消せば実質的に移動(改名)になる。

★練習問題(1612) mvコマンドによるファイル名の付け替え

Unix のコマンド mv を使って、ファイル名を変更してみなさい。

★練習問題(1613) Finderによるファイル名の付け替え

練習問題(1612) と同様に Finder を使って、(1つのディレクトリ内で)ファイル名を変更することがで きる。このことを確認しなさい。

★練習問題(1614) Finderによるディレクトリの作成

Finder で、フォルダ(ディレクトリ)を作成することができる。 このことを確認しなさい。

★練習問題(1615) Finderによるファイルの削除

Finder で、ファイルを削除することができる。このことを確認しなさい。

★練習問題(1616) Finder によるエイリアスの作成

Finder で ファイルに対するエイリアスを作成してみなさい。

★練習問題(1617) Finder によるファイルの整理

Finder を利用して、ファイルを整理しなさい。

★練習問題(1618) シンボリック・リンクの調査

ls -l を使って、次のディレクトリにどのようなシンボリック・リンクがある かを調べなさい。 ls コマンドと grep コマンドを組み合わせて使うと便利である。
$ ls -l /Applications | grep '^l' [←]
ここで、'^l' は、行の先頭がl で始 まるという意味である。 The Unix Super Text 第32章 正規表現 参照

★練習問題(1619) iTermでのUTF-8の利用

iTerm の設定を変更して、文字コードとして UTF-8 を利用してみなさい。

端末の文字コードが EUC のものと、UTF-8 のもので、次のコマンドの実行結果 を比較しなさい。

$ locale [←]
$ echo $LANG [←]

漢字の名前をディレクトリを含むディレクトリで、次のコマンドの結果を比較 しなさい。

$ cd 漢字のディレクトリを含むディレクトリ [←]
$ ls [←]
$ ls -v [←]
$ ls | cat [←]
$ ls | nkf -e [←]
$ ls | nkf -w [←]
端末の中で Emacs を実行し、M-x set-keyboard-coding-system と M-x set-terminal-coding-system やで、端末の入出力の文字コードて適合させなさ い。

★練習問題(1620) javacの文字コード

MacOSX の javac コマンドは、標準では、Shift_JIS でエラー・メッセージを 端末に表示する。
$ javac [←]
(Shift_JISのエラー・メッセージ)
次のように打つと、EUC でエラー・メッセージが表示される。
$ javac -J-Dfile.encoding=eucJP [←]
(EUCのエラー・メッセージ)
また、Java言語のソース・プログラムの文字コードとして EUC を利用するには、 次のようにする。
$ javac -encoding eucJP file.java [←]
以上のことを確認しなさい。

★練習問題(1621) lynx,w3m コマンドによるディレクトリ木の表示

lynx や w3m のように、端末で動作する Web ブラウザを利用してディレクトリ 木を表示しなさい。
$ lynx . [←]
$ lynx ~ [←]
$ w3m . [←]
$ w3m ~ [←]

★練習問題(1622) Emacs Dired によるディレクトリ木の表示

Emacs に含まれている Directory Editor を利用して ディレクトリ木を表示しなさい。 テキストファイルを開いたり、削除したり、改名したりしなさい。 The Unix Super Text 19.4.4項参照 参照

★練習問題(1623) Emacs英語チュートリアル

★練習問題(427) Emacs チュートリアル を参考にして、英語で Emacs のチュートリアルを行いなさい。

★練習問題(1624) ichoのホーム・ディレクトリ以下のファイル

icho のファイルについても、ホーム・ディレクトリのモードやホーム・ディレ クトリ以下のファイルのモードが適切かを調べなさい。不適切な場合、chmod コマンドで適切なものに設定しなさい。
$ ssh icho.u.tsukuba.ac.jp [←]
[s10xxxxx@unix01 ~]$ ls -ld ~[←]
[s10xxxxx@unix01 ~]$ ls -l ~[←]

★練習問題(1625) SMBによるファイルのアクセス(実習室のiMac)

Microsoft SMB (Server Message Block) やCIFS (Common Internet File System) は、ネットワークを越えて別のコンピュータにあるファイルをコピー せずにそのまま利用するための仕組みである。Microsoft 社により、Windows オペレーティング・システムのために開発された。

実習室の iMac (MacOSX) で、次のようにしてこの機能を利用してみなさい。

  1. Finder をアクティブにする
  2. 「移動」メニューから「サーバへ接続」(Command+K)を選ぶ。
  3. 「サーバアドレス」に次のように指定する。
    smb://ログイン名@lilac-fsm.coins.tsukuba.ac.jp/
    
    実習室の iMac では、サーバとログイン名が同一なので「ログイン名」を省略できる。
    smb://lilac-fsm.coins.tsukuba.ac.jp/
    
  4. 開かれるウィンドウでは、「登録ユーザ」を選ぶ。 名前とパスワードとてcoinsのユーザ名とパスワードを打つ。
  5. 「マウントするボリューム」として、自分のホームディレクトリ(ログイン名)を選ぶ。
  6. 成功すると、/Volumes/ログイン名/ にホームディレクトリが現れる。
ログアウトする前に、/Volumes/ログイン名/を アンマウント(取り出す操作)しなさい。
  1. コンピュータのトップのディレクトリやサイドバー等で アンマウントしたいものを選ぶ。
  2. コンテキストメニュー(右クリック)で「取り出す」を選ぶ。
あるいは、次のコマンドでも取り出せる。
$ ls /Volumes [←]
(名前の確認、COINS40 のようなもの以外のものを調べる。
ログイン名や coins-home、webdav のようなものがある。)
$ umount /Volumes/ログイン名 [←]
うまくアンマウントできないことがある。
$ umount /Volumes/名前 [←]
unount(/Volumes/名前): Resource busy -- try diskutil unmount
$
''
このエラーは、あるプロセスがそのファイル・システムのファイルを開いた状 態のまま(利用中である)ことを意味する。その時は、プロセスを終了させたり、 ファイルを閉じてからもう一度試みる。シェルの カレントワーキングディレクトリ ということもあるので、cd / もしてみる。 どのプロセスがファイルを開いたままなのか分からない時には、 lsof コマンド(list open files) で探すこともできる。 lsof コマンド(list open files) は、プロセスの一覧と同時に、プロセスがどのファイルを開いているかを表示 するコマンドである。くわしくは、man lsof を見なさい。

★練習問題(1626) AFPによるファイルのアクセス(実習室のiMac)

AFP (Apple File Protocol) は、ネットワークを越えて別のコンピュータにあ るファイルをコピーせずにそのまま利用するための仕組みである。Apple 社に よって MacOS のために開発された。

実習室の iMac (MacOSX) で、次のようにしてこの機能を利用してみなさい。 この方法は、 練習問題(1625) SMB とほとんど同じである。ただし、 接続する時に smb:// から始まるものではなく、次のように afp:// から始まり、ファイル・サーバとしては www.coins.tsukuba.ac.jp を使う。

afp://ログイン名@www.coins.tsukuba.ac.jp/
実習室の iMac では、サーバとログイン名が同一なので「ログイン名」を省略できる。
afp://www.coins.tsukuba.ac.jp/
この機能を利用してみなさい。

★練習問題(1627) SMBによるファイルのアクセス(実習室のWindows)

3C206 実習室にある Windows では、H: ドライブで Unix 側のホーム・ディレ クトリが見えるが、これは、SMB によるものである。 Windows 用語では、これを「ネットワークドライブ」という。 手動で、H: ドライブ以外のドライブにマウントしてみなさい。
  1. 「スタート」ボタンを押す
  2. 「ネットワーク」項目をクリックする
  3. 「ネットワークドライブの割当て」を選ぶ
  4. ドライブ名として開いているものを選ぶ。
  5. サーバとして、次のものを指定する。
    \\lilac-fsm.coins.tsukuba.ac.jp\ログイン名
    
  6. 表示されるウィンドウで、ログイン名とパスワードを打つ。
接続した後では、ログアウトする前にアンマウント(切断)の処理をしなさい。
  1. 「コンピュータ」を開く
  2. アンマウントしたい「ネットワークドライブ」をクリックで選ぶ
  3. コンテキストメニュー(右クリック)で、「切断」を選ぶ。

★練習問題(1628) coins外からcoinsのファイルのアクセス

coins の外のネットワークから coins の中のファイルを SMB、または、AFP で アクセスしなさい。それには、 VPN (Virtual Private Network) の機能が必要になる。手引き 9.3節 参照

★練習問題(1629) 全学計算機システムのWebDAVの利用

WebDAV (Web-based Distributed Authoring and Versioning) は、World Wide Web の機能を使いながらネットワークを越えて別のコンピュータにあるファイ ルをコピーせずにそのまま利用するための仕組みである。 筑波大学全学計算機システムでは、 WebDAVが利用できるようになっている。 これを利用してみなさい。 全学計算機でこれを利用するためには、icho 等に接続して、 ~/webdav という名前のディレクトリを予め作成しておく必要がある。

実習室の iMac (MacOSX) で、次のようにしてこの機能を利用してみなさい。 この方法は、 練習問題(1625) SMB とほとんど同じである。ただし、 接続する時に smb:// から始まるものではなく、次のように https:// から始まり、ファイル・サーバとしては www.u.tsukuba.ac.jp、 ディレクトリ名として /webdav/ まで指定するる

https://www.u.tsukuba.ac.jp/webdav/
ユーザ名とパスワードしては、全学計算機のものを用いる。

初期状態の Windows では、WebDAV が使えないことがある。次のコマンドで使 える場合もある。

net use w: https://ホスト名/ディレクトリ名/

■課題16 言語処理系、ファイルの整理

以下の問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。

(1) 「ccコマンド」 の所で用いたhello.c をコピーし、 emacsで (name)を自分の名前で置き換えなさい。これを、コンパイルして実行し なさい。名前は、漢字ではなく、ASCII 文字だけでローマ字を使いなさい。 端末での、コンパイルと実行の様子を、シェルのプロンプトも含めてテキスト・ ファイルにコピーしなさい。

(2) 「javac コマンドと java コマンド」で用いた Hello.java をコピーし、 emacsで (name)を自分の名前で置き換えなさい。これを、コンパイルして実行し なさい。名前は、漢字ではなく、ASCII 文字だけでローマ字を使いなさい。 端末での、コンパイルと実行の様子を、シェルのプロンプトも含めてテキスト・ ファイルにコピーしなさい。

(3) mkdir, rm, ln -s 等のコマンドや Finder を用いて、ファイルを整理しなさい。 レポートには次の項目を含めなさい。

シンボリック・リンクは使っても使わなくてもよい。

ディレクトリ構成の説明には、tree コマンドの結果を利用してもよい。ただし、 今回整理した部分だけを含めること。~/Library/ など、自分では整理しなかっ たファイルについては、含めないこと。 「tree -N」 でファイル名に漢字を含むものも表示できる。 「tree -N | nkf -e 」で、さらにファイル名が EUC に変換される。

課題が出される前に既にディレクトリを作成して既に既に整った状況であった 場合には、問題点の代わりに整理の考え方について説明しなさい。またディレ クトリを新たに作成する代わりに既存のディレクトリについて報告してもよい。

(4) The Unix Super Text の次の部分を読みなさい。

そして、項目についてついて調べて、簡単に説明しなさい。

(5) [加点] Emacs で、英語でチュートリアルを実施しなさい。開始日時と終了 日時を報告しなさい。

(6) [加点] 次のネットワークファイル・システムのいずれかを利用しなさい。

Emacs でファイルを修正してみなさい。 ls -l, cat コマンド等の結果を示し、利用できていることを示しなさい。 利用したコンピュータの状況をレポートに含めなさい。coins iMac と coins のファイル・サーバを利用して実習を行う時には、ファイル名が /home/ の下 ではなく /Volumes/ の下にあることを明確にしなさい。 coins 外のコンピュータを利用した場合には、そのコンピュータのオペレーティ ング・システム、利用したネットワークの状況等もレポートに含めなさい。


Last updated: 2012/06/12 17:00:31
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>