筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2023/2023-05-10
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2023/
http://www.coins.tsukuba.ac.jp/~yas/
ls, ls -l, ls -a, ls -d, cd, pwd, cat, cp, mv, rm, mkdir, rmdir, man, info, lv, cal, date, look, echo, expr, ln -s, nkf, cc, gcc, gdb, javac, java, python3, ruby, ...
なぜ「端末」を使うべきか。
図? メインフレームと端末
図? 端末とアプリケーション(メインフレーム)
図? 端末プログラムとアプリケーション(ローカル)
図? sshによる遠隔ログインと端末
プログラムの実行の方法
cmd /c assoc
, cmd /c ftype
シェルとは、オペレーティング・システムの構成要素の1つである。シェルは、 オペレーティング・システムの中心部分を貝殻のように包みむプログラムであ る。シェルは、人間とコンピュータが対話(interaction)をする時に重要な 機能を果たす。
図? シェルの位置づけ
Unix (Linuxを含む) では、sh, csh, bash, tcsh, zsh などさまざまな種類の シェルを使うことができるようになっている。X ウインドウを使っている状態 (マウスが使える状態)では、ウインドウ・マネジャと呼ばれるプログラムも、 シェルとしての働きがある。
macOS では、Finder という名前のプログラムがシェルに相当する。
Windows では、Explorer という名前のプログラムがシェルに相当する。
coins の標準のシェルは、bash である。 bash が動いている時には、コンピュータの画面には、次のような表示がなされ る(コンピュータ、ユーザによって異なる)。
s2171234@azalea15:~$
このような記号は、プロンプト(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 で使える端末(xterm, mlterm等)が使えるようになる。
X11 (や Wayland) が導入されていない場合、 起動すると、文字端末で操作できるようになる。
X11 (や Wayland)が導入されている場合には、それに対応した 様々な端末プログラムが動作する。
この Web ページで説明しているコマンドを使うには、 次のような方法がある。
図? sshによる遠隔ログインと端末
ssh で遠隔ログインする時、端末でよく利用されるコマンドは、次の2つである。
ssh コマンドは、端末で動作するコマンドである。 ssh コマンドを使うには、まず、自分の PC で端末プログラムを実行する。
$ ssh ユーザ名@ホスト名
たとえば、Coins の azalea12 にユーザ名 s2171234 でログインするには、次のように打つ。
$ ssh s2171234@azalea12.coins.tsukuba.ac.jp
しかし、以下で説明するように、そう簡単にはつながらない。次のような関門
を突破しなければならない。
ssh (scp, WinSCP, PuTTY, Tera Term含む) で始めてあるホストに接続する時 には、次のように警告が現れる。
$ ssh ユーザ名@ホスト名The authenticity of host 'ホスト名 (IPアドレス)' can't be established. ED25519 key fingerprint is SHA256:64進数43桁. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'ホスト名' (ED25519) to the list of known hosts. ユーザ名@ホスト名's password: (パスワードを打つ。画面には表示されない。)
ホスト名:~ ユーザ名$
![]()
この 64進数(base64)43桁 256 ビット (または16進数32桁 128ビット) の数は、接続先のホストの公開鍵を、ハッシュ関数 SHA256 (またはMD5) にかけた結果である。この43桁(または32桁)の数を目で確認することに より、 接続先のホストが正しい( man-in-the-middle攻撃 が行われていない)ことがわかる。
ホストの公開鍵は、普通、3072 ビット以上のこともあり、これを人の目で比較するの はつらい。そこで、ハッシュ関数により、ビット数を減らして、人の目で確認 できるようにしている。SSHのプログラムは、公開鍵全体を保存しているが、人 間に表示する時には、ハッシュ値で表示している。
Are you sure ...? に対して yes と打つと、そのホストの公開鍵が保存される。 次に接続する時には、聞かれなくなる。 もし、ホストの公開鍵が変った時には man-in-the-middle攻撃 と見なして、接続できない。
図? sshおける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
だけで良い。
図? 直接デスクトップPCを使う
図? リモートデスクトップで、遠隔のPCを使う
https://www.coins.tsukuba.ac.jp/ce/,情報科学類コンピューティング環境
、
内部情報、その他サービス、リモートデスクトップサービス。
https://www.open.coins.tsukuba.ac.jp/coins-status/
を見ると、落ちているコンピュータ、動作している OS が分かる。
プログラミングの授業ではあまり使わないが、リモートデスクトップで情報科学類の Windows を 使うこともできる。
リモートデスクトップでも、 man-in-the-middle攻撃 を防ぐために、接続先を確認しなければならない。 Coins では、「証明書」を使って接続先が本物かを確認できるように設定している。
リモートデスクトップサービス 参照。
リモートデスクトップで接続したら、端末を開く。
図? リモートデスクトップで端末を開く
$ exit
図? リモートデスクトップ、ログアウト
ファイル(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 コマンド相当) にドラ イブ名を与えて実行している。
C> dir
(Cドライブのファイル一覧の表示)
C> dir h:
(Hドライブのファイル一覧の表示)
cd のように、作業中のドライブを切り替えることができる。
A> や B> は、プロンプトである。
C> h:
H> C:
C>
cd
、pwd
、ls
cat
cp
ls
, ls -l
, ls -ld
, ls -a
mv
rm
mkdir
, rmdir
head
, tail
, lv
ls コマンドを実行すると、存在するファイルの一覧を表示する。
$ ls
Desktop Documents Downloads Library Maildir dir1 file1 file2
$
$ cat file1
This is a pen.
$
(文字端末でバイナリ・ファイルを表示しても、内容はよくわからない。
端末の状態が乱れることがあるので、画面には表示しない方がよい。
乱れたら、再設定する。)
指定したファイルの内容と全く同じ内容を持つファイルを作ること
ファイルのコピーの目的
ファイルをコピーするには cp (copy) コマンドを使う。
$ ls
Desktop Documents Downloads Library Maildir dir1 file1 file2
$ cat file1
This is a pen.
$ cp file1 file3
$ ls
Desktop Documents Downloads Library Maildir dir1 file1 file2 file3
$ cat file3
This is a pen.
$
この例では、ファイル file1 が ファイル file3にコピーされる。コピー先の
ファイルfile3が存在しない時は新しくファイルfile3が作られる。
$ ls
Desktop Documents Downloads Library Maildir dir1 file1 file2 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 Documents Downloads Library Maildir dir1 file1 file2 file3
$ ls -l
合計 6
drwx------ 2 yas prof 2 4月 25 18:14 Desktop
drwx------ 2 yas prof 2 4月 25 18:14 Documents
drwx------ 2 yas prof 2 4月 25 18:14 Downloads
drwx------ 2 yas prof 2 4月 25 18:14 Library
drwx------ 5 yas prof 5 4月 25 18:43 Maildir
drwxr-xr-x 2 yas prof 2 4月 25 18:28 dir1
-rw-r--r-- 1 yas prof 15 4月 25 14:11 file1
-rw-r--r-- 1 yas prof 27 4月 25 14:12 file2
-rw-r--r-- 1 yas prof 27 4月 25 21:28 file3
$
行単位に次のようなファイルやディレクトリの属性が表示さる。
詳しくは後述する。今日は先頭の「d」と「-」の違いが分かればよい。
rwx------,rwxr-xr-x,rw-r--r-
など)。
2,5,1 など
)
yas
)のログイン名。
prof
)
2,15,27
など)
4月 25 18:14
など)
Desktop
など)
ls
コマンドは、標準では、カレント・ワーキング・ディレクトリを意
味する「.
」や親ディレクトリを意味する「..
」を含めて、
「.
」から始まるファイル名を表示しない。-a
オプションを付
けると、「.
」から始まるファイル名も表示する。ホーム・ディレクト
リには、「.
」で始まるファイルがいくつか存在する。
$ ls
Desktop Documents Downloads Library Maildir dir1 file1 file2 file3
$ ls -a
. .bash_logout .bashrc .ssh Documents Library dir1 file2
.. .bash_profile .emacs Desktop Downloads Maildir file1 file3
$
ls
コマンドは、引数にディレクトリ名が与えられると、ディレクトリ
の内容を表示する。
$ ls -l Maildir
合計 2
drwx------ 2 yas prof 2 4月 25 18:43 cur
drwx------ 2 yas prof 2 4月 25 18:43 new
drwx------ 2 yas prof 2 4月 25 18:43 tmp
$
ディレクトリそのものを表示したい時(特に「-l
」と組み合わせて日付
等の属性を表示したい時)は、「-d
」オプションを付ける。
$ ls -dl Maildir
drwx------ 5 yas prof 5 4月 25 18:43 Maildir
$
$ cp file1 file2 dir
この場合、dir 以下に、(一番葉の部分だけ)同じ名前のファイルが作られる。
次の操作と概ね同じ動作をする。
$ cp file1 dir/file1
$ cp file2 dir/file2
ディレクトリを指定する時には、カレント・ワーキング・ディレクトリ 「.」 や ホーム・ディレクトリ「〜」も使える。
$ cp /etc/shells .
$ cp /etc/shells ~
$ cp ~syspro/public_html/2023/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
にある man
で始まるファイルをすべて
ls
コマンドに引き渡したい。1つひとつ打つと疲れる。
$ ls -l /usr/bin/man /usr/bin/man-recode /usr/bin/mandb /usr/bin/manpath
-rwxr-xr-x 1 root root 120504 3月 18 2022 /usr/bin/man
-rwxr-xr-x 1 root root 36536 3月 18 2022 /usr/bin/man-recode
-rwxr-xr-x 1 root root 143296 3月 18 2022 /usr/bin/mandb
-rwxr-xr-x 1 root root 31520 3月 18 2022 /usr/bin/manpath
$
次のように、「*
」を使うと楽に打てる。
$ ls -l /usr/bin/man*
-rwxr-xr-x 1 root root 120504 3月 18 2022 /usr/bin/man
-rwxr-xr-x 1 root root 36536 3月 18 2022 /usr/bin/man-recode
-rwxr-xr-x 1 root root 143296 3月 18 2022 /usr/bin/mandb
-rwxr-xr-x 1 root root 31520 3月 18 2022 /usr/bin/manpath
$
この例では、シェルが「/usr/bin/man*
」を5つのファイル名に置き換え
ている。ls
が行っているのではない。ls
以外のどんなプログラ
ムでも有効である。
$ echo /usr/bin/man*
/usr/bin/man /usr/bin/man-recode /usr/bin/mandb /usr/bin/manpath
$ file /usr/bin/man*
/usr/bin/man: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dy
namically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=90c8aee
842b268b2b6e51a1cc90d620a04473925, for GNU/Linux 3.2.0, stripped
/usr/bin/man-recode: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dy
namically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7da8fab
1228842998eb8ac97d3f1a86943b6185c, for GNU/Linux 3.2.0, stripped
/usr/bin/mandb: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dy
namically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=4f630be
6888ab17b33fe49f7ed5b752fb90331a7, for GNU/Linux 3.2.0, stripped
/usr/bin/manpath: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dy
namically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=220dbdc
a31a8406ecd3b310515dfd3da170f051d, for GNU/Linux 3.2.0, stripped
$
echo は、引数をそのまま表示するコマンド、
file は、ファイルの種類を表示するコマンドである。
パタン | 意味 |
* | 任意の文字列(空でもよい)(.で始まるものを除く) |
? | 任意の1文字 |
[str] | strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば [0-9](数字)や[a-zA-Z](アルファベット)がよく使われる。 |
{str1,str2,...} | 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの |
~username | ユーザusernameのホーム・ディレクトリの絶対パス。 |
~/ | 自分自身のホーム・ディレクトリ |
~ | 自分自身のホーム・ディレクトリ |
よく使われる形式
*
」と「*.*
」は違う。Windowsで「*.*
」と書く
所、Unixでは、「*
」で十分なことが多い。
Emacs には、 タブ・キーによる補完機能がある。 手引き 3.3.2 ファイル操作 参照
類似の機能が bash にもある。 ファイル名やディレクトリ名を打つ時に便利である。
$ cd L![]()
$ cd Library/複数ある時には、Tab キー![]()
$ ls -ld D*(これはファイル名の置き換え。補完ではない。) drwx------ 2 yas prof 2 4月 25 18:14 Desktop drwx------ 2 yas prof 2 4月 25 18:14 Documents drwx------ 2 yas prof 2 4月 25 18:14 Downloads $
$ ls -ld D(複数マッチする時には、1回目のタブでは何も出ない。)
$ ls -ld DDesktop/ Documents/ Downloads/ (2回目は候補を表示する。) $ ls -ld
![]()
$ ls -ld De(「e」と打ち、タブを打つ。)
$ ls -ld Desktop/行頭では、コマンド名を補完してくれる。 zsh でもだいたい同じ。(残りが補完される。)
手引き 2.13 Tabキーによる補完 参照。 練習問題 bash補完機能(1) 参照。 練習問題 bash補完機能(コマンド名)参照。
大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。
ファイルとディレクトリの木構造の問題を緩和するために、 シンボリック・リンクという機能がある。
コンピュータとは直接関係ない文字集合もある。
英語のアルファベット(大文字、小文字)や数字や記号などの文字を符号化す るために、現在もっともよく使われている対応表は、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=
$
もし、端末プログラムが期待している文字コードと、動作するアプリケーショ
ンが出力する文字コードが異なると、文字化けを起こす。その時は、同じにな
るように修正する。
メモ帳とか、単純なテキスト・エディタ、ワードプロセッサでは、 プログラムを開発することはできない。 プログラム開発には、それに適したテキストエディタを使う。
情報科学類標準のテキスト・エディタは、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
では、ロックはそのままで編集できるが、良い方法ではない。
実行と逆順に終了するのが良い。例えば、端末のプログラム(とローカルのシェル)、ssh(と遠隔のシェル)、emacs の順に実行した ら、emacs、遠隔のシェル(とssh)、遠隔のシェル、端末のプログラムの順に終了する。
注意: ローカルのシェルを終了しウィンドウを閉じても、端末のプログラムが実行し続けていることがある。 必要なら端末のプログラムもきちんと終了すること。
Emacs で C-x C-f 等でファイル名を打つ時、補完機能を使うと便利である。 練習問題 emacs、タブキーによる補完機能
Emacs のマニュアルは、Emacs の中で info という機能を実行して表示できる。
M-x info
info は全体として木構造になっている。
$ cal 4 2023
4月 2023
日 月 火 水 木 金 土
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
コマンドを実行し、シェルを終了し、
ウィンドウを閉じなさい。
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. ED25519 key fingerprint is SHA256:64進数43桁. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'ホスト名' (ED25519) to the list of known hosts. ユーザ名@ホスト名's password: (パスワードを打つ。画面には表示されない。)
ホスト名:~ ユーザ名$
![]()
遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。
ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。
(sshを実行する前、端末プログラムを実行した直後。)
$ hostname
(手元のコンピュータのホスト名が表示される。)
$ ssh ユーザ名@hostname
$ hostname
(遠隔ログイン先のコンピュータのホスト名が表示される。)
$ exit
$ hostname
(手元のコンピュータのホスト名が表示される。)
$
$ 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 コマンドを使って、カレント・ワーキング・ディレクトリを
ホーム・ディレクトリの下のディレクトリに変更しなさ
い。以下は、Maildir
に変更した例である。
$ cd
$ pwd
$ ls
$ cd Maildir
$ pwd
$ ls
Maildir
も含めて次のようなディレクトリについても、類似の操作を行い
なさい。
$ 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 コマンドで表示されないが、「.」 で始まるファイルがあるために、削除できないことがある。このことを確認し なさい。
$ 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
$
練習問題(2018)
と同じファイルを 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
$ ls -d b*
bin boot
$ ls -ld b*
lrwxrwxrwx 1 root root 7 2月 6 14:50 bin -> usr/bin
drwxr-xr-x 4 root root 4096 4月 7 15:01 boot
$
この例では、
lsの-dオプションによるディレクトリそのものの表示
の機能を利用している。これを付けなかった場合、どうなるか調べなさい。
$ cd /
$ ls b*
$ ls -l b*
同様に、小文字 l から始まるファイルやディレクトリを表示しなさい。
同様に、小文字 r で終わるファイルやディレクトリを表示しなさい。
$ ls -ld *r
$ file .bashrc .emacs /bin/ls .
.bashrc: ASCII text
.emacs: Lisp/Scheme program, ASCII text
/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=897f49cafa98c11d63e619e7e40352f855249c13, for GNU/Linux 3.2.0, stripped
.: directory
$
tree コマンドに -N オプションをつけると、ファイル名に漢字を含むものも表 示できる。
$ tree -N ディレクトリ名
注意: 表示が止まらなくなった時、強制終了したい時には、
Control キー + c キー
も使える。
lv による表示。後ろに「| lv」をつける。
終了するには、q
キーを打つ。
$ tree -N ディレクトリ名 | lv
<表示省略>
<空白キーで次のページを表示>
:q
$
端末にペーストする時に「?」が表示されるならば、次のように すれば (UTF-8ではなく) ASCII 文字を使うようになる。
$ LANG=C tree -N ディレクトリ名
tree コマンドの次のオプションの意味を ls と比較しなさい。
$ 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 であることがわかる。
ローカルの端末や ssh で遠隔ログインした先で、上のコマンドを実行してどうなるか調べなさい。
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 のこの機能を利用してみなさい。
$ ls /ここまで打ったら、行末で![]()
^I
(Control+I))を1度押してみる。
$ ls /1度目は何も表示が変わらない。bash や端末の設定によっては、ベルが鳴る。 行末で![]()
$ ls /すると、ls と同じような表示がなされる。![]()
$ ls / V-Boot/ etc/ lib64/ opt/ snap/ usr/ bin/ home/ libx32/ proc/ srv/ var/ boot/ host/ lost+found/ root/ swapfile vdsk/ cdrom/ lib/ media/ run/ sys/ dev/ lib32/ mnt/ sbin/ tmp/ $ ls /目的の「![]()
usr
」は、u
から始まるものは、1個しかないので 「u」
とうち、$ ls /uすると、![]()
sr/
が補完される。
$ ls /usr/「![]()
$ ls /usr/すると、/usr の内容が表示される。![]()
$ ls /usr/ bin/ include/ lib32/ libexec/ local/ sbin/ src/ games/ lib/ lib64/ libx32/ local3/ share/ $ ls /usr/「![]()
b
$ ls /usr/b次のように「![]()
in/
」が補完される。
$ ls /usr/bin/「![]()
/usr/bin/
」に対して、「$ ls /usr/bin/候補が多すぎるので、ここでは表示はしないでDisplay all 1560 possibilities? (y or n)
![]()
n
を打つ。
Display all 1560 possibilities? (y or n)n
em
と入れて $ ls /usr/bin/emすると、次のように「![]()
acs
」が補完される。
$ ls /usr/bin/emacsこれで目的のファイルを打ち込むことができた。![]()
同様に、次のファイル名を bash の補完機能で打ってみなさい。
M-x info
次のキー操作を確かめなさい。
キー | 説明 |
---|---|
スペース | 次のページへ |
n | 次の節へ移動 |
p | 前の節へ移動 |
タブ | 次のリンクへ移動 |
リターン | カーソルのある位置の子供の節へ移動 |
m | 「*」のある所にカーソルを移動し、名前を指定して、子供の節へ移動 |
q | info を終了 |
C-SPC または C-@ | 領域(region)の先頭を決める(マーク) |
C-w | リージョン(領域)をカット |
ESC w | リージョン(領域)をコピー |
C-y | リージョン(領域)をペースト |
$ emacs file1.txt
直接ログインしているか、リモートデスクトップなどを使っている時には、
Emacs は独自のウィンドウを開く。端末の中で実行させるには、次のように
-nw (no window) オプションを与えて実行する。
$ emacs -nw 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 | 何か困った時には、何度か打つ。 |
$ 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
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
を、何度か打ってみる。
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
」
と打ち込む。
その他に遠隔ログインするコンピュータとしては、
練習問題(2069)
を参考にしなさい。
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
相当。
キーボードからファイルの終わりを示す。
レポートには、指定されていなければ、端末の全ての表示を含めなさい。全て の表示とは、シェルのプロンプト、自分が打ち込んだコマンド、コマンドの実 行結果である。端末が持つコピー機能でコピーし、テキストエディタ(のウィン ドウ)にペーストするなどして、テキストをコピーして、レポートに含めること。 レポートとして、画像を提出してはならない。
主専攻実験で K-3 を選択した人は、「[高度]」と印が付いているものも行い なさい。それ以外の人は、やらなくても良い。
(1) 自分の PC から ssh、または、リモートデスクトップで次のいずれかの Coins のコンピュータにログインしなさい。
date hostname who am iレポートには、端末の表示を全て含めなさい。すなわち、シェルのプロンプト、 自分が打ち込んだコマンド、コマンド の実行結果を含めなさい。表示された テキストをコピーして、レポートに含めなさい。レポートには、画像を含めて はならない。
以下の小問についても、同様にプロンプトを含む端末の表示を含め、採点者が 簡単にコマンドをきちんと実行したことを確認できるようにしなさい。
(3) 次のコマンドを実行しなさい。
(4) 「cd コマンド」、および、シェルのファイル名置換機能を使って /usr/bin にある次のようなファイルをすべて表示しなさい。結果は、ls コマ ンドで表示ししなさい。この課題では、ls コマンドには、必ず相対 パス名を 指定しなさい。
(5) man コマンドを実行し、次のことを調べてレポートに記述しなさい。man の表示のうち、その説明の部分をレポートに含めなさい。
(6) Emacs、または、その他の遠隔ログイン先のコンピュータで動作するテキ ストエディタを用いて、3 行以上、10行以下 python3 のプログラムを作成し、 実行しなさい。レポートには、次のことを含めなさい。
(7) Emacs と bash (Coins 標準のシェル) では、カーソル移動やヒストリの 参照について、似たようなキー操作が使える。次のキーについて、Emacs と bashで同じ動作するものを選びなさい。
C-f,C-b,C-p,C-n
また、異なる動作を選びなさい。そして、それぞれのキーについて、Emacs で 動作と bash での動作を答えなさい。
(8) Coins 標準のシェル 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) [高度] 自分が使っている端末プログラム、または、ssh プログラムが扱 うことができる文字コードの種類を2種類以上、あげなさい。