筑波大学 システム情報系 情報工学域 新城 靖 <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/
なぜ「端末」を使うべきか。
図? メインフレームと端末
図? 端末とアプリケーション(メインフレーム)
図? 端末プログラムとアプリケーション(ローカル)
図? sshによる遠隔ログインと端末
プログラムの実行の方法
cmd /c assoc
, cmd /c ftype
シェルとは、オペレーティング・システムの構成要素の1つである。シェルは、 オペレーティング・システムの中心部分を貝殻のように包みむプログラムであ る。シェルは、人間とコンピュータが対話(interaction)をする時に重要な 機能を果たす。
図? シェルの位置づけ
Unix (Linuxを含む) では、sh, csh, bash, tcsh, zsh などさまざまな種類の シェルを使うことができるようになっている。X ウインドウを使っている状態 (マウスが使える状態)では、ウインドウ・マネジャと呼ばれるプログラムも、 シェルとしての働きがある。
macOS では、Finder という名前のプログラムがシェルに相当する。
Windows では、Explorer という名前のプログラムがシェルに相当する。
coins の標準のシェルは、bash である。 bash が動いている時には、コンピュータの画面には、次のような表示がなされ る(コンピュータ、ユーザによって異なる)。
aloe38:~ s2001234$
このような記号は、プロンプト(prompt)という。これは、シェルが人間に対し
て、コマンド(command、命令) の打込みをうながしている(prompt)ことを表す
印である。
この状態で、キーボードからコマンド名(命
令の名前)を打ち込み、最後にリターン・キー(Enter, 以下の説明では、プロンプトが「$ 」であるものとする。
$
キーボードから「$ 」を打つ必要はない。(プロンプトの記号は、設
定で変更することもできる。)
$ exit
シェルを終了しても、端末プログラムが動いたままのことがある。
端末プログラムをもう利用しないなら、
端末プログラムも終了する。終了の方法は、プログラムによって異なる。
$ コマンド名 オプション1 オプション2 ... 引数1 引数2 ..
コマンド名に続く オプション(option)とは、コマンドの動きを少し変えるた めの文字列(文字の並び)である。オプションは、一般には付けても付けなく てもコマンドの働きとしては成り立つ。引数(ひきすう、argument,parameter) は、コマンドの種類によっては、必ず必要となるものである。ただし、オプショ ンと引数の区別は、必ずしも厳密ではなく、混同して使われることもある。 (例:必須のオプション)
コマンド名やオプションや引数は、空白で区切る。空白の有無で、まったく動 作が変る。
たとえば、次の行は、「whoという名前のコマンドを、オプションも引数も無 しで実行する」ことを意味する。
$ who
次の行は、「whoという名前のコマンドを、am と i という引数を指定して実行する」
ことを意味する。
$ who am i
https://www.xquartz.org/
) を導入すると、
Linux 含めた一般的な Unix で使える端末が使えるようになる。
X11 (や Wayland) が導入されていない場合、 起動すると、文字端末で操作できるようになる。
X11 (や Wayland)が導入されている場合には、それに対応した 様々な端末プログラムが動作する。
この Web ページで説明しているコマンドを使うには、 次のような方法がある。
ファイル(file)は、コンピュータの中で「情報を保存する」ための仕組み。 ファイルは、情報(ビット列)を(バイト単位で)保存する。
ファイルの大事な役目は、「情報に名前を付ける」という機能。
ディレクトリ(directory)は、ファイルに名前を付ける働きを持っている仕掛 けを提供するもの。フォルダ(folder)と呼ばれることもある。
ディレクトリは、ファイルの名前の一覧表として現れる。
ファイルの性質
図? 本物の木
図? ファイルとディレクトリの木
くわしくは 総合科目「ネットワーク社会を支える情報技術入門 II」/木構造(2017年11月20日)
http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/it-2017-11-20/
ルート・ディレクトリの名前は、「/
」 (スラッシュ 1 文字)。
(Windows では、\
。「\」(バックスラッシュ)、「¥」(円記号)で表示される。)
ルートディレクトリから出発する方法で表記するパス名を、 絶対パス名(absolute path name) という。
絶対パス名は、ルートディレクトリを表す「/」の後に、
たどった枝の名前を並べ、間に区切りとして「/」をはさむ。
(Windows では、\
。「\」(バックスラッシュ)、「¥」(円記号)で表示される。)
例:「/usr/bin/wc
」
usr
」という枝に進む
bin
」という枝に進む
wc
」という枝に進む
カレント・ワーキング・ディレクトリを表示するには、pwd (print working directory) コマンドを使う。
$ pwd
/USA/California
$
表示されている「/USA/California
」が絶対パス名で表示されたカレント・ワー
キング・ディレクトリの名前。
カレント・ワーキング・ディレクトリを変更するには cd
(change directory) コマ
ンドを使う。
$ cd dirname
「ディレクトリ dirname
に行く」とも言う。
図? 世界の街の木構造
$ 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
」を意味する。
..
」で参照可能。
../ディレクトリ名
」で参照可能。
cd コマンドに引数を与えないと、ホーム・ディレクトリにもどる。
多くのシェル(csh,tcsh,bash,zsh
)
やEmacsなどでは、
ホームディレクトリを「~
」で指定できる
(指定できないプログラムもある。)
「〜
」は、英語の端末(ASCII,後述)の形。
日本語(JIS,後述) では、「 ̄
」となることがある。
他人のホーム・ディレクトリは、「~ユーザ名
」で指定できるプログラムがある。
(指定できないもプログラムもある。)
「~xxx
」と「~/xxx
」のように
「~
」直後に「/
」の有無で意味が違う。
ファイルには、名前(ファイル名(file name))がついている。 ファイルを操作するには、ファイル名を指定する。
/
」 は特別な意味があり、ディレク
トリの区切りを意味する。普通のファイル名は、「/
」 以外の次のよ
うな文字を使うと安全である(問題が起きない)。
A-Z
, a-z
)
0-9
)
-
」(マイナス)、「_
」(下線)、「.
」(ドット、点)
Unixでは、ファイル名としてアルファベットの大文字と小文字の両方使え、か つ、両者は区別される。普通は小文字を使う。Makefile や README のように、 特に注目して欲しいファイルの名前に大文字を使う。
Windows や macOS では、大文字小文字の違いは保存されるが、
区別されないことがある(区別されることもある)。
abc
という名前は、
大文字小文字を変えて
Abc
でもABC
でも操作できることがある。
「ドライブ」は、フロッピ・ディスクの時代には、複数の子供の「ディレクト リ」の代わりにつかっていた。当時は、「ディレクトリ」は、ドライブに1個 しか存在しなかった。以下の例では、「コマンドプロンプト」の dir コマンド (ls コマンド相当) にドラ イブ名を与えて実行している。
A> dir
(Aドライブのファイル一覧の表示)
A> dir b:
(Bドライブのファイル一覧の表示)
cd のように、作業中のドライブを切り替えることができる。
A> や B> は、プロンプトである。
A> b:
B> a:
A>
cd
、pwd
、ls
cat
cp
ls
, ls -l
, ls -ld
, ls -a
mv
rm
mkdir
, rmdir
head
, tail
, lv
$ cat file1
This is a pen.
$
(文字端末でバイナリ・ファイルを表示しても、内容はよくわからない。
端末の状態が乱れることがあるので、画面には表示しない方がよい。
乱れたら、再設定する。)
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 (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」と「-」の違いが分かればよい。
rwx------,rwxr-xr-x,rw-------
など)。
6,4,17,... など
)
yas
)のログイン名。
prof
)
3072,1024,25
など)
4月10日17時37分
など)
Desktop
など)
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
コマンドは、引数にディレクトリ名が与えられると、ディレクトリ
の内容を表示する。
$ 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 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度と戻らない。 消す前に、本当に不要かどうかを確認すること。
コマンド名の置換え(alias)等て、rm を rm -i に変えることは、一般的には勧
められない。「rm -i y」という操作が、一連の操作として身に付い
てしまうので。
ファイル名を変更するには mv (move) コマンドを使う。
$ mv oldname newname
この結果、ファイルoldfileのファイル名をnewnameに変更される。
ここで、newname のファイルが存在した場合、元の newname は消されてしまう。
$ mkdir dirname
この結果、dirname
という名前のディレクトリが作られる。
mvコマンドは、ディレクトリの名前を変更するために使える。
$ mkdir dir1
$ ls
dir1
$ mv dir1 dir2
$ ls
dir2
$
$ mkdir ~/dir1
$ mv oldname ~/dir1/newname
この結果、カレント・ワーキング・ディレクトリにある
ファイルoldfileのファイル名は、
~/dir1/newnameに変更される。
次のように、ディレクトリだけを指定することもできる。
$ mv name ~/dir1/
この場合、次のものと同じになる。
$ mv name ~/dir1/name
また、変更先にディレクトリを指定する mv では、ファイル名は1個でなくて
も複数でもよい。
$ mv file1 file2 file3 ~/dir1
$ rmdir dirname
この結果、
ディレクトリdirnameが削除される。
空でないディレクトリは、rmdir コマンドでは 「Directory not empty」 というエラー・メッセージが表示され削除できない。 この場合は、子供のディレクトリやファイル を削除してからもう一度削除する。
head
コマンドを使う。先頭の 10 行だけ表示される。
練習問題 headコマンド参照。
tail
コマンドを使う。末尾の 10 行だけ表示される。
練習問題 tailコマンド参照。
more
。「もっと表示するか?(more?)」と聞く。Windows でも使える。
less
。逆戻りできる more。
No such file or directory
Permission denied
No space left on device
Disc quota exceeded
$ man ls
man コマンドを実行すると、自動的に
大きなテキストファイルの表示
で説明したページャが実行され、長い説明が1ページ単位で表示できる。
ページャの操作としては、「スペースキー(1ページ進む)」と「q(quit、終了)」を覚えること。
引数として調べたいコマンドの名前を与える。-k に続いてキーワードを与える ことで検索もできる。
後述する Emacs に付属の説明書 info を読むためのコマンドもある。
$ info info
$ info bash
ファイル名の補完(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 は、ファイルの種類を表示するコマンドである。
パタン | 意味 |
* | 任意の文字列(空でもよい)(.で始まるものを除く) |
? | 任意の1文字 |
[str] | strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば [0-9](数字)や[a-zA-Z](アルファベット)がよく使われる。 |
{str1,str2,...} | 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの |
~username | ユーザusernameのホーム・ディレクトリの絶対パス。 |
~/ | 自分自身のホーム・ディレクトリ |
~ | 自分自身のホーム・ディレクトリ |
よく使われる形式
*
」と「*.*
」は違う。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
$
大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。
ファイルとディレクトリの木構造の問題を緩和するために、 シンボリック・リンクという機能がある。
コンピュータとは直接関係ない文字集合もある。
英語のアルファベット(大文字、小文字)や数字や記号などの文字を符号化す るために、現在もっともよく使われている対応表は、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-JP | JIS 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=
$
もし、端末プログラムが期待している文字コードと、動作するアプリケーショ
ンが出力する文字コードが異なると、文字化けを起こす。その時は、同じにな
るように修正する。
図? sshによる遠隔ログインと端末
ssh で遠隔ログインする時、端末でよく利用されるコマンドは、次の2つである。
ssh コマンドは、端末で動作するコマンドである。 ssh コマンドを使うには、まず、自分の PC で端末プログラムを実行する。
$ ssh ユーザ名@ホスト名
たとえば、Coins の viola12 にユーザ名 s2001234 でログインするには、次のように打つ。
$ ssh s2001234@viola12.coins.tsukuba.ac.jp
しかし、以下で説明するように、そう簡単にはつながらない。次のような関門
を突破しなければならない。
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攻撃 と見なして、接続できない。
図? SSH サーバへの接続、パスワードによる認証(学内、VPN)、公開鍵による認証の範囲(学内、学外)
$ exit
$ exit
普通、端末のウィンドウが閉じる。
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
だけで良い。
メモ帳とか、単純なテキスト・エディタ、ワードプロセッサでは、 プログラムを開発することはできない。 プログラム開発には、それに適したテキストエディタを使う。
情報科学類標準のテキスト・エディタは、Emacs である。 他のエディタが好きな人でも、若い人は、いろいろ使ってみることを推奨する。
GNU Emacs (ぐにゅー いーまっくす)。 Free Software Foundation開発。 Richard Stallman 原作。
いくつかの種類がある。
Meta キーがない時には、Esc キーを使う。 例えば、M-x と打ちたい時には、 例えば、まず、Escキーを打ち(離し)、その後、x キーを打つ。 (キーを2回に分けて打つ。) ただし、説明の表記は、M- のままなので注意する。
$ emacs file.txt
「file.txt」は、編集したいファイル名。他のファイルを編集したい時には変
更する。ファイルが存在しなければ、新しく作成する。ファイルが存在すれば、
そのファイルの内容を変更する。
Save file ファイル名? (y, n, !, ., q, C-r, d or C-h)
こういう時には、次のどれかをすると良い。
Modified buffers exist; exit anyway? (yes or no)
これに対しては、「yes」と 3 文字打ち、さらに、リターンキーを打
つ。
Modified buffers exist; exit anyway? (yes or no) yes
カーソル移動には、矢印キー(←、→、↑、↓)も使えるが、 手がホームポジションから離れてしまうのでよくない。 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) は、直前のコマンドを再実行する時に便利なので、必ず覚える。
カーソルの左側を削除する方法とカーソルの右側(カーソルのある場所)を 削除する方法がある。
C-d delete-char カーソルがある文字(右)を削除 DEL delete-backward-char カーソルの左の文字を削除 C-k kill-line カーソルがある文字(右)から行末まで削除 空行なら1行削除
C-SPC
(Control + Space キー)または C-@
で設定する。
うまくいくと、ミニバッファに Mark set と表示される。
カーソルを動かしても移動しない。
次に新しいマークをセットするまで有効。
C-w
)
M-w
または Esc w)
indent-region
)
C-y
を
使う。
テキストの移動(カット&ペースト)の方法
C-SPC
、または、C-@
でマーク
C-w
でカット
C-y
でペースト
C-SPC
、または、C-@
でマーク
M-w
、または、Esc w
でコピー
C-y
でペースト
C-SPC
、または、C-@
でマーク
C-w
でカット
Emacs には、1 つのファイルを複数の Emacs で編集しないようにするために、ロックの機能がある。 複数の Emacs で編集しようとしていることを検出すると、Emacs は次のような警告を発する。
ファイル名 locked by ユーザ名@コンピュータ名 (pid 番号): (s, q, p, ?)?
普通は、q
と答えて、編集しない。
s
では、ロックを (steal) して編集、
p
では、ロックはそのままで編集できるが、良い方法ではない。
実行と逆順に終了するのが良い。例えば、iTerm、シェル、emacs の順に実行した ら、emacs、シェル、iTerm の順に終了する。
macOS では、しばしばウィンドウを閉じてもアプリケーションが実行し続けていることがある。 macOS で iTerm や「ターミナル.app」を終了させるには、 画面の一番上にある「iTerm」や「ターミナル」メニューから「Quit iTerm2」 や 「ターミナルを終了」を選ぶ。
Emacs で C-x C-f 等でファイル名を打つ時、補完機能を使うと便利である。 練習問題 emacs、タブキーによる補完機能
Emacs のマニュアルは、Emacs の中で info という機能を実行して表示できる。
M-x info
info は全体として木構造になっている。
Emacs には、 タブ・キーによる補完機能がある。 手引き 3.3.2 ファイル操作 参照
類似の機能が bash にもある。 ファイル名やディレクトリ名を打つ時に便利である。
$ cd ~/L![]()
$ cd ~/Library/行頭では、コマンド名を補完してくれる。 zsh でもだいたい同じ。![]()
手引き 2.13 tabキーによる補完 参照。 練習問題 bash補完機能(1) 参照。 練習問題 bash補完機能(コマンド名)参照。
実習室の iMac で macOS が動いている時 Dock から iTerm のアイコンをシングルクリックで実行しなさい。 ウインドウの中で シェルが実行される ことを確認しなさい。 シェルのプロンプトがどうなっているか確かめなさい。
exit コマンドを使って、ウインドウの内部のシェルを終了しなさい。
$ exit
左上の「iTerm」 のメニューをクリックしなさい。メニューの一番したの 「Quit iTerm (iTermを終了)」をクリックする。
iTerm の設定を変更して、使いやすいようにしなさい。 標準で次のようになるように設定することを奨める。
(クリックで拡大)
iTerm、環境設定、プロファイル、Default、Text
LANG="ja_JP.UTF-8"
と表示されることを確認する。
$ locale
LANG="ja_JP.UTF-8"
...
$
横幅は、普通、80 だが、必要に応じて広くする。「デフォルトを更新」を選ば なければ、そのウィンドウだけが変更され、設定は残らない。
なお、日本語を表示させるには、"ja_JP.UTF-8"の他に、EUC も使える。EUC に は、日本語以外(韓国語、中国語、その他)もある。
$ 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
$
最後に、exit
コマンドを実行し、シェルを終了し、
ウィンドウを閉じなさい。
$ ls
$ ls -l
$ cd ~
$ ls
$ ls -a
$ ls -l
$ ls -la
$ ls -d
$ ls -dl
$ ls -adl
$ cd ディレクトリ名
$ pwd
$ ls
$ ls -l
(1) 引数無しで cd コマンドを実行
$ cd /
$ pwd
$ ls
$ cd
$ pwd
$ ls
(2) cd コマンドに、「~
」を与える。
$ cd /
$ pwd
$ ls
$ cd ~
$ pwd
$ ls
(3) cd コマンドに、「~ログイン名
」を与える。
$ cd /
$ pwd
$ ls
$ cd ~ログイン名
$ pwd
$ ls
$ ls -l
ディレクトリの場合、左端が「d
」になっている。
(
ファイルの属性
参照
)
cd コマンドを使って、カレント・ワーキング・ディレクトリを
ホーム・ディレクトリの下のディレクトリに変更しなさ
い。以下は、Music
に変更した例である。
$ cd
$ pwd
$ ls
$ cd Music
$ pwd
$ ls
Music
も含めて次のようなディレクトリについても、類似の操作を行い
なさい。
$ mkdir ~/dir1
$ ls ~/dir1
(最初は空)
$ cd ~/dir1
$ ls
(最初は空)
$ emacs file1.txt
$ ls
file1.txt
$ ls
(削除するファイルの確認)
$ rm file1.txt
(削除。成功すると何も表示されない。)
$ rm file1.txt~
(もし、「~」付きのファイルがあれば、削除。成功すると何も表示されない。)
$ ls
(ディレクトリが空であることの確認)
$ cd ..
(1個上のディレクトリに移動。)
$ ls ~/dir1
(ディレクトリが空であることの確認)
$ ls -d ~/dir1
(ディレクトリが存在すること確認)
$ rmdir ~/dir1
(ディレクトリの削除。成功すると何も表示されない。)
$ ls -d ~/dir1
(エラーが表示されることにより、ディレクトリが削除されたことを確認)
$
ls コマンドは、「.」から始まるファイル名を表示しない。ls コマンドに -a オプションを付けると、表示する。
ディレクトリを削除しようとした時に、ls コマンドで表示されないが、「.」 で始まるファイルがあるために、削除できないことがある。このことを確認し なさい。 たとえば、 .DS_Storeや 「._」から始まるファイル名 のファイルが存在することがある。
$ mkdir ~/from_dir
$ mkdir ~/to_dir
$ cd ~/from_dir
$ echo 1 > file1.txt
$ echo 2 > file2.txt
$ echo 3 > file3.txt
$ ls *.txt
$ ls *.txt
(移動するファイルの確認)
$ ls ~/to_dir
(移動する先のディレクトリの確認)
$ mv *.txt ~/to_dir
(移動。成功すると何も表示されない。)
$ ls ~/to_dir
(移動した先のディレクトリの確認)
$ mkdir ~/dir1
$ cd ~/from_dir
$ echo 1 > file1.txt
$ ls
(ファイル名の確認)
$ mv file1.txt file2.txt
(改名。成功すると何も表示されない。)
$ ls
(ファイル名の確認)
$ 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 /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
$
このコマンドの動きを確認しなさい。次のファイルを指定してみなさい。
$ head /usr/share/dict/words
-n
(nは数)オプションの動きを調べなさい。ファイル
が短い時、10行、または、それ以下の行数しかない時には、head コマンドが何
行表示するかを調べなさい。
$ 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
$ 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) |
= | ファイル名、位置(行数)、文字コードを表示する |
$ cat ファイル名
<表示省略。文字化け>
$
このファイルを lv コマンドで表示すると、きちんと表示される。
$ lv ファイル名
<表示省略。正しく表示>
<終了するにはqキーを押す>
:q
$
$ man ascii
<表示>
<終了するにはqキーを押す>
:q
$
$ ls *.txt
$ ls *txt
$ ls *.text
$ ls *text
$ ls *.txt *text
$ ls *.t*xt
$ 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
$ 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
$
$ open /Applications/Calculator.app
これを、ファイル名置換機能(*,?)を利用して、長い文字列をキーボードから打
たないで実行しなさい。
$ echo /App*/Calc*
(1つしか表示されない確認する。複数あると問題がある。)
$ ls -d /App*/Calc*
(1つしか表示されない確認する。複数あると問題がある。)
$ open /App*/Calc*
同様に、/Applications にある、他のアプリケーション・プログラムを実行し
てみなさい。
$ ls /Applications
$ echo 「*」を含むファイル名
$ ls -d 「*」を含むファイル名
$ open 「*」を含むファイル名
$ 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
$
tree コマンドに -N オプションをつけると、ファイル名に漢字を含むものも表 示できる。
$ tree -N ディレクトリ名
注意: 表示が止まらなくなった時、強制終了したい時には、
Control キー + c キー
も使える。
lv による表示。後ろに「| lv」をつける。
終了するには、q
キーを打つ。
$ tree -N ディレクトリ名 | lv
<表示省略>
<空白キーで次のページを表示>
:q
$
iTerm にペーストする時に「?」が表示されるならば、次のように すれば (UTF-8ではなく) ASCII 文字を使うようになる。
$ LANG=C tree -N ディレクトリ名
tree コマンドの次のオプションの意味を ls と比較しなさい。
$ open ~/from_dir
$ open ~/to_dir
option キーを押しながらドラッグすると、移動ではなく、コピーになる。 このことを確認しなさい。
なお、コピーを行った後、元のファイルを消せば実質的に移動(改名)になる。
名称未設定フォルダ
」という名前のフォルダが作成される。
$ open ~/.Trash/
$ cd ~/.Trash/
$ ls
$ ls -l
$ du .
$ du -s .
$ echo $LANG
$ date
$ locale
$ LANG=ja_JP.eucJP
$ locale
$ date
$
変更した文字コードを元に戻しなさい。
$ open /Applications/Calculator.app
これを、bash補完機能を利用して、長い文字列をキーボードから打
たないで実行しなさい。
$ open /A
/Calc
同様に、/Applications にある、他のアプリケーション・プログラムを実行し
てみなさい。
$ ls /Applications
$ 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) |
= | ファイル名、位置(行数)、文字コードを表示する |
$ man -k emacs
$ apropos emacs
$ info info
$ info bash
$ info emacs
$ 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 等の端末で、上のコマンドを実行してどうなるか調べなさい。
$ date
$ cal
$ date
$ cal
nkf は、cat コマンドで表示すると文字化けするようなファイルを、端末で表 示する時に使う事ができる。このことを確認しなさい。
$ cat ファイル名
$ nkf -w ファイル名
nkf では、-w
を含めて次のようなオプションがよく使われる。
--guess
オプションを付けると、文字コードを変換するのでは
く、文字コードの推定を行い、推定結果を表示する。このことを確認しなさい。
$ nkf --guess ファイル名
$
=
」
キー使うと、判定結果を表示することができる。
$ lv ファイル名
<表示省略>
:=
ファイル名 1/124 [EUC-JP|UTF-8|UTF-8|UTF-8]:
この例では、ファイル「ファイル名
」の文字コードが「EUC-JP」
と判定していることがわかる。「UTF-8」は、端末の文字コードである。
lv のこの機能を利用してみなさい。
$ emacs file1.txt
「$」は、プロンプトなので打ち込まなくてもよい。
この例では、file1.txt という名前のファイルを作成している。他の名前でも
良い。ただし、ファイル名としては、
講義で述べた安全なもの
を用いなさい。
$
$ ls
<表示省略>
$ ls -l
<表示省略>
$
$ cat file1.txt
<表示省略>
$
$ emacs
Find file: ~/
Find file: ~/
」に対して、
存在しないファイルの名前を指定し、最後にリターンキーを押すと、新規作成
になる。次の例では、file2.txt
というファイルを作成している。
Find file: ~/file2.txt
ファイル名としては、講義で述べた安全なものを用いなさい。
$ emacs file1.txt
ここでは、作成した時と同じファイル名を指定する。
$ ls
<表示省略>
$ ls -l
<表示省略>
$ cat file1.txt
<表示省略>
$
$ emacs file1.txt
$ cat file1.txt
$ ls
<表示省略>
$ ls file1.txt
<表示省略>
$ ls -l
<表示省略>
$ ls -l file1.txt
<表示省略>
キー | 説明 |
---|---|
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 | 何か困った時には、何度か打つ。 |
M-x help ![[←]](../icons/screen-return.gif)
(M-x は、Esc x でもよい。)
C-u M-x help ![[←]](../icons/screen-return.gif)
t 言語 ![[←]](../icons/screen-return.gif)
言語
としては、次のようなものの中から選択できる。
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
フォントの問題でうまくいかないかもしれない。
C-SPC または C-@ | 領域(region)の先頭を決める(マーク) |
C-w | リージョン(領域)をカット |
ESC w | リージョン(領域)をコピー |
C-y | リージョン(領域)をペースト |
$ cp /etc/passwd emacs-cut.txt
$ emacs emacs-cut.txt
C-SPC
、または、C-@
キーを打ち、マークを設定する。
C-w
キーでカットする。
C-x C-s C-x C-c
で終了する。
M-x help ![[←]](../icons/screen-return.gif)
(M-x は、Esc x でもよい。)
C-u M-x help ![[←]](../icons/screen-return.gif)
t 言語 ![[←]](../icons/screen-return.gif)
言語
としては、次のようなものの中から選択できる。
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
フォントの問題でうまくいかないかもしれない。
C-u M-x help ![[←]](../icons/screen-return.gif)
t
English ![[←]](../icons/screen-return.gif)
Emacs の補完機能(タブキー)を確認しなさい。
C-x C-f
でファイルを開く
/etc/passwd
をタブキーにより開く例である。
$ emacs ![[←]](../icons/screen-return.gif)
C-x C-f
Find file: ~/![[]](../icons/screen-cursor.gif)
~/
」の2文字を消す。Delete キーを 2 回打つ。
Find file: ![[]](../icons/screen-cursor.gif)
/e
」と打ちタブを打つ
Find file: /e![[tab]](../icons/screen-tab.gif)
すると、tc/
が補完される。
Find file: /etc/![[]](../icons/screen-cursor.gif)
pa
」と打ちタブを打つ
Find file: /etc/pa![[tab]](../icons/screen-tab.gif)
すると、いくつか候補が表示される。
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
s
」と打ちタブを打つ
Find file: /etc/pas![[tab]](../icons/screen-tab.gif)
すると、「wd
」が補完される。
Find file: /etc/passwd![[]](../icons/screen-cursor.gif)
Find file: /etc/passwd![[←]](../icons/screen-return.gif)
$ emacs file1.txt
C-x u
と打ち、undo の効果を確認する。
C-x u
は、Control + x を打ち、Control キーを離してから
u と打つ。C-x C-u
ではない。
C-x u
と打つ。
C-x u
と打つ。
C-x u
と打つ。
C-x u
を、何度か打ってみる。
C-d
C-k
C-SPC
と C-w
C-x u
を、何度か打ってみる。
$ emacs file1.txt
C-x u
と打ち、undo の効果を確認する。
C-x u
は、Control + x を打ち、Control キーを離してから
u と打つ。C-x C-u
ではない。
C-x u
と打つ。
C-x u
と打つ。
C-x u
と打つ。
C-x u
を、何度か打ってみる。
C-d
C-k
C-SPC
と C-w
C-x u
を、何度か打ってみる。
$ ls /ここまで打ったら、行末で![]()
^I
(Control+I))を1度押してみる。
$ ls /1度目は何も表示が変わらない。bash や端末の設定によっては、ベルが鳴る。 行末で![]()
$ ls /すると、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」
とうち、$ ls /uすると、![]()
sr/
が補完される。
$ ls /usr/「![]()
$ ls /usr/すると、/usr の内容が表示される。![]()
$ ls /usr/ X11/ bin/ lib/ local/ sbin/ standalone/ X11R6/ include/ libexec/ local3/ share/ $ ls /usr/「![]()
b
$ ls /usr/b次のように「![]()
in/
」が補完される。
$ ls /usr/bin/「![]()
/usr/bin/
」に対して、「$ ls /usr/bin/候補が多すぎるので、ここでは表示はしないでDisplay all 976 possibilities? (y or n)
![]()
n
を打つ。
Display all 976 possibilities? (y or n)n
em
と入れて $ ls /usr/bin/emすると、次のように「![]()
acs
」が補完される。
$ ls /usr/bin/emacsこれで目的のファイルを打ち込むことができた。![]()
同様に、次のファイル名を bash の補完機能で打ってみなさい。
M-x info
次のキー操作を確かめなさい。
キー | 説明 |
---|---|
スペース | 次のページへ |
n | 次の節へ移動 |
p | 前の節へ移動 |
タブ | 次のリンクへ移動 |
リターン | カーソルのある位置の子供の節へ移動 |
m | 「*」のある所にカーソルを移動し、名前を指定して、子供の節へ移動 |
q | info を終了 |
coins でも、VPN 機能を提供している。 この機能を利用しなさい。
この講義のトップページにある「出席」ボタンを押してみなさい。 授業時間ではなくても、このボタンを押しても良い。授業を履修していない人 でも、このボタンを押しても良い。 そして、VPN を使っていない時と使っている時で 「出席」ボタンが表示する IP アドレスが変化することを確認しなさい。 VPN が有効なら、「130.158.」から始まる IP アドレスが表示されることが期待される。
もし変化しない時、ssh の接続で、パスワードによる認証が使えないかもしれない。 その時は、 情報科学類コンピューティング環境/VPN接続にある macOS での注意事項(「すべてのトラフィックをVPN経由で送信」にチェック) を試すこと。 macOS 以外 OS でも、ssh による遠隔ログインを VPN 経由で行うように ように設定する必用がある。 「出席」ボタンでは、IPv6 で繋がった人でも、ssh では -4 オプションを与えて IPv4 で繋ぐと パスワードによる認証が使えることがある。
次に、次のどれかの端末プログラムを実行しなさい。
$ ssh ユーザ名@hostname
Password: (パスワードを打つ。画面には表示されない。)
hostname$
hostname
は、接続したいコンピュータの名前を入れる。
次のページを参考にしなさい。
一番最初に接続する時には、次のような警告(Warning:)が表示される。
$ ssh ユーザ名@ホスト名この fingerprint は、接続先のホストの公開鍵のハッシュ値である。 SSHにおけるホストの公開鍵のハッシュ値の確認 を参考にして、正しいものであれば、yes と打ち込みなさい。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: (パスワードを打つ。画面には表示されない。)
ホスト名:~ ユーザ名$
![]()
遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。
ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。
(sshを実行する前、端末プログラムを実行した直後。)
$ hostname
(手元のコンピュータのホスト名が表示される。)
$ ssh ユーザ名@hostname
$ hostname
(遠隔ログイン先のコンピュータのホスト名が表示される。)
$ exit
$ hostname
(手元のコンピュータのホスト名が表示される。)
$
coins では、学外からの SSH での接続で、 ユーザの認証 の仕組みとしては、公開鍵を用いる方法だけが許されている。 パスワードによる認証が使えない。
外部から、SSH で接続するには、公開鍵を使う必要がある。coins のコンピュー タで、以下の手順で公開鍵と秘密鍵の組を作成したら、秘密鍵を ssh のクライ アントにコピーして利用する。
ssh で、 公開鍵暗号を使った利用者認証 を利用しなさい。
まず、ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。
Enter file in which to save the key (ファイル名)
に対して、「ファイル名」を確認し、Enter (Enter passphrase
に対して、パスフレーズ(パス「ワード」より長い秘密の文字列)を打つ。
empty (空)には絶対にしないこと。
確認のために 2 度打つ。
$ 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
つのファイルが作られる。
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 コマンドを使ってパスワードでログインしてコピーする方法がある。
Windows で WinSCP プログラム実行し、SSH の機能を通じてファイルをコピーしてみなさい。
C:
ドライブになる。
Windowsで使える端末/Windows コマンドプロンプト (cmd) にあるコマンドを実行してみなさい。
コマンドは大文字で打っても小文字で打っても同じように動作することを確認 しなさい。more コマンドは、lv と同じような ページャ であり、スペース・キーで 1 ページ進み、q で終了する。
$ ssh ユーザ名@ホスト名.coins.tsukuba.ac.jp
ssh コマンドの使い方 参照。
www.coins.tsukuba.ac.jp
」と打ち込む。「サービス」としては、
SSH、「TCPポート#」としては、22を選択する。最後に「OK」ボタンを押す。
www.coins.tsukuba.ac.jp
」
と打ち込む。
その他に遠隔ログインするコンピュータとしては、
練習問題(2091)
を参考にしなさい。
login as:
に対してログイン名を打つ。
Password:
に対してパスワードを打つ。
パスワードは画面には表示されない。
次のコマンドを実行して、遠隔ログインを行っていない時(ローカルでの実行 結果)と比較しなさい。
H:\> echo hello > file.txt
H:\> echo hi >> file.txt
H:\> copy con file.txt
漢字
^Z
1個のファイルをコピーしました。
H:\>
^Z
は、Control+Z。Unix の ^D
相当。
キーボードからファイルの終わりを示す。
レポートには、指定されていなければ、端末の全ての表示を含めなさい。全て の表示とは、シェルのプロンプト、自分が打ち込んだコマンド、コマンドの実 行結果である。端末が持つコピー機能でコピーし、テキストエディタ(のウィン ドウ)にペーストするなどして、テキストをコピーして、レポートに含めること。 レポートとして、画像を提出してはならない。
「[高度]」と印が付いているものは、やらなくても良い。
(1) 自分の PC、または、実習室の iMac、または、実習室の PC で端末プログ ラムを実行しなさい。レポートには、OSの名前、端末プログラムの名前を記載 しなさい。
(2) ssh コマンド、または、ssh による遠隔ログイン専用のアプリケーション を用いて、次のホストに遠隔ログインしなさい。
date hostname who am iレポートには、A, B のそれぞれについて次の情報を含めなさい。
(3) 小問(2)のA、または、Bに遠隔ログインした後で、次のコマンドを実行しな さい(この課題では、両方実行する必用はない。どちらかを選んで実行しなさ い)。レポートには、小問(2)と同様に、端末の表示(シェルのプロンプト、コマ ンド、コマンドの出力)を含めなさい。
(4) 「cd コマンド」、および、シェルのファイル名置換機能を使って /usr/bin にある次のようなファイルをすべて表示しなさい。結果は、ls コマ ンドで表示ししなさい。この課題では、ls コマンドには、必ず相対 パス名を 指定しなさい。
(5) 小問(2)のA、または、Bに遠隔ログインした後で、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 (ここで行ったキー操作をレポートに書く)
(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種類以上、あげなさい。