システムプログラム(第-1回): 端末(1)

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

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

連絡事項

今日の重要な話

■端末によるコンピュータの操作

文字端末、または、単に端末(terminal)を利用すると、コンピュータをキーボー ドと文字の表示だけで操作できる。

なぜ「端末」を使うべきか。

◆端末の歴史

端末は、1960年代のコンピュータの使い方を反映した言葉。

図? メインフレーム、端末、回線
図? メインフレームと端末

◆端末とアプリケーション

図? キーボード、端末、キーボード入力、画面出力、コンピュータ
図? 端末とアプリケーション(メインフレーム)

◆ローカルの端末プログラム

現在では、文字端末は、コンピュータとキーボードと文字表示で対話するため の汎用のプログラムを意味する。

図? キーボード、端末プログラム、アプリケーション、ローカルでの実行
図? 端末プログラムとアプリケーション(ローカル)

様々な端末プログラム

◆遠隔ログインと端末

ssh で遠隔ログインすると、接続先のコンピュータを端末で利用できる。

図? キーボード、端末プログラム、アプリケーション、sshでの実行
図? sshによる遠隔ログインと端末

■プログラムの実行とシェル

コンピュータに仕事をさせるには、(アイコンをダブルクリックするのではなく) プログラムを実行する。

プログラムの実行の方法

◆シェル(shell)

シェルとは、オペレーティング・システムの構成要素の1つである。シェルは、 オペレーティング・システムの中心部分を貝殻のように包みむプログラムであ る。シェルは、人間とコンピュータが対話(interaction)をする時に重要な 機能を果たす。

図? ハードウェア、カーネル、シェル、アプリケーション
図? シェルの位置づけ

Unix (Linuxを含む) では、sh, csh, bash, tcsh, zsh などさまざまな種類の シェルを使うことができるようになっている。X ウインドウを使っている状態 (マウスが使える状態)では、ウインドウ・マネジャと呼ばれるプログラムも、 シェルとしての働きがある。

macOS では、Finder という名前のプログラムがシェルに相当する。

Windows では、Explorer という名前のプログラムがシェルに相当する。

◆シェルの実行とプロンプト

ローカルのコンピュータで「端末」のプログラムを実行したり、 ssh で遠隔ログインをすると、シェルが実行される。

coins の標準のシェルは、bash である。 bash が動いている時には、コンピュータの画面には、次のような表示がなされ る(コンピュータ、ユーザによって異なる)。

aloe38:~ s2001234$ []
このような記号は、プロンプト(prompt)という。これは、シェルが人間に対し て、コマンド(command、命令) の打込みをうながしている(prompt)ことを表す 印である。 この状態で、キーボードからコマンド名(命 令の名前)を打ち込み、最後にリターン・キー(Enter, [←])を打つと、 bash がそれを受け取り、実行する。

以下の説明では、プロンプトが「$ 」であるものとする。

$ []
キーボードから「$ 」を打つ必要はない。(プロンプトの記号は、設 定で変更することもできる。)

◆シェルの終了

bash を終了するには、プロンプトに対して、「exit [←]」と打つ。
$ exit [←]
シェルを終了しても、端末プログラムが動いたままのことがある。 端末プログラムをもう利用しないなら、 端末プログラムも終了する。終了の方法は、プログラムによって異なる。

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

シェル(コマンド・モードの画面)を操作するには、次のような形式で文字を 打ち込み、最後にリターン(Enter, [←])を打つ。
$ コマンド名 オプション1 オプション2 ... 引数1 引数2 .. [←]

コマンド名に続く オプション(option)とは、コマンドの動きを少し変えるた めの文字列(文字の並び)である。オプションは、一般には付けても付けなく てもコマンドの働きとしては成り立つ。引数(ひきすう、argument,parameter) は、コマンドの種類によっては、必ず必要となるものである。ただし、オプショ ンと引数の区別は、必ずしも厳密ではなく、混同して使われることもある。 (例:必須のオプション)

コマンド名やオプションや引数は、空白で区切る。空白の有無で、まったく動 作が変る。

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

$ who  [←]
次の行は、「whoという名前のコマンドを、am と i という引数を指定して実行する」 ことを意味する。
$ who am i [←]

◆macOS と端末プログラム

macOS では、次のような端末プログラムが使える。 実行すると、端末が現れ、Unix のシェルが動作し、この Web ページで説明しているコマンドの多くが使える。 シェルとしては、zsh が実行されることが多い。 Coins では、zsh ではなく bash が実行される。

◆Linux と端末プログラム

X Window や X11 (X Window version 11) は、Unix 系OSで広く使われている GUI を提供するための仕組み。 類似のものに、Wayland もある。

X11 (や Wayland) が導入されていない場合、 起動すると、文字端末で操作できるようになる。

X11 (や Wayland)が導入されている場合には、それに対応した 様々な端末プログラムが動作する。

実行すると、端末が現れ、Unix のシェルが動作し、この Web ページで説明しているコマンドの多くが使える。

◆Windows と端末プログラム

Windows では、次のような端末プログラムが使える。 実行すると、端末が現れ、それぞれ cmd.exe や powershell.exe という プログラムが実行される。 この Web ページで説明しているコマンドは、Unix 系 OS のコマンドなので、 Windows では使えないと思って良い。 一部のコマンドには、共通性がある。 Windowsで使える端末 にいくつかのコマンドを示す。

この Web ページで説明しているコマンドを使うには、 次のような方法がある。

◆練習問題: 簡単なコマンドの実行

端末を開き、シェルのプロンプトを確認しなさい。 練習問題 簡単なコマンドの実行を行いなさい。

■ファイルとディレクトリ

ファイル(file)は、コンピュータの中で「情報を保存する」ための仕組み。 ファイルは、情報(ビット列)を(バイト単位で)保存する。

ファイルの大事な役目は、「情報に名前を付ける」という機能。

ディレクトリ(directory)は、ファイルに名前を付ける働きを持っている仕掛 けを提供するもの。フォルダ(folder)と呼ばれることもある。

ディレクトリは、ファイルの名前の一覧表として現れる。

ファイルの性質

◆ディレクトリの木構造

Unix(macOS, Linux含む)やMS Windows では、 ファイルの名前を、基本的には 木構造(tree structure,きこうぞう) という考え方で整理する。 木構造は、 階層構造(hieratical structure) とも呼ばれる。

根が上にある本物の木
図? 本物の木

根、home、etc、user、kernel、yas、中間節、端説、リンクからなる構造
図? ファイルとディレクトリの木

くわしくは 総合科目「ネットワーク社会を支える情報技術入門 II」/木構造(2017年11月20日)

http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/it-2017-11-20/

◆ルート・ディレクトリ(the root directory)

本物の木に根にあたるディレクトリ。

ルート・ディレクトリの名前は、「/」 (スラッシュ 1 文字)。 (Windows では、\ 。「\」(バックスラッシュ)、「¥」(円記号)で表示される。)

◆パス名

Unix では、ファイルやディレクトリの名前を付ける時に、木構造で考えてそ のファイルやディレクトリにたどり着くための道順を使う。 このような名前をパス名(path name) という。 パス(path)とは「道」の意味。pass ではない。

ルートディレクトリから出発する方法で表記するパス名を、 絶対パス名(absolute path name) という。

絶対パス名は、ルートディレクトリを表す「/」の後に、 たどった枝の名前を並べ、間に区切りとして「/」をはさむ。 (Windows では、\ 。「\」(バックスラッシュ)、「¥」(円記号)で表示される。)

例:「/usr/bin/wc

  1. ルート・ディレクトリから出発する
  2. usr」という枝に進む
  3. bin」という枝に進む
  4. wc」という枝に進む

◆カレントワーキングディレクトリ

ルート・ディレクトリを起点にする方法(絶対パス名)だけでは、作業しにくい。 「現在作業中のディレクトリ」 「カレント・ワーキング・ディレクトリ(the current working directory)」 を起点として、ファイル名を扱う。

◆lsコマンド、cdコマンド、pwdコマンド

カレント・ワーキング・ディレクトリを表示するには、pwd (print working directory) コマンドを使う。

$ pwd [←]
/USA/California
$ []
表示されている「/USA/California」が絶対パス名で表示されたカレント・ワー キング・ディレクトリの名前。

カレント・ワーキング・ディレクトリを変更するには cd (change directory) コマ ンドを使う。

$ cd dirname [←]
「ディレクトリ dirname に行く」とも言う。

世界の街の木構造、USA、California、Florida、San-Francisco
図? 世界の街の木構造

$ pwd [←]
/USA/California
$ cd /USA/Florida [←]
$ pwd [←]
/USA/Florida
$ cd /USA/California/San-Francisco [←]
$ pwd [←]
/USA/California/San-Francisco
$ []

カレントワーキングディレクトリは、名前「.」で参照できる。

ls コマンドは、ディレクトリに含まれているファイルやディレクトリの一覧を表示する コマンドである。

lsコマンドは引数にディレクトリを指定すると、そのディレクトリの中にある ファイルの一覧を表示するが、引数を与えないと、「.」が与えられたものとし て働く。

$ ls [←]
Los-Angeles  San-Francisco
$ pwd [←]
/USA/California
$ ls /USA/California [←]
Los-Angeles  San-Francisco
$ ls . [←]
Los-Angeles  San-Francisco
$ []

カレントワーキングディレクトリを起点としたパス名を 相対パス名(relative path name)という。 「/USA/California」の時、 「San-Francisco」は「/USA/California/San-Francisco」、 「San-Francisco/China-Town」は「/USA/California/San-Francisco/China-Town」を意味する。

◆ディレクトリの親子関係

親ディレクトリ(parent directory)
あるディレクトリの ルート・ディレクトリからそのディレクトリへの道順で1つだけ 根に近いディレクトリ。 1個上のディレクトリともいう。 「..」で参照可能。
子ディレクトリ(child directory), サブディレクトリ(subdirectory)
あるディレクトリの、1つ根から遠いディレクトリ
隣のディレクトリ、兄弟のディレクトリ
共通の親ディレクトリを持つディレクトリ。 「../ディレクトリ名」で参照可能。

◆ホーム・ディレクトリ(home directory)

個人所有のファイルを保存する時に起点となるディレクトリ。

cd コマンドに引数を与えないと、ホーム・ディレクトリにもどる。

多くのシェル(csh,tcsh,bash,zsh) やEmacsなどでは、 ホームディレクトリを「~」で指定できる (指定できないプログラムもある。)

」は、英語の端末(ASCII,後述)の形。 日本語(JIS,後述) では、「」となることがある。

他人のホーム・ディレクトリは、「~ユーザ名」で指定できるプログラムがある。 (指定できないもプログラムもある。)

~xxx」と「~/xxx」のように 「~」直後に「/」の有無で意味が違う。

/ がある (例: ~/xxx)
自分のホーム・ディレクトリ以下のファイル(またはディレクトリ)。 xxx はファイル名、または、ディレクトリ名として解釈される。
/ がなく、アルファベットで始まる(例: ~xxx)
他のユーザのホーム・ディレクトリ。 xxx はユーザ名として解釈される。
/ がなく、数字で始まる(例: ~1、~2、~3、・・・)
bash では、ディレクトリスタックの上から num 番目を参照。

◆ファイル名として使える文字

ファイルには、名前(ファイル名(file name))がついている。 ファイルを操作するには、ファイル名を指定する。

Unix では、ファイル名として、「/」 は特別な意味があり、ディレク トリの区切りを意味する。普通のファイル名は、「/」 以外の次のよ うな文字を使うと安全である(問題が起きない)。 漢字をファイル名に使うことは、符号化の方法の違いで問題が生じる ことがある。

Unixでは、ファイル名としてアルファベットの大文字と小文字の両方使え、か つ、両者は区別される。普通は小文字を使う。Makefile や README のように、 特に注目して欲しいファイルの名前に大文字を使う。

◆WindowsやmacOSでの大文字小文字の区別

Windows や macOS では、大文字小文字の違いは保存されるが、 区別されないことがある(区別されることもある)。 abcという名前は、 大文字小文字を変えて AbcでもABCでも操作できることがある。

◆macOS Finder でのファイル名の表示

macOS の Finder は、ディレクトリの名前を加工して表示する。

◆Windowsの「ドライブ」の考え方

Windows では、ファイルをディレクトリの木構造で扱うが、ディレクトリの木 構造と独立に「ドライブ」の名前(アルファベット1文字+「:」)がつく。

「ドライブ」は、フロッピ・ディスクの時代には、複数の子供の「ディレクト リ」の代わりにつかっていた。当時は、「ディレクトリ」は、ドライブに1個 しか存在しなかった。以下の例では、「コマンドプロンプト」の dir コマンド (ls コマンド相当) にドラ イブ名を与えて実行している。

A> dir[←]
(Aドライブのファイル一覧の表示)
A> dir b:[←]
(Bドライブのファイル一覧の表示)
cd のように、作業中のドライブを切り替えることができる。 A> や B> は、プロンプトである。
A> b:[←]
B> a:[←]
A> []

◆ファイルとファイル名に関するまとめ

■ファイルを操作する基本的なコマンド

端末でファイルを操作する。次のコマンドを使えるようにする。

◆内容によるファイルの分類

テキスト・ファイル(text file)
文字データだけが含まれているファイル
バイナリ・ファイル(binary file)
その他、機械語、画像、音声、

◆テキスト・ファイルの表示

cat コマンドを使うと、文字端末でテキスト・ファイルの内容を表示できる。
$ cat file1 [←]
This is a pen.
$ []
(文字端末でバイナリ・ファイルを表示しても、内容はよくわからない。 端末の状態が乱れることがあるので、画面には表示しない方がよい。 乱れたら、再設定する。)

◆ファイルの名前を調べる(lsコマンド)

ls コマンドを実行すると、存在するファイルの一覧を表示する。

$ ls [←]
Desktop         Downloads       Maildir
Documents       Library         Pictures
$ []

◆ファイルのコピー

指定したファイルの内容と全く同じ内容を持つファイルを作ること

ファイルのコピーの目的

ファイルをコピーするには cp (copy) コマンドを使う。

$ ls [←]
Desktop         Downloads       Maildir         file1
Documents       Library         Pictures        file2
$ cat file1 [←]
This is a pen.
$ cp file1 file3 [←]
$ ls [←]
Desktop         Downloads       Maildir         file1           file3
Documents       Library         Pictures        file2
$ cat file3 [←]
This is a pen.
$ []
この例では、ファイル file1 が ファイル file3にコピーされる。コピー先の ファイルfile3が存在しない時は新しくファイルfile3が作られる。
$ cat file3 [←]
This is a pen.
$ cat file2 [←]
GNU is Not Unix!
Try Hurd.
$ cp file2 file3 [←]
$ cat file3 [←]
GNU is Not Unix!
Try Hurd.
$ []

コピー先のファイルが既に存在していた場合、その内容は上書き(overwrite),うわがき)される。 (古い内容を消して新しい内容で埋める)。

◆ls -l

Unixのファイルとディレクトリは、内容(ビット列を保存する)の他に、 所有者、更新された日付などの 属性attributes ) を持つ。

ls コマンドに -l (long) オプションをつけると、 ファイルやディレクトリだけでなく、いくつかの属性も合わせて表示される。

$ ls [←]
Desktop         Downloads       Maildir         file1           file3
Documents       Library         Pictures        file2
$ ls -l [←]
total 9
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Desktop
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Documents
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Downloads
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Library
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Maildir
drwxr-xr-x  2 yas  prof  80  4 14 20:21 Pictures
-rw-r--r--  1 yas  prof  15  4 14 20:22 file1
-rw-r--r--  1 yas  prof  27  4 14 20:23 file2
-rw-r--r--  1 yas  prof  27  4 14 20:26 file3
$ []
行単位に次のようなファイルやディレクトリの属性が表示さる。 詳しくは後述する。今日は先頭の「d」と「-」の違いが分かればよい。 ファイルに多くのデータ(文字)をいれれば、バイト数が多くなる。

◆lsの-aオプションによる「.」から始まるファイルの表示

ls コマンドは、標準では、カレント・ワーキング・ディレクトリを意 味する「.」や親ディレクトリを意味する「..」を含めて、 「.」から始まるファイル名を表示しない。-a オプションを付 けると、「.」から始まるファイル名も表示する。ホーム・ディレクト リには、「.」で始まるファイルがいくつか存在する。
$ ls [←]
Desktop         Library         Music           Public          WinFiles
Documents       Movies          Pictures        Sites           public_html
$ ls -a [←]
.                       .cshrc~                 Movies
..                      .emacs                  Music
.CFUserTextEncoding     .emacs.d                Pictures
.DS_Store               .login                  Public
.Spotlight-V100         .profile                Sites
.Xauthority             .ssh                    WinFiles
.backupfiles2006        Desktop                 public_html
.bashrc                 Documents
.cshrc                  Library
$ []

◆lsの-dオプションによるディレクトリそのものの表示

ls コマンドは、引数にディレクトリ名が与えられると、ディレクトリ の内容を表示する。
$ ls -l ~/Maildir [←]
total 113
drwx------  2 yas  prof  35840  4 18 11:00 cur
drwx------  2 yas  prof  17408  4 18 10:57 new
drwx------  2 yas  prof   1024  4 18 11:37 tmp
$ []
ディレクトリそのものを表示したい時(特に「-l」と組み合わせて日付 等の属性を表示したい時)は、「-d」オプションを付ける。
$ ls -ld ~/Maildir [←]
drwx------  20 yas  prof  2048  4 18 10:57 /home/prof/yas/Maildir
$ []

◆cp file dir

cp コマンドには、コピー先にディレクトリを指定することができる。
$ cp file1 file2 dir [←]
この場合、dir 以下に、(一番葉の部分だけ)同じ名前のファイルが作られる。 次の操作と概ね同じ動作をする。
$ cp file1 dir/file1  [←]
$ cp file2 dir/file2 [←]

ディレクトリを指定する時には、カレント・ワーキング・ディレクトリ 「.」 や ホーム・ディレクトリ「〜」も使える。

$ cp /etc/group . [←]
$ cp /etc/group ~ [←]
$ cp ~syspro/public_html/secure_htdocs/2022/index.html . [←]

◆ファイルを消す

意義

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

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

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

◆rm -i

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

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

◆ファイルの名前を変更

ファイル名を変更するには mv (move) コマンドを使う。

$ mv oldname newname [←]
この結果、ファイルoldfileのファイル名をnewnameに変更される。

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

◆ディレクトリの作成

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

◆ディレクトリ名の変更

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 [←]

◆ディレクトリの削除

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

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

◆大きなテキストファイルの表示(head、tail、lv)

大きなテキストファイルを cat コマンドで表示すると、流れていってしまって、よくわからない。 内容を確認したい時だけには、次のような方法がある。 coins の標準のページャは、lv。lv がないシステムを使う時には、less や more を試す。

◆ファイルの操作にともなうエラー

No such file or directory
そういう名前のファイルが見つからなかった。ファイル名が間違っていな いか確かめる。
Permission denied
ファイル名は合っているが、アクセス権がない。 モードを ls -l で調べる。
No space left on device
ディスクに空領域がない。 まず、不要なファイルを消す。
Disc quota exceeded
ディスクに空領域があるが、 個人に割り当てられた領域を使い果たした。 まず、不要なファイルを消す。

■マニュアルの読み方

手引き 2.11.1項 参照。 コマンドの使い方を調べるには、付属のマニュアルを読む。 マニュアルを表示するには、man コマンドを用いる。 次の例は、ls コマンドのマニュアルを表示している。
$ man ls [←]
man コマンドを実行すると、自動的に 大きなテキストファイルの表示 で説明したページャが実行され、長い説明が1ページ単位で表示できる。 ページャの操作としては、「スペースキー(1ページ進む)」と「q(quit、終了)」を覚えること。

引数として調べたいコマンドの名前を与える。-k に続いてキーワードを与える ことで検索もできる。

後述する Emacs に付属の説明書 info を読むためのコマンドもある。

$ info info [←]
$ info bash [←]

■ファイル名の置き換え

長いファイル名や多くのファイル名を、人間がキーボードから打ち込むと疲れる。 Unix のシェルでは、人間は、ファイル名の一部だけら打ち込み、 残りの部分をシェルに探させる機能がある。 これをファイル名の置き換え(filename substitution)という。

ファイル名の補完(completion)では、人間が目で確認するが、置き換えでは人間が確認する ことはない(見つからなければエラーになる)。

例:/usr/bin にある at で始まるファイルをすべて ls コマンドに引き渡したい。1つひとつ打つと疲れる。

$ ls -l /usr/bin/at /usr/bin/atos /usr/bin/atq /usr/bin/atrm /usr/bin/atsutil [←]
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/at
-rwxr-xr-x  1 root  wheel  90960  2  6 17:03 /usr/bin/atos
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atq
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atrm
-rwxr-xr-x  1 root  wheel  25568  3 18 14:08 /usr/bin/atsutil
$ []
次のように、「*」を使うと楽に打てる。
$ ls  -l /usr/bin/at* [←]
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/at
-rwxr-xr-x  1 root  wheel  90960  2  6 17:03 /usr/bin/atos
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atq
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atrm
-rwxr-xr-x  1 root  wheel  25568  3 18 14:08 /usr/bin/atsutil
$ []
この例では、シェルが「/usr/bin/at*」を5つのファイル名に置き換え ている。ls が行っているのではない。ls以外のどんなプログラ ムでも有効である。
$ echo /usr/bin/at* [←]
/usr/bin/at /usr/bin/atos /usr/bin/atq /usr/bin/atrm /usr/bin/atsutil
$ file /usr/bin/at* [←]
/usr/bin/at:      setuid Mach-O universal binary with 2 architectures
/usr/bin/at (for architecture x86_64):	  Mach-O 64-bit executable x86_64
/usr/bin/at (for architecture i386):	  Mach-O executable i386
/usr/bin/atos:    Mach-O universal binary with 2 architectures
/usr/bin/atos (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/atos (for architecture i386):	  Mach-O executable i386
/usr/bin/atq:     setuid Mach-O universal binary with 2 architectures
/usr/bin/atq (for architecture x86_64):	  Mach-O 64-bit executable x86_64
/usr/bin/atq (for architecture i386):	  Mach-O executable i386
/usr/bin/atrm:    setuid Mach-O universal binary with 2 architectures
/usr/bin/atrm (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/atrm (for architecture i386):	  Mach-O executable i386
/usr/bin/atsutil: Mach-O 64-bit executable x86_64
$ []
echo は、引数をそのまま表示するコマンド、 file は、ファイルの種類を表示するコマンドである。

◆ファイル名置換でよく使われるパタン

bash では、「*」を含めて、次のようなパタンが使える。
パタン 意味
* 任意の文字列(空でもよい)(.で始まるものを除く)
? 任意の1文字
[str] strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば [0-9](数字)や[a-zA-Z](アルファベット)がよく使われる。
{str1,str2,...} 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの
~username ユーザusernameのホーム・ディレクトリの絶対パス。
~/ 自分自身のホーム・ディレクトリ
~ 自分自身のホーム・ディレクトリ

よく使われる形式

*
全てのファイル名。
*.txt
最後が .txt で終わるもの。
*.[ch]
最後が .c、または、.h で終わるもの。
file[0-9]
「file」で始まり、数字で終わるファイル名
[a-z]*
英小文字で始まるファイル名
[Ww]ork
Work または work の両方、またはどれか
注意:「*」と「*.*」は違う。Windowsで「*.*」と書く 所、Unixでは、「*」で十分なことが多い。

◆空白文字を含むファイル名

ファイル名に空白文字を含んでいると、そのままではうまく扱えない。
$ ls -ld /Applications/QuickTime Player.app [←]
ls: /Applications/QuickTime: No such file or directory
ls: Player.app: No such file or directory
$ []
「?」や「*」で置き換え可能な場合が多い。
$ ls -ld /Applications/QuickTime*Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ ls -ld /Applications/QuickTime?Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ []
バックスラッシュ「\ 」や" " を使う方法もある。
$ ls -ld /Applications/QuickTime\ Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ ls -ld "/Applications/QuickTime Player.app" [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ []

■木構造の制約と問題点、シンボリック・リンク

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

ファイルとディレクトリの木構造の問題を緩和するために、 シンボリック・リンクという機能がある。

■文字の符号化

本当は非常に難しい。最低限、次のことを理解する。

文字集合(文字セット、character set)

利用する文字を明確に限定したもの。

コンピュータとは直接関係ない文字集合もある。

文字コード、文字の符号化(character encoding)

文字の符号化(encoding)とは、ある文字集合の中の文字とビット列(または整数)を対応させるこ とである。対応のさせかた、すなわち、文字コードには何種類もある。

◆ASCII(アスキー)

英語のアルファベット(大文字、小文字)や数字や記号などの文字を符号化す るために、現在もっともよく使われている対応表は、ASCII(American Standard Code for Information Interchange)。 国際標準としては、ISO 646。

英文の電子メール、C言語のプログラミングなどで使われている。

ASCII というと、符号化の方法だが、文字集合を意味することもある。 文字集合では、ASCIIのうち印刷可能な94文字を意味する。ASCII では、 印刷可能な文字以外に、印刷できない制御文字も定義している。

ASCII では、7ビットで文字を表現している。10進では0から127, 16進では 0 から 7F までである。

ASCII コード表 
+---------------------------------------------------------------+
| 00 NUL| 01 SOH| 02 STX| 03 ETX| 04 EOT| 05 ENQ| 06 ACK| 07 BEL|
| 08 BS | 09 HT | 0A NL | 0B VT | 0C NP | 0D CR | 0E SO | 0F SI |
| 10 DLE| 11 DC1| 12 DC2| 13 DC3| 14 DC4| 15 NAK| 16 SYN| 17 ETB|
| 18 CAN| 19 EM | 1A SUB| 1B ESC| 1C FS | 1D GS | 1E RS | 1F US |
| 20 SP | 21  ! | 22  " | 23  # | 24  $ | 25  % | 26  & | 27  ' |
| 28  ( | 29  ) | 2A  * | 2B  + | 2C  , | 2D  - | 2E  . | 2F  / |
| 30  0 | 31  1 | 32  2 | 33  3 | 34  4 | 35  5 | 36  6 | 37  7 |
| 38  8 | 39  9 | 3A  : | 3B  ; | 3C  < | 3D  = | 3E  > | 3F  ? |
| 40  @ | 41  A | 42  B | 43  C | 44  D | 45  E | 46  F | 47  G |
| 48  H | 49  I | 4A  J | 4B  K | 4C  L | 4D  M | 4E  N | 4F  O |
| 50  P | 51  Q | 52  R | 53  S | 54  T | 55  U | 56  V | 57  W |
| 58  X | 59  Y | 5A  Z | 5B  [ | 5C  \ | 5D  ] | 5E  ^ | 5F  _ |
| 60  ` | 61  a | 62  b | 63  c | 64  d | 65  e | 66  f | 67  g |
| 68  h | 69  i | 6A  j | 6B  k | 6C  l | 6D  m | 6E  n | 6F  o |
| 70  p | 71  q | 72  r | 73  s | 74  t | 75  u | 76  v | 77  w |
| 78  x | 79  y | 7A  z | 7B  { | 7C  | | 7D  } | 7E  ~ | 7F DEL|
+---------------------------------------------------------------+

たとえば、「ABC」という3文字は、コンピュータの内部では、41 42 43 (16 進)と表現されている。「123」という3文字は、31 32 33 (16進)と表現さ れている。このように、文字と数字は違う。「1」という文字が数値と しは16進で 31 (10進では48) と表現される。

ASCII コード表で、16進で 00 から 1F と 7F は、普通の文字ではない。 これらは、制御文字(control character,制御コード)と呼ばれている。 制御文字は、通信速度の制御に使ったり、行末を表わしたり文字を 消したりするのに使われる。キーボードで、Control-A と打つと、制御文字 を打ったことになる。

重要な制御文字

0D (CR, Carriage Return)
復帰(リターン)
0A (NL, New Line)
改行
09 (HT, Horizontal Tab)
水平タブ
08 (BS, Back Space)
後退
1B (ESC, Escape)
エスケープ
7F (DEL, Delete)
削除

ASCII のバックスラッシュ 「\ (16進数で5C)」は、日本語のJISローマ字文字 集合で円記号「¥ (16進数で5C)」と同じ値になっている。

◆その他

◆よく使われる文字集合とエンコーディング

文字集合は、コンピュータの内部に取り込まなくても意味がある。 ある文字集合に含まれる文字を、コンピュータの内部に取り込んで処理するためには、 文字をどのようなビット列(整数)で表すかを決める必要がある。 このビット列での表し方を決めたものがエンコーディング。

ASCII は、7 ビットであるが、1バイト(8ビット)にそのまま入れる。 (1ビット無駄になるが気にしない。)

日本語の場合、次のエンコーディングがよく使われる
エンコーディング 文字集合
JISコード JIS X 0201, JIS X 0208, JIS X 0212
EUC-JPJIS X 0201, JIS X 0208, JIS X 0212
Shift_JIS JIS X 0201, JIS X 0208
UTF-8 Unicode, USC
注意

◆端末の文字コードの確認

利用している端末プログラムでどのような文字コードが扱えるかを意識する必 用がある。自分が利用している端末プログラムでどうなっているかを確認すると良い。

locale コマンドを実行すると、端末内で動作するアプリケーションがどのような文字 コードを使うつもりなのか、確認できる。以下の例では、EUC-JP が使われている。

$ locale [←]
LANG=ja_JP.eucJP
LC_CTYPE="ja_JP.eucJP"
LC_NUMERIC="ja_JP.eucJP"
LC_TIME="ja_JP.eucJP"
LC_COLLATE="ja_JP.eucJP"
LC_MONETARY="ja_JP.eucJP"
LC_MESSAGES="ja_JP.eucJP"
LC_PAPER="ja_JP.eucJP"
LC_NAME="ja_JP.eucJP"
LC_ADDRESS="ja_JP.eucJP"
LC_TELEPHONE="ja_JP.eucJP"
LC_MEASUREMENT="ja_JP.eucJP"
LC_IDENTIFICATION="ja_JP.eucJP"
LC_ALL=
$ []
もし、端末プログラムが期待している文字コードと、動作するアプリケーショ ンが出力する文字コードが異なると、文字化けを起こす。その時は、同じにな るように修正する。

◆文字コードに関する、もう少し詳しい話

コンピュータリテラシ2018/ハードウェア、数、文字の表現

■SSH

ssh (Secure (remote) Shell) は、rsh (Remote Shell) の secure な置き換え。 以前は、rsh は通進路が暗号化さないのでパスワードが盗まれる、 ホストの認証に IP アドレスを使っていたので IP spoofing (なりすまし)に弱いといった問題があった。 ssh では、通信路を暗号化し、 ホストの認証を、公開鍵で行うようにした。

図? キーボード、端末プログラム、アプリケーション、sshでの実行
図? sshによる遠隔ログインと端末

ssh で遠隔ログインする時、端末でよく利用されるコマンドは、次の2つである。

ssh
secure shell (sh)。 プログラムを指定した時には、別のコンピュータでプログラムを実行する。 プログラムを指定しない時には、 別のコンピュータに遠隔ログインする。 (文字端末を使っている状態で)別のコンピュータにネットワーク経由で接続し てログインし、別のコンピュータを(文字端末の状態で)利用可能にする。
scp
secure copy (cp)。SSH の仕組みを使って 別のコンピュータとの間でファイルをコピーする。

◆ssh コマンドの使い方

手引き 2.14節 リモートログイン 参照手引き 9.1.3項 学類計算機へのリモートログイン 参照

ssh コマンドは、端末で動作するコマンドである。 ssh コマンドを使うには、まず、自分の PC で端末プログラムを実行する。

$ ssh ユーザ名@ホスト名 [←]
たとえば、Coins の viola12 にユーザ名 s2001234 でログインするには、次のように打つ。
$ ssh s2001234@viola12.coins.tsukuba.ac.jp [←]
しかし、以下で説明するように、そう簡単にはつながらない。次のような関門 を突破しなければならない。

◆SSHにおけるホストの公開鍵のハッシュ値の確認

ssh (scp, WinSCP, PuTTY, Tera Term含む) で始めてあるホストに接続する時 には、次のように警告が現れる。

$ ssh ユーザ名@ホスト名[←]
The authenticity of host 'ホスト名 (IPアドレス)' can't be established.
RSA key fingerprint is SHA256:64進数43桁.
Are you sure you want to continue connecting (yes/no)? yes[←]
Warning: Permanently added 'ホスト名,IPアドレス' (RSA) to the list of known hosts.
ユーザ名@ホスト名's password: (パスワードを打つ。画面には表示されない。)[←]
ホスト名:~ ユーザ名$ []

この 64進数(base64)43桁 256 ビット (または16進数32桁 128ビット) の数は、接続先のホストの公開鍵を、ハッシュ関数 SHA256 (またはMD5) にかけた結果である。この43桁(または32桁)の数を目で確認することに より、 接続先のホストが正しい( man-in-the-middle攻撃 が行われていない)ことがわかる。

ホストの公開鍵は、普通、2048 ビット以上あるが、これを人の目で比較するの はつらい。そこで、ハッシュ関数により、ビット数を減らして、人の目で確認 できるようにしている。SSHのプログラムは、公開鍵全体を保存しているが、人 間に表示する時には、ハッシュ値で表示している。

Are you sure ...? に対して yes と打つと、そのホストの公開鍵が保存される。 次に接続する時には、聞かれなくなる。 もし、ホストの公開鍵が変った時には man-in-the-middle攻撃 と見なして、接続できない。

coinsの主なホストの公開鍵のハッシュ値

筑波大学全学計算機システムの主なホストの公開鍵のハッシュ値

◆SSHでのユーザの認証

ssh で遠隔ログインする時、ユーザは、サーバが本物かどうかを公開鍵 で確認する(ホストの認証)。 サーバは、接続してきたユーザが本物かどうかを確認する(ユーザ認証)。 ユーザ認証の方法には、次の2つがある。 ssh で暗号化された通信路が確立された後は、パスワードを流しても安全である。 個人ごとに公開鍵での認証機能を利用したほうがよい。

SSH サーバへの接続、パスワードによる認証、公開鍵による認証の範囲、VPN
図? SSH サーバへの接続、パスワードによる認証(学内、VPN)、公開鍵による認証の範囲(学内、学外)

◆VPN (Virtual Private Network)

VPN とは、 インターネットという誰もがアクセス 可能なネットワークを利用しながら、 事実上専用線(private network) を使っ ているように安全な通信路を提供する技術である。

◆Coins VPN

VPN で Coins の VPN サーバに接続すると、Coins LAN に接続された状態(IP アドレス) で Coins 内のコンピュータに接続できる。また、Coins LAN も学内 LAN の一部なので、学内 LAN から利用できるサービスも使えるようになる。

◆sshでCoinsのコンピュータに遠隔ログインしてプログラムを実行する(まとめ)

方法1: ssh パスワードログイン

方法2: VPN + ssh パスワードログイン

方法3: ssh 公開鍵を使う

方法0a: 実習室に来て、iMac を使う

これが一番確実。 「自宅からPCが繋がらない」、「PCが支障したから宿題ができなかった」と言わないこと。

方法0b: リモートデスクトップを使う

Top/リモートデスクトップサービス リモートデスクトップサービス を使うと、 実習室で iMac/PC で使う時と同じような操作方法で Linux Ubuntu を使える。 そこで端末を開いた後で、ssh で viola12, www にリモート・ログインする方法もある。 COINS Statusページで、Linux が動いているホストを選んで、接続する。

◆遠隔ログインのログアウト

ssh コマンドで遠隔ログインをした時には、次のようにして終了すること。 この手順をまないで、いきなりウィンドウを閉じたり、 端末プログラムを終了するのはよくない。 特に、遠隔ログイン先でテキストエディタでファイルを編集中だった場合、問題が生じることがある。

◆ssh と Visual Studio Code

Visual Studio Code をうまく設定すると、次のようなことができる。

◆scpコマンド

SSHは、遠隔ログインの機能の他に、コンピュータ間でファイルをコピーする機能 がある。それを実行するためのコマンドが、scp。使い方は、cp コマンドと似せて作ってある。

Unix の cp コマンド (sがない)は、次のようにして使う。

$ cp file1 file2 [←]
$ cp file1 file2 file3 dir1 [←]
$ cp file1 dir1 [←]
$ cp -r dir1 dir2 [←]
cp コマンドで、最後にディレクトリを指定すると、そのディレクトリの下に葉 の部分の名前が同じ名前のファイルが作られて内容がコピーされる。

scp は、ssh の機能を使いながら、異なるコンピュータ間(ホスト間)でファイ ルをコピーするコマンドである。次のように、コピー元かコピー先のどちらか に「ユーザ名@ホスト名:」を付加する。

ローカルからリモートへのコピー

$ scp file1 user1@host1:file2 [←]
$ scp file1 file2 file3 user1@host1:dir1 [←]
$ scp file1 user1@host1:dir1 [←]
$ scp -r dir1 user1@host1:dir2 [←]
リモートからローカルへのコピー
$ scp user1@host1:file1 file2 [←]
$ scp user1@host1:file1 dir1 [←]
$ scp -r user1@host1:dir1 dir2 [←]
コロン「:」が大事。

ローカルとリモートで、ログイン名が同じ時には、user1@ を省略して host1 だけで良い。

◆sshに関するもう少し詳しい話

アクセス制御、暗号、SSL、SSH、Webサーバ・アクセスログ

■Emacs

手引き 3章 参照

メモ帳とか、単純なテキスト・エディタ、ワードプロセッサでは、 プログラムを開発することはできない。 プログラム開発には、それに適したテキストエディタを使う。

情報科学類標準のテキスト・エディタは、Emacs である。 他のエディタが好きな人でも、若い人は、いろいろ使ってみることを推奨する。

GNU Emacs (ぐにゅー いーまっくす)。 Free Software Foundation開発。 Richard Stallman 原作。

いくつかの種類がある。

◆キー表記

手引き 3章 参照

C-
Control キーを押しながら押す
M-
Meta キー押しながら押す

Meta キーがない時には、Esc キーを使う。 例えば、M-x と打ちたい時には、 例えば、まず、Escキーを打ち(離し)、その後、x キーを打つ。 (キーを2回に分けて打つ。) ただし、説明の表記は、M- のままなので注意する。

◆端末で実行

端末(遠隔ログイン含む)で Emacs を実行するには、次のように打つ。
$ emacs file.txt [←]
「file.txt」は、編集したいファイル名。他のファイルを編集したい時には変 更する。ファイルが存在しなければ、新しく作成する。ファイルが存在すれば、 そのファイルの内容を変更する。

◆C-x C-s C-x C-c

Emacs で編集したファイルを保存して終了するには、C-x C-s C-x C-cC-x C-s」は、保存の意味。「 C-x C-c」が終了の意味。

◆保存しないで C-x C-c で終了

編集した後、保存しないで終了しようとすると、Emacs から問い合わされる。
Save file ファイル名? (y, n, !, ., q, C-r, d or C-h) []
こういう時には、次のどれかをすると良い。

◆C-g

手引き 3.1.2項 参照。 どんなキーを打ったのかわからなくなった時、 困った時には、C-g を複数回連打する。

◆カーソル移動

キーを打った時に、文字が入る場所をカーソルという。

カーソル移動には、矢印キー(←、→、↑、↓)も使えるが、 手がホームポジションから離れてしまうのでよくない。 Control キーを使う方法を使う。 手引き 3.3.3項 参照手引き 表3.2 参照

C-b	backward-char
C-f	forward-char
C-p	previous-line
C-n	next-line
このキー操作は、多くの「端末」でも使える。 特に、C-p (Control+P) は、直前のコマンドを再実行する時に便利なので、必ず覚える。

◆削除

手引き 3.3.4項 参照, 手引き 表3.3 参照。  

カーソルの左側を削除する方法とカーソルの右側(カーソルのある場所)を 削除する方法がある。

C-d	delete-char		カーソルがある文字(右)を削除
DEL	delete-backward-char	カーソルの左の文字を削除
C-k	kill-line		カーソルがある文字(右)から行末まで削除
				空行なら1行削除

◆カット&ペースト、コピー&ペースト

手引き 3.3.5項 参照。 ,

マーク
C-SPC (Control + Space キー)または C-@ で設定する。 うまくいくと、ミニバッファに Mark set と表示される。 カーソルを動かしても移動しない。 次に新しいマークをセットするまで有効。
ポイント(カーソルのある位置)
カーソルを動かすと移動する。
リージョン(領域)
マークした場所とカーソルの間
リージョンに対する操作には、さまざまなものがある。 カットしたもの、または、コピーしたものをペーストするには、C-y を 使う。

テキストの移動(カット&ペースト)の方法

  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. C-wでカット
  4. カーソル移動
  5. C-yでペースト
コピー&ペーストの方法
  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. M-w、または、Esc wでコピー
  4. カーソル移動
  5. C-yでペースト

◆大量の削除

カット&ペーストのカットだけをやる。
  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. C-wでカット

◆複数のプログラムで書き換え

1 つのファイルを、同時に複数のプログラムで書き換えると問題が生じる。 (端末を複数開いて、複数の端末で emacs 実行し、同じファイルを書き換えると問題が生じる。) 1つのファイルは、同時には 1つのプログラムで修正する。

Emacs には、1 つのファイルを複数の Emacs で編集しないようにするために、ロックの機能がある。 複数の Emacs で編集しようとしていることを検出すると、Emacs は次のような警告を発する。

ファイル名 locked by ユーザ名@コンピュータ名 (pid 番号): (s, q, p, ?)?[]
普通は、qと答えて、編集しない。 s では、ロックを (steal) して編集、 p では、ロックはそのままで編集できるが、良い方法ではない。

◆Emacsを終了してから端末を終了すること

Emacs が動いている端末(iTerm)のウィンドウを左上の「赤」ボタンで閉じては いけない。そうすると、次のようなトラブルが生じることがある。

実行と逆順に終了するのが良い。例えば、iTerm、シェル、emacs の順に実行した ら、emacs、シェル、iTerm の順に終了する。

macOS では、しばしばウィンドウを閉じてもアプリケーションが実行し続けていることがある。 macOS で iTerm や「ターミナル.app」を終了させるには、 画面の一番上にある「iTerm」や「ターミナル」メニューから「Quit iTerm2」 や 「ターミナルを終了」を選ぶ。

◆undo

手引き 3.3.6項 参照。 undo (操作を元に戻す)という考え方がある。C-x u。

◆Emacs補完機能

手引き 3.3.2 ファイル操作 参照

Emacs で C-x C-f 等でファイル名を打つ時、補完機能を使うと便利である。 練習問題 emacs、タブキーによる補完機能

◆Emacs info

Emacs のマニュアルは、Emacs の中で info という機能を実行して表示できる。

M-x info[←]
info は全体として木構造になっている。 練習問題 Emacs の中の info 機能参照。

◆英語チュートリアル

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

■bashのEmacs風機能

◆bashのコマンド行の編集機能

bash には、Emacs に似せて、コマンド行の編集機能がある。 (zsh 等でもだいたい同じ。) C-pは、絶対覚える。

◆bashのファイル名補完機能

Emacs には、 タブ・キーによる補完機能がある。 手引き 3.3.2 ファイル操作 参照

類似の機能が bash にもある。 ファイル名やディレクトリ名を打つ時に便利である。

 $ cd ~/L[tab][]
 $ cd ~/Library/[]
行頭では、コマンド名を補完してくれる。 zsh でもだいたい同じ。

手引き 2.13 tabキーによる補完 参照練習問題 bash補完機能(1) 参照。 練習問題 bash補完機能(コマンド名)参照。

■実習

練習問題は、時々更新する。 レポート課題は、それとは別に、ページの末尾にある。

◆実習室 macOS iTerm

練習問題(2001) iMac macOS 端末 iTerm の実行と終了

図? iTermのアイコン 手引き 2.1節 参照

実習室の iMac で macOS が動いている時 Dock から iTerm のアイコンをシングルクリックで実行しなさい。 ウインドウの中で シェルが実行される ことを確認しなさい。 シェルのプロンプトがどうなっているか確かめなさい。

exit コマンドを使って、ウインドウの内部のシェルを終了しなさい。

$ exit [←]

左上の「iTerm」 のメニューをクリックしなさい。メニューの一番したの 「Quit iTerm (iTermを終了)」をクリックする。

iTermの終了 (クリックで拡大)

練習問題(2002) iTermの設定

手引き 2.1節 参照

iTerm の設定を変更して、使いやすいようにしなさい。 標準で次のようになるように設定することを奨める。

そのためには、次のような操作を行う。
  1. Dock のアイコンをクリックして iTerm を実行する
  2. 一番上のメニュー・バーにある「Profiles」をクリックし開き、 「Open Profiles」を選ぶ。
  3. 「Default」をクリックして選ぶ。
  4. 「Edit Profiles」ボタンをクリックしてウィンドウを開く。
  5. 「Colors」をクリックしてそのタブを開く。 下の「Color Presets」を選び、「Light Background」 を選ぶと、 白地に黒に変更することができる。
  6. 「Text」タブでフォントの大きさを変更することができる。

    iTerm、設定、Text、フォント (クリックで拡大)
    iTerm、環境設定、プロファイル、Default、Text

  7. 「Windows」をクリックし、そのタブを開き、「Settings for New Windows」の下の 「Columns」を「80」に、「Rows」 を「40」にする。
  8. 「Terminal」をクリックし、そのタブを開く。 Terminal Emulation の次の 「Character Encoding:」が「Unicode (UTF-8)」になっていることを確認する。 「Report Terminal Type:」は、「xterm-256color」にする。
  9. 設定が終わったら、「Preferences」のウィンドウの左上の赤い丸いボタ ンを押し、そのウィンドウを閉じる。
  10. さらに、「Profiles」ののウィンドウの左上の赤い丸いボタンを押し、そ のウィンドウを閉じる。
  11. 一番上のメニューバーにある「Shell」メニューの「New window」を を選ぶ。
  12. iTerm の中のシェルに対して「locale [←]」コマンドを実行し、 LANG="ja_JP.UTF-8" と表示されることを確認する。
    $ locale [←]
    LANG="ja_JP.UTF-8"
    ...
    $ []
    
画面の行数は 40-50 が使いやすい。ウィンドウの上下左右、4隅にマウスカー ソルを合わせ、カーソルが変化した状態でドラッグすれば、大きさが変更でき る。毎回変更したいなら、好みの大きさで一度設定を変更して保存する。

横幅は、普通、80 だが、必要に応じて広くする。「デフォルトを更新」を選ば なければ、そのウィンドウだけが変更され、設定は残らない。

なお、日本語を表示させるには、"ja_JP.UTF-8"の他に、EUC も使える。EUC に は、日本語以外(韓国語、中国語、その他)もある。

練習問題(2003) 簡単なコマンドの実行

iTerm 等の端末プログラムを実行したり、遠隔ログインを行った後で 次のような簡単で安全なコマンドを実行してみなさい。安全とは、間違った操 作をしたとしても、何かが失われるいったことが起きる心配がないという意味 する。
cal
cal 2022
cal 4 2022
カレンダーの表示
$ cal 4 2022 [←]
      4月 2022
日 月 火 水 木 金 土
                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

$ []
date
今日の日付の表示
date -u
今日の日付の表示(UTC(Universal Cordinated Time),旧グリニッジ標準時で)
look spelling
英単語の検索
finger s2001234
ユーザ名の検索 (引数は自分や友達のログイン名で置換える。)
echo hello
文字の表示
expr 1 + 2
計算(区切りに空白が必要)
echo $((10*20))
計算

練習問題(2004) iTerm:2つのウィンドウ

iTerm のウィンドウを 2 つ開きなさい。
  1. 一番上のメニューバーの「Shell」をクリックする。
  2. 表示されるメニューで「New Window」を選ぶ。
開いたウィンドウで、シェルに対してコマンドを打ち込み、実行しなさい。

最後に、exit コマンドを実行し、シェルを終了し、 ウィンドウを閉じなさい。

練習問題(2005) macOS iTerm の機能

iTerm には次のような機能がある。そのことを確認しなさい。 ただし、スクロールバックの機能は、次の場合、はうまく働かない。 この場合は、ページャやテキスト・エディタの機能を利用して見えなくなって しまった部分を表示する。 このことを確認しなさい。

◆ファイルを扱うコマンド

練習問題(2006) lsによるホーム・ディレクトリの観察

ls コマンドで、自分のホーム・ディレクトリにどのようなファイルやディレク トリがあるかを調べなさい。また、-l オプションの働きを確認しなさい。
$ ls [←]
$ ls -l [←]

練習問題(2007) lsによるホーム・ディレクトリの観察

ls コマンドで、自分のホーム・ディレクトリにどのようなファイルやディレク トリがあるかを調べなさい。また、-l オプション、-a オプション、-d オプショ ンの働きを確認しなさい。
$ cd ~ [←]
$ ls [←]
$ ls -a [←]
$ ls -l [←]
$ ls -la [←]
$ ls -d [←]
$ ls -dl [←]
$ ls -adl [←]

練習問題(2008) cd、pwd、lsによるディレクトリの観察

次のディレクトリの内容を cd コマンド、pwdコマンド、および、ls コマンド を使って観察しなさい。
$ cd ディレクトリ名 [←]
$ pwd [←]
$ ls [←]
$ ls -l [←]

練習問題(2009) cdコマンドによるホームディレクトリへの移動

次の方法で、ホームディレクトリへ移動してみなさい。

(1) 引数無しで cd コマンドを実行

$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd [←]
$ pwd [←]
$ ls [←]
(2) cd コマンドに、「~」を与える。
$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd ~ [←]
$ pwd [←]
$ ls [←]
(3) cd コマンドに、「~ログイン名」を与える。
$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd ~ログイン名 [←]
$ pwd [←]
$ ls [←]

練習問題(2010) cdコマンドによるホームディレクトリ以下のディレクトリへの移動

ホーム・ディレクトリの下に、どのようなディレクトリがあるかを ls -l で調 べなさい。
$ ls -l [←]
ディレクトリの場合、左端が「d」になっている。 ( ファイルの属性 参照 ) cd コマンドを使って、カレント・ワーキング・ディレクトリを ホーム・ディレクトリの下のディレクトリに変更しなさ い。以下は、Music に変更した例である。
$ cd [←]
$ pwd [←]
$ ls [←]
$ cd Music [←]
$ pwd [←]
$ ls [←]
Music も含めて次のようなディレクトリについても、類似の操作を行い なさい。

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

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

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

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

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

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

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

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

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

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

練習問題(2015) ファイルとディレクトリの操作(まとめ)

Emacs やその他の方法で、まずファイルを数個、作成しなさい。
$ emacs file1.txt [←]
$ emacs file2.txt [←]
$ emacs file3.txt [←]
mkdir コマンド、ディレクトリを数個、作成しなさい。
$ mkdir dir1 [←]
$ mkdir dir2 [←]
$ mkdir dir3 [←]
そして、次の表にあるファイルの操作を行ってみなさい。

ls	f1 f2 f3	ファイルの名前の一覧の表示
ls	dir		ディレクトリの内容の表示
ls			カレント・ワーキング・ディレクトリの内容の表示
ls -d	d1 d2 d3	ディレクトリの名前の一覧の表示
ls -a	dir		ディレクトリの内容の表示(.で始まる名前も表示)
ls -l	f1 f2 f3	ファイルの属性の表示
ls -ld	d1    		ls -l -d の組み合わせ
pwd			カレント・ワーキング・ディレクトリの表示
cd	dir		カレント・ワーキング・ディレクトリの変更
cd			ホーム・ディレクトリへ移動
cat	f1		ファイルの内容の表示
head	f1		ファイルの内容の表示(最初の10行)
cp	f1 f2		ファイルのコピー
cp	f1 f2 f3 dir	ファイルを指定されたディレクトリへコピー
cp	dir/f1 .	ファイルをカレント・ワーキング・ディレクトリへコピー
rm	f1 f2 f3	ファイルの削除
mv	old new		ファイルの名前を変える
mv	f1 f2 f3 dir	ファイルの名前を変える(dir以下への移動)
mkdir	dir		ディレクトリの作成
mkdir -p d1/d2/d3	ディレクトリの作成(親も自動的に作成)
rmdir	dir		ディレクトリの削除(空のディレクトリの時)

f1, f2, f3 はファイル名、dir, d1, d2, ... は、ディレクトリ名
headコマンドは、ファイルの先頭の 10 行(または、指定された 行数) を表示するコマンドである。以下の例では、ファイルの先頭 /usr/share/dict/wordsの先頭を表示している。
$ head /usr/share/dict/words  [←]
A
a
aa
aal
aalii
aam
Aani
aardvark
aardwolf
Aaron
$ head -5 /usr/share/dict/words  [←]
A
a
aa
aal
aalii
$ []
このコマンドの動きを確認しなさい。次のファイルを指定してみなさい。 また、-n (nは数)オプションの動きを調べなさい。ファイル が短い時、10行、または、それ以下の行数しかない時には、head コマンドが何 行表示するかを調べなさい。

練習問題(2017) tailコマンド

tailコマンド は、 headコマンドとは逆に、 ファイルの末尾の 10行(または、指定された行数)を表示するコマンドである。
$ tail /usr/share/dict/words  [←]
zymotoxic
zymurgy
Zyrenian
Zyrian
Zyryan
zythem
Zythia
zythum
Zyzomys
Zyzzogeton
$ tail -5 /usr/share/dict/words  [←]
zythem
Zythia
zythum
Zyzomys
Zyzzogeton
$ []
練習問題(2016) と同じファイルを tail コマンドで表示してみなさい。
$ tail /usr/share/dict/words  [←]

練習問題(2018) lv コマンド

手引き 2.7.2 参照。 lvコマンドは、長いテキスト・ファイルを対話的に1ページずつ表示するコマン ドである。lvコマンドで次のような長いテキスト・ファイルを表示してみなさ い。 例:
$ lv /usr/share/dict/web2 [←]
<表示省略。>
<「:」は、lv コマンドのプロンプト。>
<「:」に対して、lv コマンドを操作するキーを打つ事ができる。>
:[]
そして、次の機能を確認しなさい。 次のようにして、マニュアルを表示しなさい。
$ lv -h [←]
$ man lv [←]
次のキーの動作を確認しなさい。
キー 説明
スペース 1ページ進める
q 終了
f 1ページ進める(forward)
b 1ページもどる(back)
j 1行進める
k 1行もどす
g 先頭にもどる
G 末尾にもどる
/str 文字列 str をファイルの末尾に向かって探す
?str 文字列 str をファイルの先頭に向かって探す
n 直前の検索をファイルの末尾に向かって繰り返す(next)
N 直前の検索をファイルの先頭に向かって繰り返す(next)
= ファイル名、位置(行数)、文字コードを表示する

練習問題(2019) lvコマンドによるファイルの文字コードの自動変換の確認

lv コマンドは、ファイルの文字コードを自動的に判定し、端末の文字コードに 変換して表示する機能がある。このことを確認しなさい。

$ cat ファイル名 [←]
<表示省略。文字化け>
$ []
このファイルを lv コマンドで表示すると、きちんと表示される。
$ lv ファイル名 [←]
<表示省略。正しく表示>
<終了するにはqキーを押す>
:q
$ []

練習問題(2020) ASCII表の表示

man コマンドを用いてASCII表を表示しなさい。そして、16進数(hexadecimal) による表記が含まれていることを確認しなさい。
$ man ascii [←]
<表示>
<終了するにはqキーを押す>
:q
$ []

◆ファイルの置き換え

練習問題(2021) ファイル名置換、テキストファイルの一覧表示

ホームディレクトにあるテキストファイルの一覧を表示しなさい。 テキストファイルには、ファイルの末尾(拡張子)として、「.txt」や 「.text」がついているものとする。
$ ls *.txt [←]
$ ls *txt [←]
$ ls *.text [←]
$ ls *text [←]
$ ls *.txt *text [←]
$ ls *.t*xt [←]

練習問題(2022) ファイル名置換、ls -ld

ホームディレクトにある、大文字 D から始まるディレクトリの一覧を表示しな さい。
$ cd [←]
$ ls -d D* [←]
Desktop		Documents	Downloads
$ ls -ld D* [←]
drwx------  4 yas  prof  5120  4 21 14:35 Desktop
drwx------  6 yas  prof  1024  5 13  2016 Documents
drwx------  2 yas  prof  1024  4 13 17:31 Downloads
$ []
この例では、 lsの-dオプションによるディレクトリそのものの表示 の機能を利用している。これを付けなかった場合、どうなるか調べなさい。
$ cd [←]
$ ls D* [←]
$ ls -l D* [←]
同様に、大文字 M から始まるファイルやディレクトリを表示しなさい。

同様に、小文字 s で終わるファイルやディレクトリを表示しなさい。

$ ls -ld *s [←]

練習問題(2023) ファイル名置換、長い名前のディレクトリにcd

ホームディレクトに、次のような 大文字 D から始まる 3 つのディレクトリ があったとする。
$ cd [←]
$ ls -ld D* [←]
drwx------  4 yas  prof  5120  4 21 14:35 Desktop
drwx------  6 yas  prof  1024  5 13  2016 Documents
drwx------  2 yas  prof  1024  4 13 17:31 Downloads
$ []
この中で、Desktop に cd したい。単純な方法では、長い名前を全て打ち込む ことである。
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd Desktop [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []
ファイル名置換を使って、短い名前で cd できることを確認しなさい。
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd De* [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd D*p [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []

練習問題(2024) ファイル名置換、長い名前のアプリケーションの実行

/Applications/Calculator.app は、電卓のプログラムである。これをシェルか ら実行するためには、次のように open コマンドに対してパス名を与えればよい。
$ open /Applications/Calculator.app [←]
これを、ファイル名置換機能(*,?)を利用して、長い文字列をキーボードから打 たないで実行しなさい。
$ echo /App*/Calc* [←]
(1つしか表示されない確認する。複数あると問題がある。)
$ ls -d /App*/Calc* [←]
(1つしか表示されない確認する。複数あると問題がある。)
$ open /App*/Calc* [←]
同様に、/Applications にある、他のアプリケーション・プログラムを実行し てみなさい。
$ ls /Applications [←]
$ echo  「*」を含むファイル名 [←]
$ ls -d 「*」を含むファイル名 [←]
$ open  「*」を含むファイル名 [←]

◆その他ファイルを扱う方法

練習問題(2025) fileコマンド

file コマンドは、ファイルの種類を推定して表示するコマンドである。ファイ ルの拡張子がなくても、画像や HTML 等を推定できる。
$ file .bashrc .emacs /bin/ls public_html/htdocs/index.html.en [←]
.bashrc:                          ASCII text
.emacs:                           Lisp/Scheme program text
/bin/ls:                          Mach-O 64-bit executable x86_64
public_html/htdocs/index.html.en: HTML document text
$ []

練習問題(2026) macOS Finderによるホーム・ディレクトリの観察

macOS Finder でホーム・ディレクトリを開きなさい。そして、ls の結果と比較しな さい。
  1. Dock で Finder をクリック
    Finderのアイコン
  2. 一番上ののメニューバーの「移動」メニューから「ホーム」を選ぶ。

練習問題(2027) macOS Finderの表示方法の変更、サイドバー

Finder のサイドバーに、ホームディレクトを表示させることができる。このこ とを確かめなさい。

  1. Dock で Finder をクリック
    Finderのアイコン
  2. 一番上のメニューバーの「Finder」をクリックする。
  3. 表示されるメニューで「環境設定」をクリックする。
    Finder の環境設定 (クリックで拡大)
  4. 表示されるウィンドウで、「サイドバー」をクリックして、サイドバーの設定を変更するためのタブを開く。
    Finder の環境設定、サイドバーのタブ (クリックで拡大)
  5. 「家のアイコン」の左側のチェックを入れる。
  6. 左上の赤いボタンを押し、ウィンドウを閉じる。
くわしくは macOS Sierra: Finder ツールバーとサイドバーをカスタマイズする 参照。

練習問題(2028) treeコマンド

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

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

$ tree -N ディレクトリ名 [←]
注意: 表示が止まらなくなった時、強制終了したい時には、 Control キー + c キー も使える。

lv による表示。後ろに「| lv」をつける。 終了するには、q キーを打つ。

$ tree -N ディレクトリ名 | lv [←]
<表示省略>
<空白キーで次のページを表示>
:q
$ []

iTerm にペーストする時に「?」が表示されるならば、次のように すれば (UTF-8ではなく) ASCII 文字を使うようになる。

$ LANG=C tree -N ディレクトリ名 [←]

tree コマンドの次のオプションの意味を ls と比較しなさい。

詳しくは、man tree を見なさい。

練習問題(2029) Finderによるホーム・ディレクトリの観察

Finder でホーム・ディレクトリを開きなさい。そして、ls の結果と比較しな さい。
  1. Dock で Finder をクリック
    Finderのアイコン
  2. 一番上のメニューバーにある「移動」メニューから「ホーム」を選ぶ。

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

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

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

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

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

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

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

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

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

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

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

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

Finder で、ファイルを削除することができる。このことを確認しなさい。 ただし、ファイルを「ゴミ箱」に入れただけでは、まだ完全に削除されたわけ ではない。ゴミ箱から取り出すことはできる。

練習問題(2035) 「ゴミ箱」の表示

「ゴミ箱」の内容を表示しなさい。

練習問題(2036) 「ゴミ箱を空にする」

ゴミ箱にファイルが残っている状態では、まだディスク quota を消費している。 「ゴミ箱を空にする」という操作を行い、その前後で quota が変化することを 調べなさい。

練習問題(2037) openコマンド

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

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

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

◆その他の端末の操作

練習問題(2039) Linuxの起動、ログイン、GNOME端末の実行

練習問題(2040) Linux: GNOME端末、文字コードの変更

実習室にある Linux で GNOME端末を実行すると、標準の文字コードが UTF-8 になっている。 これを別のもの、たとえば、「日本語 EUC」にしてみなさい。 「日本語 (EUC-JP)」等必要に文字コードがメニューに現れない時には、「端末 (T)」メニューから「文字コードの設定→追加と削除」で追加するとよい。 文字コードを変更したら、次のようにして効果を確かめなさい。
$ echo $LANG [←]
$ date [←]
$ locale [←]
$ LANG=ja_JP.eucJP [←]
$ locale [←]
$ date [←]
$ []
変更した文字コードを元に戻しなさい。

練習問題(2041) bash補完機能(長い名前のアプリケーションの実行)

/Applications/Calculator.app は、電卓のプログラムである。これをシェルか ら実行するためには、次のように open コマンドに対してパス名を与えればよい。
$ open /Applications/Calculator.app [←]
これを、bash補完機能を利用して、長い文字列をキーボードから打 たないで実行しなさい。
$ open /A[tab]/Calc[tab] [←]
同様に、/Applications にある、他のアプリケーション・プログラムを実行し てみなさい。
$ ls /Applications [←]

練習問題(2042) bashキー操作

bash の次の Emacs 風キーの働きを確認しなさい。 次の操作を行いなさい。

練習問題(2043) lv コマンド

手引き 2.7.2 参照。 lvコマンドは、長いテキスト・ファイルを対話的に1ページずつ表示するコマン ドである。lvコマンドで次のような長いテキスト・ファイルを表示してみなさ い。 例:
$ lv /etc/services [←]
<表示省略。>
<「:」は、lv コマンドのプロンプト。>
<「:」に対して、lv コマンドを操作するキーを打つ事ができる。>
:[]
「:」は、プロンプト。「ファイル名:」のように、ファイル名が表示されることもある。

次の機能を確認しなさい。

次のようにして、マニュアルを表示しなさい。
$ lv -h [←]
$ man lv [←]
次のキーの動作を確認しなさい。
キー 説明
スペース 1ページ進める
q 終了
f 1ページ進める(forward)
b 1ページもどる(back)
j 1行進める
k 1行もどす
g 先頭にもどる
G 末尾にもどる
/str 文字列 str をファイルの末尾に向かって探す
?str 文字列 str をファイルの先頭に向かって探す
n 直前の検索をファイルの末尾に向かって繰り返す(next)
N 直前の検索をファイルの先頭に向かって繰り返す(next)
= ファイル名、位置(行数)、文字コードを表示する

練習問題(2044) manコマンド

man コマンドで、次のコマンドのマニュアルを表示しなさい。 長いマニュアルを表示した時に自動的に lv コマンド が実行されていることを確認しなさい。lv コマンドの次のキーが有効であるこ とを確認しなさい。

練習問題(2045) man -k

man -k を使って、マニュアルの検索を行いなさい。 その結果と apropos コマンドの結果を比較しなさい。
$ man -k emacs [←]
$ apropos emacs [←]

練習問題(2046) info コマンド

info コマンドを実行しなさい。終了は、q または C-x C-c。 後述する Emacs の info と比較しなさい。
$ info info [←]
$ info bash [←]
$ info emacs [←]

◆端末と文字コード

練習問題(2047) 端末の文字コードの確認

端末では、標準の文字コードが決まっている。次のようなコマンドを実行する と、それを確認することができる。
$ echo $LANG [←]
ja_JP.UTF-8
$ locale [←]
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=
$ []
この例では、言語が日本語、文字コードが UTF-8 であることがわかる。

iTerm 等の端末で、上のコマンドを実行してどうなるか調べなさい。

練習問題(2048) macOS iTermが扱う文字コードの確認

iTerm で利用している文字コードを確認しなさい。 標準の設定を変更する方法は、練習問題 iTermの設定 に示した。 次のように、現在開いている iTerm のウィンドウの設定を表示したり、一時的 に変更することもできる。
  1. 一番上のメニューバーの「View」をクリックし、開いたメニューで、 「Edit Current Session」をクリックして選ぶ。
  2. Terminal タブを選ぶ。
  3. 「Terminal Emulation」の下の「Character Encoding」の右にあるボタン を押す。すると、様々な言語の様々な文字コードが表示される。
iTerm の文字コードを、一時的に変更するとどうなるか、確認しなさい。
  1. まず、日本語を表示するようなコマンドを実行してみる。
    $ date [←]
    $ cal [←]
    
  2. 上記の方法で、「Character Encoding」を「Unicode (UTF-8)」から他のものに変更する。
  3. 変更後、日本語を表示するようなコマンドを再び実行してみる。
    $ date [←]
    $ cal [←]
    

練習問題(2049) nkfコマンド (network kanji finter)

nkf (network kanji finter)は、漢字コードを変換するためのプログラムであ る。 手引き 2.16.2項 参照。 man nkf参照。

nkf は、cat コマンドで表示すると文字化けするようなファイルを、端末で表 示する時に使う事ができる。このことを確認しなさい。

$ cat ファイル名 [←]
$ nkf -w ファイル名 [←]
nkf では、-w を含めて次のようなオプションがよく使われる。

-j
出力を JIS に。なにもつけない場合も JIS になる。
-e
出力を EUC-JP に
-s
出力を Shift_JIS に
-w
出力を UTF-8 に

練習問題(2050) nkfによる文字コードの確認

nkf に --guess オプションを付けると、文字コードを変換するのでは く、文字コードの推定を行い、推定結果を表示する。このことを確認しなさい。
$ nkf --guess ファイル名 [←]
$ []

練習問題(2051) lvコマンドによるファイルの文字コードの自動判定結果の表示

lv コマンドは、ファイルの文字コードを自動的に判定している。「=」 キー使うと、判定結果を表示することができる。
$ lv ファイル名 [←]
<表示省略>
:=
 ファイル名 1/124 [EUC-JP|UTF-8|UTF-8|UTF-8]:[]
この例では、ファイル「ファイル名」の文字コードが「EUC-JP」 と判定していることがわかる。「UTF-8」は、端末の文字コードである。

lv のこの機能を利用してみなさい。

◆Emacs

練習問題(2052) emacsによるファイルの新規作成(端末内)

次の手順で Emacs (iTerm内で実行)を使ってテキストファイルを作成しなさい。

練習問題(2053) emacsによるファイルの編集(端末内)

練習問題(2054) emacs、保存しないで終了(端末内)

練習問題 emacsによるファイルの新規作成(端末内)練習問題 emacsによるファイルの編集(端末内) では、 C-x C-s で保存し、 C-x C-c で終了で終了していた。 その代わりに、 保存しないで C-x C-c で終了 してみなさい。そして、次の操作をしてみなさい。

練習問題(2055) emacsによるファイルの新規作成(端末内)(C-x C-f)

キー操作 C-x C-f を使って、ファイルを作成しなさい。

練習問題(2056) emacsによるファイルの編集(端末内)(C-x C-f)

練習問題 emacsによるファイルの新規作成(端末内)(C-x C-f) で、存在するファイル名を打ち込みなさい。 これにより、既存のファイルを編集できることを確認しなさい。 で作成したファイルの内容を修正しなさい。

練習問題(2057) emacsによるファイルの新規作成(ウィンドウ)

練習問題 emacsによるファイルの新規作成(端末内) と同じことを、Dock にある Emacs (ウイドウを開く Emacs ) で行いなさい。

練習問題(2058) ファイル操作とバイト数

練習問題(2059) emacsのキー操作

次の表に含まれているキーを覚えて使えるようにしなさい。
キー 説明
C-x C-s バッファを保存。
C-x C-c Emacsを終了。
C-x C-f ファイルを探して編集、または、新規作成。
C-p カーソルを移動(previous)
C-n カーソルを移動(next)
C-f カーソルを移動(forward)
C-b カーソルを移動(backward)
Delete 左の文字の削除
C-k カーソルの位置から行末まで削除。行末の場合は、改行の削除。
C-g 何か困った時には、何度か打つ。

練習問題(2060) emacsの機能確認

手引き 3.1節-3.3節, YHM_ULT()25章, 本Webページを参照して、 それに記述されている機能を確認しなさい。

練習問題(2061) Emacs チュートリアル

Emacs には、チュートリアル機能(自習機能)がある。これを実施しなさい。 手引き 3.1.4項 参照。 この実習項目は、[加点]の課題である。実施する時には、開始時刻と終了時刻 を記録しなさい。 標準では、日本語のチュートリアルが実行される。 英語、その他の言語のチュートリアルを実行するには、 M-x help の前に、C-u を打つ。

言語としては、次のようなものの中から選択できる。

ASCII Brazilian Portuguese Bulgarian Chinese-BIG5 Chinese-GB Czech Dutch English Esperanto French German Italian Japanese Korean Polish Romanian Russian Slovak Slovenian Spanish Swedish Thai

フォントの問題でうまくいかないかもしれない。

練習問題(2062) Emacs infoの表示

Emacs の info を表示して読みなさい。 Emacs を実行した後で、次のようなキーを打つ。

練習問題(2063) Emacs、カット&ペースト、コピー&ペーストのキー操作

次の表に含まれているキーを覚えて使えるようにしなさい。
C-SPC または C-@ 領域(region)の先頭を決める(マーク)
C-w リージョン(領域)をカット
ESC w リージョン(領域)をコピー
C-y リージョン(領域)をペースト

練習問題(2064) bashキー操作

bash の次の Emacs 風キーの働きを確認しなさい。 次の操作を行いなさい。

練習問題(2065) Emacs、ファイルから大量の不要な行の削除

Emacs のカット機能を使って、ファイルから大量の不要な行を削除する練習を 行いなさい。
  1. 練習用のファイルを作成する。次の例では、前回のレポートのファイルを コピーして作成している。他のファイルでも良い。
    $ cp /etc/passwd emacs-cut.txt [←]
    
  2. emacs を実行する。
    $ emacs emacs-cut.txt [←]
    
  3. 消したい場所(たとえば、問題の詳しい説明)の先頭にカーソルを移動さ せる。 C-f, C-b, C-n, C-p キーを使う。
  4. C-SPC 、または、C-@ キーを打ち、マークを設定する。
  5. 消したい場所末尾にカーソルを移動させる。
  6. C-w キーでカットする。
  7. 3. から 6. を繰り返す。
  8. 最後に、Emacs を C-x C-s C-x C-c で終了する。
マークを付ける場所は、消したい場所の先頭ではなく末尾でも良い。その場合 は、カーソルを消したい場所の先頭に移動させる。そのことを確認しなさい。

練習問題(2066) Emacs チュートリアル

Emacs には、チュートリアル機能(自習機能)がある。これを実施しなさい。 手引き 3.1.4項 参照。 この実習項目は、[加点]の課題である。実施する時には、開始時刻と終了時刻 を記録しなさい。 標準では、日本語のチュートリアルが実行される。 英語、その他の言語のチュートリアルを実行するには、 M-x help の前に、C-u を打つ。

言語としては、次のようなものの中から選択できる。

ASCII Brazilian Portuguese Bulgarian Chinese-BIG5 Chinese-GB Czech Dutch English Esperanto French German Italian Japanese Korean Polish Romanian Russian Slovak Slovenian Spanish Swedish Thai

フォントの問題でうまくいかないかもしれない。

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

Emacs には チュートリアル機能 がある。 coins の環境では標準で、日本語の環境では日本語のチュートリアルが実行される。 次の手順で、英語のチュートリアルを実行しなさい。
  1. C-u M-x help [←]
  2. t
  3. English [←]

練習問題(2068) emacs、タブキーによる補完機能

手引き 3.3.2 ファイル操作 参照

Emacs の補完機能(タブキー)を確認しなさい。

以下の例は、/etc/passwd をタブキーにより開く例である。
  1. emacs を実行する。
    $ emacs [←]
  2. ファイルを開く。C-x C-f
    Find file: ~/[]
  3. ~/」の2文字を消す。Delete キーを 2 回打つ。
    Find file: []
  4. /e」と打ちタブを打つ
    Find file: /e[tab]
    すると、tc/が補完される。
    Find file: /etc/[]
  5. pa」と打ちタブを打つ
    Find file: /etc/pa[tab]
    すると、いくつか候補が表示される。
    In this buffer, type RET to select the completion near point.
    
    Possible completions are:
    pam.d/                             passwd
    passwordreset/                     paths
    paths.d/
    
    <中略>
    
    Find file: /etc/pa[]
    
  6. s」と打ちタブを打つ
    Find file: /etc/pas[tab]
    すると、「wd」が補完される。
    Find file: /etc/passwd[]
  7. 目的のファイル名が見つかったので、最後にリターンキーを打つ。
    Find file: /etc/passwd[←]
その他に、次のファイルを補完により開きなさい。

練習問題(2069) Emacsのundo機能

Emacs の undo 機能を利用してみなさい。
  1. emacs を実行する。 引数として、練習用のファイル(内容を壊しても良いもの)を指定する。
    $ emacs file1.txt [←]
    
  2. キーボードから内容を打ち込む。
  3. C-x u と打ち、undo の効果を確認する。 C-x u は、Control + x を打ち、Control キーを離してから u と打つ。C-x C-uではない。
  4. 2. - 3. の操作を何度か繰り返す。
  5. キーボードから内容を打ち込む。
  6. C-x u と打つ。
  7. 続けて C-x u と打つ。
  8. 続けて C-x u と打つ。
  9. 5. - 8. の操作を何度か繰り返す。
  10. 別の iTerm のウィンドウを作成し、そこで何かコマンドを実行する。
  11. iTerm のコマンドの出力を、コピーする。 コピーしたい部分を、マウスでドラッグして選択し、 一番上のメニューバーの「edit」をクリックし、 表示されるメニューで「copy」をクリックする。
  12. 11. の結果を、emacs にペーストする。
  13. C-x u を、何度か打ってみる。
  14. 次のようなキー操作を何度か行い、文字や行を削除する。
  15. C-x u を、何度か打ってみる。

練習問題(2070) Emacsのundo機能

Emacs の undo 機能を利用してみなさい。
  1. emacs を実行する。 引数として、練習用のファイル(内容を壊しても良いもの)を指定する。
    $ emacs file1.txt [←]
    
  2. キーボードから内容を打ち込む。
  3. C-x u と打ち、undo の効果を確認する。 C-x u は、Control + x を打ち、Control キーを離してから u と打つ。C-x C-uではない。
  4. 2. - 3. の操作を何度か繰り返す。
  5. キーボードから内容を打ち込む。
  6. C-x u と打つ。
  7. 続けて C-x u と打つ。
  8. 続けて C-x u と打つ。
  9. 5. - 8. の操作を何度か繰り返す。
  10. 別の iTerm のウィンドウを作成し、そこで何かコマンドを実行する。
  11. iTerm のコマンドの出力を、コピーする。 コピーしたい部分を、マウスでドラッグして選択し、 一番上のメニューバーの「edit」をクリックし、 表示されるメニューで「copy」をクリックする。
  12. 11. の結果を、emacs にペーストする。
  13. C-x u を、何度か打ってみる。
  14. 次のようなキー操作を何度か行い、文字や行を削除する。
  15. C-x u を、何度か打ってみる。

練習問題(2071) bash補完機能(1)

bash の補完機能を利用して、次のファイル名を打ちなさい。
 $ ls /[]
ここまで打ったら、行末で[tab] (^I(Control+I))を1度押してみる。
 $ ls /[tab][]
1度目は何も表示が変わらない。bash や端末の設定によっては、ベルが鳴る。 行末で[tab] をもう一度してみる。
 $ ls /[tab][]
すると、ls と同じような表示がなされる。
$ ls /
 .PKInstallSandboxManager-SystemSoftware/
 .Spotlight-V100/
 .TemporaryItems/
 .Trashes/
 .com.apple.timemachine.donotpresent
 .file
 .fseventsd/
 .gnupg/
 .hotfiles.btree
 .vol/
 Applications/
 EFI/
 Library/
 Network/
 System/
 Users/
 Volumes/
 bin/
 dev/
 etc/
 home/
 installer.failurerequests
 net/
 opt/
 private/
 sbin/
 tmp/
 usr/
 var/
 $ ls /[]
目的の「usr」は、uから始まるものは、1個しかないので 「u」 とうち、[tab] を打つ。
 $ ls /u[tab][]
すると、sr/ が補完される。
 $ ls /usr/[]
[tab][tab]」([tab]を2回)打つ。
 $ ls /usr/[tab][tab][]
すると、/usr の内容が表示される。
 $ ls /usr/
 X11/        bin/        lib/        local/      sbin/       standalone/ 
 X11R6/      include/    libexec/    local3/     share/      
 $ ls /usr/[]
b [tab]」と打つ。
 $ ls /usr/b[tab][]
次のように「in/」が補完される。
 $ ls /usr/bin/[]
/usr/bin/」に対して、「[tab][tab]」と打つと、次のように警告される。
 $ ls /usr/bin/[tab][tab]
 Display all 976 possibilities? (y or n)[]
候補が多すぎるので、ここでは表示はしないでnを打つ。
 Display all 976 possibilities? (y or n)n
em と入れて [tab] を押す。
 $ ls /usr/bin/em[tab][]
すると、次のように「acs」が補完される。
 $ ls /usr/bin/emacs[]
これで目的のファイルを打ち込むことができた。

同様に、次のファイル名を bash の補完機能で打ってみなさい。

練習問題(2072) bash補完機能(コマンド名)

bash には、ファイル名だけでなくコマンド名を補完する機能もある。コマンド ラインの先頭で補完機能を利用すると、ファイル名ではなくコマンド名が補完 される。このことを確かめなさい。この機能を使って、次のようなコマンド名 を打ちなさい。

練習問題(2073) Emacs の中の info 機能

Emacs を実行し、その中で info 機能を利用してみなさい。
M-x info[←]
次のキー操作を確かめなさい。
キー 説明
スペース 次のページへ
n 次の節へ移動
p 前の節へ移動
タブ 次のリンクへ移動
リターン カーソルのある位置の子供の節へ移動
m 「*」のある所にカーソルを移動し、名前を指定して、子供の節へ移動
q info を終了

練習問題(2074) Emacs の機能一覧・検索

次の方法で Emacs での詳しい使い方が表示される。このことを確認しなさい。
M-x help m
機能の一覧(modeの説明)
M-x help b
キーバインディング(bindingの説明)

ssh

練習問題(2075) VPNの利用

VPN (Virtual Private Network) とは、インターネットという誰もがアクセス可能なネットワークを利用しなが ら、事実上専用線(private network) を使っているように安全な通信路を提供 する事実である。VPN を実現するためには、暗号化の技術が使われている。

coins でも、VPN 機能を提供している。 この機能を利用しなさい。

この講義のトップページにある「出席」ボタンを押してみなさい。 授業時間ではなくても、このボタンを押しても良い。授業を履修していない人 でも、このボタンを押しても良い。 そして、VPN を使っていない時と使っている時で 「出席」ボタンが表示する IP アドレスが変化することを確認しなさい。 VPN が有効なら、「130.158.」から始まる IP アドレスが表示されることが期待される。

もし変化しない時、ssh の接続で、パスワードによる認証が使えないかもしれない。 その時は、 情報科学類コンピューティング環境/VPN接続にある macOS での注意事項(「すべてのトラフィックをVPN経由で送信」にチェック) を試すこと。 macOS 以外 OS でも、ssh による遠隔ログインを VPN 経由で行うように ように設定する必用がある。 「出席」ボタンでは、IPv6 で繋がった人でも、ssh では -4 オプションを与えて IPv4 で繋ぐと パスワードによる認証が使えることがある。

練習問題(2076) sshコマンドによるcoins内のコンピュータへの遠隔ログイン

学外(自宅)で PC を使っている人は、 VPN の機能を使って、 CoinsのVPN に接続しなさい。自分の PC を学内の無線 LAN や Coins の無線 LAN に接続している人は、VPN は不用である。

次に、次のどれかの端末プログラムを実行しなさい。

その中で、ssh コマンドを実行し、coins のコンピュータに遠隔ログインしてみなさい。
$ ssh ユーザ名@hostname[←] [←]
Password: (パスワードを打つ。画面には表示されない。)[←]
hostname$ []
hostname は、接続したいコンピュータの名前を入れる。 次のページを参考にしなさい。 一番最初に接続する時には、次のような警告(Warning:)が表示される。
$ ssh ユーザ名@ホスト名[←]
The authenticity of host 'ホスト名 (IPアドレス)' can't be established.
RSA key fingerprint is SHA256:64進数43桁.
Are you sure you want to continue connecting (yes/no)? yes[←]
Warning: Permanently added 'ホスト名,IPアドレス' (RSA) to the list of known hosts.
ユーザ名@ホスト名's password: (パスワードを打つ。画面には表示されない。)[←]
ホスト名:~ ユーザ名$ []
この fingerprint は、接続先のホストの公開鍵のハッシュ値である。 SSHにおけるホストの公開鍵のハッシュ値の確認 を参考にして、正しいものであれば、yes と打ち込みなさい。

遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。

ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。

  1. 端末プログラムを実行する。
  2. プロンプトを観察する
  3. ssh で遠隔ログインする
  4. プロンプトを観察する
  5. exit コマンドで、遠隔ログインのログインシェルを終了する(ログアウトする)
  6. プロンプトを観察する
  7. exit コマンドで、端末プログラムのウィンドウを閉じる。

練習問題(2077) 遠隔ログインによるhostnameコマンドの実行

hostnameコマンド を利用すると、コンピュータのホスト名を調べることができる。 ssh による遠隔ログインの前後で hostname コマンドの結果を比較しなさい。
(sshを実行する前、端末プログラムを実行した直後。)
$ hostname [←]
(手元のコンピュータのホスト名が表示される。)
$ ssh ユーザ名@hostname [←]
$ hostname [←]
(遠隔ログイン先のコンピュータのホスト名が表示される。)
$ exit [←]
$ hostname [←]
(手元のコンピュータのホスト名が表示される。)
$ []

練習問題(2078) 遠隔ログイン後のコマンドの実行

遠隔ログイン後、 練習問題 簡単なコマンドの実行 に記載されているコマンドを実行してみなさい。 (iTerm を実行する必用はない。)

練習問題(2079) sshにおける公開鍵による認証

coins では、学外からの SSH での接続で、 ユーザの認証 の仕組みとしては、公開鍵を用いる方法だけが許されている。 パスワードによる認証が使えない。

外部から、SSH で接続するには、公開鍵を使う必要がある。coins のコンピュー タで、以下の手順で公開鍵と秘密鍵の組を作成したら、秘密鍵を ssh のクライ アントにコピーして利用する。

ssh で、 公開鍵暗号を使った利用者認証 を利用しなさい。

まず、ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。

$ ssh-keygen -t rsa [←]
Generating public/private rsa key pair.
Enter file in which to save the key (/home/prof/yas/.ssh/id_rsa): [←]
Enter passphrase (empty for no passphrase): パスフレーズ[←]
Enter same passphrase again: パスフレーズ[←]
Your identification has been saved in /home/prof/yas/.ssh/id_rsa.
Your public key has been saved in /home/prof/yas/.ssh/id_rsa.pub.
The key fingerprint is:
e4:93:eb:30:02:63:a3:73:d9:05:44:81:dc:0c:7e:85 yas@crocus14.coins.tsukuba.ac.jp
The key's randomart image is:
+--[ RSA 2048]----+
| ..*+o.          |
| .o.E.           |
|  . o   .        |
|   . . o .       |
|  =   . S        |
| o * .   o       |
|o o o o .        |
| o   . +         |
|        .        |
+-----------------+
$ []
生成に成功すると、標準では、~/.ssh というディレクトリの下に、2 つのファイルが作られる。 前者に、秘密鍵、後者に公開鍵が保存される。秘密鍵の方は、パスフレーズを 鍵とした「対称暗合系」で暗号化されて保護される。パスフレーズは、長く (10-30文字)にする。(この課 題で、うまく動作していることを確認するためには、通常のログインのパスワー ドとは必ず違うものにしなさい。)

ssh でログインする時に、生成した鍵の組を使って認証を行いなさい。 それには、クライアント側に秘密鍵を置き、サーバ側の ~/.ssh/authorized_keys (OpenSSHの場合)に、公開鍵を設定すればよい。 接続時には、秘密鍵を暗号化するために使ったパス レーズを打つ込む。(通常の通常のログインのパスワードを打つことはない。)

coins 内で実験する時には、クライアントもサーバも同じ ~/.ssh を参照する。 したがって、authorized_keys を作成するには、次のようにする

-t rsaの場合:

$ cd ~/.ssh [←]
$ ls id_rsa* [←]
id_rsa          id_rsa.pub
$ cp id_rsa.pub authorized_keys [←]

以下のように、Coins の内部で、公開鍵によるログインのテストをすると良い。

authorized_keys を作成する前には、ssh で接続する時に次のように 「パスワード Password 」が聞かれる。

$ ssh viola12 [←]
Password:
authorized_keys を作成した後には、ssh で接続する時に次のように 「パスフレーズ passphrase」が聞かれる。
$ ssh viola12 [←]
Enter passphrase for key '/home/prof/yas/.ssh/id_rsa': 
これに対して、パスフレーズを打ち込むとログインできる。

Coins 内部で公開鍵によるログインができたら、 この id_rsa と id_rsa.pub を自分の PC にコピーして利用する。 ssh コマンドならば、ホームディレクトの下に同じように .ssh というディレクトリを作成し、 その中にこれらのファイルをコピーする。 コピーするには、実習室に来て USB メモリを使う方法がある。 その他に、scp コマンドを使ってパスワードでログインしてコピーする方法がある。

練習問題(2084) scp コマンドの利用

scpコマンドを利用して手元(ローカル)の PC と遠 隔(リモート)のコンピュータとの間でファイルをコピーしなさい。

練習問題(2085) Windows: WinSCPの利用

WinSCP とは、 scpコマンド と同様に、SSH の仕組みを使ってファイルをコピーするプログラムである。 WinSCP は、Windows で動作する。

Windows で WinSCP プログラム実行し、SSH の機能を通じてファイルをコピーしてみなさい。

◆Windows

練習問題(2086) Windows Powershellの実行

Windows で Powershell を実行しなさい。 Windowsで使える端末/Windows PowerShell にあるコマンドを実行してみなさい。

練習問題(2087) Windows コマンドプロンプト

Windows でコマンドプロンプトを実行しなさい。 手引き 5.9節 参照

Windowsで使える端末/Windows コマンドプロンプト (cmd) にあるコマンドを実行してみなさい。

コマンドは大文字で打っても小文字で打っても同じように動作することを確認 しなさい。more コマンドは、lv と同じような ページャ であり、スペース・キーで 1 ページ進み、q で終了する。

練習問題(2088) Windows コマンドプロンプト、ファイル名の補完

「コマンドプロンプト」では、 Unix bashのファイル名補完機能 と同様に、 タブによるファイル名の補完が行われることを確かめなさい。また、ファイル 名を何も打っていない状態でタブを打つと、ディレクトリの内容が次々と切り 替わる。このことを確かめなさい。

練習問題(2089) Windows、コマンド名によるアプリケーションの実行

左下の虫眼鏡の右の検索欄にファイル名やコマンド名を打ち、見つかったアプリケーションを実行してみなさい。

Windowsにおける ssh の利用

練習問題(2090) Windows Powershell内での ssh コマンドの実行

Windows で PowerShell を実行しなさい。開いた端末の中で、ssh コマンド実行し、 Coins のコンピュータに接続しなさい。
$ ssh ユーザ名@ホスト名.coins.tsukuba.ac.jp [←]
ssh コマンドの使い方 参照。

練習問題(2091) Windows Tera Term による ssh 遠隔ログイン

手引き 9.1.2節 参照。 Tera Term を用いて遠隔ログインをしなさい。
  1. Tera Term を実行する。 「スタートメニュー」を表示し、 「すべてのプログラム→Tera Term→Tera Term」と選択する。
  2. 実行したら「新しい接続」というウインドウが表示される。 「ホスト」に遠隔ログインししたいコンピュータの名前を打ち込む。たとえば、 「www.coins.tsukuba.ac.jp」と打ち込む。「サービス」としては、 SSH、「TCPポート#」としては、22を選択する。最後に「OK」ボタンを押す。
    Tera Term、設定、セッション (クリックで拡大)
  3. 最初にあるホストに接続した時には、次のような警告が出る。ホストの公開鍵 の指紋(fingerprint)を確認する。 coinsの主なホストの公開鍵のハッシュ値 参照。 (注意: iMac が Windows を実行している時には、sshで接続できない。)
    Tera Term、設定、セキュリティ警告 (クリックで拡大)
  4. 確認できれば、「このホストをknown hosts リストに追加する」のチェックボッ クスにチェックを入れ、「接続」ボタンを押す。
  5. 次に「SSH認証」のウインドウが表示される。 「ユーザ名」にユーザ名を打つ。
  6. 次のウインドウでは、パスワードを打ち、「OK」ボタンを押す。 パスワードは画面には表示されない。
  7. ログインに成功した後には、「設定」メニューの「端末」で、次のような 項目を必要や好みに応じて調整する。

練習問題(2092) Windows PuTTY による ssh 遠隔ログイン

PuTTY は、Windows よく使われる SSH のクライアントである。 Tera Termと同様に PuTTY を用いて遠隔ログインして利用しなさい。
  1. PuTTY(日本語版) を実行する。
  2. PuTTYを実行すると、次のような「PuTTY設定」のウインドウが現れる。左 側の「カテゴリ(Category)」から「セッション(Sesstion)」を選びなさい(実行 直後には、最初からそうなっている。)。
    PuTTY、設定、セッション (クリックで拡大)
  3. セッション(Sesstion)では、「ホスト名」に遠隔ログインししたいコン ピュータの名前を打ち込む。たとえば、「www.coins.tsukuba.ac.jp」 と打ち込む。 その他に遠隔ログインするコンピュータとしては、 練習問題(2091) を参考にしなさい。
  4. 次に、左側の「カテゴリ(Category)」から「ウインドウ(Window)」の下の 「変換(Translation)」を選ぶ。「文字コードの設定(Remote character set):」 で、接続先の文字コードを選ぶ。接続先が coins の iMac やサーバならば、 「UTF-8」を選ぶ。
    PuTTY、設定、ウインドウ、変換 (クリックで拡大)
  5. 「セッション(Session)」に戻り、「開く(Open)」ボタンを押す。
  6. 最初にあるホストに接続した時には、次のような「PuTTY セキュリティ警 告(PuTTY Security Alert)」が出る。この時、 練習問題(2091) に示したように、接続先の公開鍵の指紋(fingerprint)を確認して、 正しければ「はい」を押す。 間違っていれば、「キャンセル」を押し、接続しない。
    PuTTY、セキュリティ警告 (クリックで拡大)
  7. login as: に対してログイン名を打つ。
  8. Password: に対してパスワードを打つ。 パスワードは画面には表示されない。
  9. ログイン後、 練習問題 Windows: 遠隔ログイン後のコマンド と同じようなコマンドを実行しなさい。

練習問題(2093) Windows: 遠隔ログイン後のコマンド

Powershell + ssh、Tera Term、PuTTY 等に学類内の別のコンピュータに遠隔ロ グインしなさい。遠隔ログインしたら、 練習問題 簡単なコマンドの実行 を実行しなさい。

次のコマンドを実行して、遠隔ログインを行っていない時(ローカルでの実行 結果)と比較しなさい。

練習問題(2094) Windows でのテキスト・ファイルの作成

Windows で、次のような方法でテキスト・ファイルを作成しなさい。

■課題(20) 端末(1)

コンピュータとしては、自分の PC 、または、実習室の PC を用いて以下のこ とを行いなさい。そして、レポートの採点者が指定されたことがきちんと行え たことを簡単に確認できるようなレポートを作成しなさい。

レポートには、指定されていなければ、端末の全ての表示を含めなさい。全て の表示とは、シェルのプロンプト、自分が打ち込んだコマンド、コマンドの実 行結果である。端末が持つコピー機能でコピーし、テキストエディタ(のウィン ドウ)にペーストするなどして、テキストをコピーして、レポートに含めること。 レポートとして、画像を提出してはならない。

「[高度]」と印が付いているものは、やらなくても良い。

(1) 自分の PC、または、実習室の iMac、または、実習室の PC で端末プログ ラムを実行しなさい。レポートには、OSの名前、端末プログラムの名前を記載 しなさい。

(2) ssh コマンド、または、ssh による遠隔ログイン専用のアプリケーション を用いて、次のホストに遠隔ログインしなさい。

A に遠隔ログインを行いなさい。B1, または B2 に遠隔ログインを行いなさい(B1, B2 は両方でも可)。 遠隔ログインを行った後に、各コンピュータで、次のコマンドを実行しなさい。
date
hostname
who am i
レポートには、A, B のそれぞれについて次の情報を含めなさい。 レポートには、ssh のプログラムを実行したコンピュータ(ローカル側、手元の コンピュータ)について、次の情報を記載しなさい。

(3) 小問(2)のA、または、Bに遠隔ログインした後で、次のコマンドを実行しな さい(この課題では、両方実行する必用はない。どちらかを選んで実行しなさ い)。レポートには、小問(2)と同様に、端末の表示(シェルのプロンプト、コマ ンド、コマンドの出力)を含めなさい。

(4) 「cd コマンド」、および、シェルのファイル名置換機能を使って /usr/bin にある次のようなファイルをすべて表示しなさい。結果は、ls コマ ンドで表示ししなさい。この課題では、ls コマンドには、必ず相対 パス名を 指定しなさい。

(5) 小問(2)のA、または、Bに遠隔ログインした後で、man コマンドを実行し、 次のことを調べてレポートに記述しなさい。man の表示のうち、その説明の部 分をレポートに含めなさい。

man コマンドを実行する時、次のキー操作を答えなさい。

(6) 小問(2)のA、または、Bに遠隔ログインした後で、Emacs を用いて、3 行以 上、10行以下 python3 のプログラムを作成し、実行しなさい。レポートには、 次のことを含めなさい。

(7) Emacs と bash (Coins 標準のシェル) では、カーソル移動やヒストリの参 照について、似たようなキー操作が使える。次のキーについて、Emacs とbash で同じ動作するものを選びなさい。

C-f,C-b,C-p,C-n

また、異なる動作を選びなさい。そして、それぞれのキーについて、Emacs で 動作と bash での動作を答えなさい。

(8) ssh で Coins のコンピュータに遠隔ログインしなさい。シェルとしては、 bash が実行される。その bash のファイル名補完機能を使って、次のファイル 名を打ちこみなさい。

レポートには、head に続いてどのようなキー操作を行なったのかを書きなさい。
$ head (ここで行ったキー操作をレポートに書く) [←]

(9) [高度] 次のような部分木(木構造の一部)を、ホーム・ディレクトリ以下 に mkdir コマンドを用いてディレクトリを作成することで表現しなさい。

ホームディレクトリ
- Tsukuba
	- Amakubo
		- 1
		- 2
		- 3
	- Kasuga
		- 1
		- 2
		- 3
	- Tennoudai
		- 1
			- 1
				- 1
作成した結果を tree コマンドで表示し、レポートに含めなさい。

さらに、rmdir コマンドで Tennoudai の節を削除しなさい。この時、子供のディ レクトリから順に rmdir コマンドで削除する必要がある。この部分も含めて、 削除に必要な rmdir コマンドを、順序も含めて正確に答えなさい。なお、この 課題では、ディレクトリの削除に rm コマンドを用いてはならない。

(10) [高度] Emacs で英語のチュートリアルを実行しなさい。レポートには、 次のことを含めなさい。

(11) [高度] 自分が使っている端末プログラムが扱うことができる文字コードの 種類を2種類以上、あげなさい。

この2種類の文字コードを端末プログラムに設定した後、ssh で情報科学類のコ ンピュータに遠隔ログインしなさい。そして、次のコマンドを実行しなさい。 date コマンドが文字化けすることなく表示されることを確認し、実行結果をレ ポートに含めなさい。もし文字化けした時には、文字化けしないように、LANG 環境変数等、遠隔ログイン先のコンピュータの設定を変更して解決しなさい。
Last updated: 2022/05/11 10:29:00
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>