2016年06月14日 情報科学類 コンピュータリテラシ 筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2016/2016-06-14
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
例
Juan Enriquez、タトゥーのように残るあなたのオンラインライフ、TED 2013
EU 「忘れられる権利」。
注意
ネットワーク・ニュースのメッセージを読み書きするには、ニュース・リーダ と呼ばれるプログラムを使う。
ネットワーク・ニュース(network news) あるいは、 ネットニュース(netnews) は、インターネットで「1対多の通信」を実現するための仕掛けの1つ。 Usenet と呼ばれることもある。 ネットワーク・ニュースでは、ある書き手が発したメッセージを、大勢の人が 読む。ネットワーク・ニュースでは、メッセージの事を新聞に たとえて「 記事(article) 」と呼ぶ。 1つひとつの記事は、電子メールと同じく、基本的にはテキストである。
図?は、ネットワーク・ニュースの記事が配送される様子を表わしている。
図? ネットワーク・ニュースの記事転送の仕組み
各LAN上のどれかのコンピュータでは、ネットワーク・ニュースのサーバ (NNTPサーバ) とよばれるコンピュータ が動いている。そのサーバは、LAN内の他のコンピュータで動いているニュー ス・リーダからの要求に従って、自分が保存している記事を提供する。また、 投稿された記事や他のサーバから受け取った記事を、他のサーバへ転送する。 この時、サーバ間、および、サーバとニュース・リーダの間で使われる、 通信の仕組みは、 NNTP (Network News Transfer Protocol) と呼ばれている。
このように、ネットワーク・ニュースの記事はサーバ間で次々にコピーされる 形で伝わっていく。この時、世界中の数百万のサーバの中には、コピーに 失敗することがある。こういう現象を、「記事が落ちる」という。 また、コピーには、どうしても遅れか生じる。電子メールが1分もかからな いで届くような間でも、ネットワーク・ニュースの場合は、数時間はかかると こともある。また、途中のサーバが止まっていると、記事が落ちな いまでも、そこで何日か足止めされることがある。
ニュース・リーダ(news reader) は、ユーザと対話しながら、サーバから記事を取り寄せたりサーバに記事を送っ たりするプログラムである。
ネットワーク・ニュースでは、毎日膨大な量の記事が投稿されている。それ を保存するためのディスク容量には、限りがある。よって、記事は、あ る保存期間が過ぎると自動的に消されるようになっている。 これを、 エクスパイア(expire) するという。保存期間は、サーバによって異なるか、普通は2週間程 度である。 coins では、3ヶ月。
ネットワーク・ニュースの記事は、次のようなテキスト。
Newsgroups: fj.news.reader
From: shiro@is.tsukuba.ac.jp (Shiro Yagi)
Subject: E-Mail facility of news readers
Date: Thu, 24 Apr 2008 00:55:50 GMT
Organization: Institute of Information Sciences and Electronics, Univ of Tsukuba
Message-ID: <SHIRO.10Apr24085550@is.tsukuba.ac.jp>
こんにちは。白やぎです。
ニュース・リーダの電子メールも読み書き機能では、どれが便利一
番便利でしょうか。GNUS でも、メールが読めると聞いたのですけ
れど。
♪♪ 白やぎ
♪♪ http://www.is.tsukuba.ac.jp/~shiro/
ネットワーク・ニュースの記事の構造は、 電子メールの形式 と共通である。 電子メールもネットワーク・ニュースの記事も、空行で ヘッダ(header、頭) と 本文(body) にわかれる。
電子メールと共通のフィールド:
記事は、 ニュース・グループ(newsgroup) と呼ばれる仕組みを使って分類されている。世界中で1日に投稿される記事 は、数百万にもなる。それらの記事を全部読むことはできない。 ニュース・グループという仕組みを利用して記事を分類し、各自が興味を持っ ている記事を簡単に見つけられるようにしている。 それぞれの記事のヘッダのNewsgroups: フィールドには、その記事がど のニュース・グループに属しているかが書かれている。
ニュース・グループには、次のように、「.」で区切られたアルファベット や数字などで名前が付けられている。
fj.rec.music
fj.comp.lang.c
ニュース・グループの名前は、英語で、かつ長いものは省略形で 付けられている。
ニュース・グループの名前は、全体として、 木構造(tree structure) になっている。木構造が使われている理由は、 パス名 によるファイルの名前付け やDNS (Domain Name System) と同様に、非常に数多くのニュース・グループを扱えることによる。 節の区切りは、「/」ではなく、「.」。
ニュース・リーダの中でも、mnews や vin は、ユーザがニュー ス・グループの木構造にそってニュース・グループを選んでいくことになる。 ニュース・リーダによっては、ユーザは、木構造をあまり意識せず、自分が 興味があるグループを自分が好きな順序で選んでいくことができるようになっている。
1つの記事は、普通、1つのニュース・グループにだけ現われる。記事を投 稿する時に、複数のニュース・グループに現われるようにすることを、 クロスポスト という。
よいニュース・リーダなら、クロスポストされた記事を見つけると、一度 だけユーザに提示し、別のニュース・グループでは既読として扱い、提示しな いという機能がある。
ニュース・グループの中には、自分には興味がないものもある。ニュース・ リーダには、そのようなニュース・グループを、表示しない機能がある。 このことを、ニュース・グループを購読しない状態にするとか、 アンサブスクライブ(unsubscribe) するという。多くのニュース・リーダは、新しいニュース・グループを 購読する状態 ( サブスクライブ(subscribe) された状態 ) にする。ユーザは、興味があればそのままの状態にしておき、興味がなけれ ば、アンサブスクライブする。
1つのニュース・グループでは、各記事には、サーバが受け取った順に付けら れた番号が付けられている。 記事番号 と呼ぶことがある。ニュース・リーダは、標準では、この記事番号の順番 に記事を提示する。Subject: や、 スレッド の順序で並べ変えて関連する話題を連続的に読めるように提示する機能がある ニュース・リーダもある。記事番号、ニュース・サーバごとに異なる。 記事を参照する時には、 Message-ID: を使う。
記事を書くには、記事の形式で説明 したようなテキストを作成し、サーバ・プロセスに渡すことになる。この 作業を、記事を投稿する、 あるいは、 ポストするという。
ネットワーク・ニュースの記事を投稿するのは、電子メールを出すことと非常 によく似ている。異なる点は、 電子メールの受取人の電子メールのアドレス(To:)の代わりに、ニュー ス・グループ名(Newsgroups:)を指定する所 を指定することである。
電子メールと違って、ネットワーク・ニュースでは、一度投稿した記事を 取り消すことができる。これを、記事を キャンセル(cancel) するという。キャンセルできるのは、自分が投稿した記事だけである。 普通のニュース・リーダなら、キャンセルする機能がある。
記事は、保存期間が終ると消えるので、ネットワーク・ニュースの記事で、有 益なものを見つけた時には、ファイルに保存する必要がある。ニュース・ リーダでは、記事を保存する機能がある。
NNTPSERVER
)
が使われる。ポー
ト番号は、標準では 119 が使われるので、普通は、ホスト名だけを指定する。
ニュース・リーダの中には、119 以外のポート番号に接続できるものや、複数
のサーバに接続できるものもある。
英語圏では、「RSS reader」よりも「aggregator」という呼び方が多い。 複数の RSS や Atom で配信されている情報を1つに集約(aggregate)して 読みことができることによる。
RSS reader/Aggregator を使うと、単純に WWW サイトを訪れる方法と比較し て、楽に更新された情報を見ることができる。メーリング・リスト等と 比較して、spam が混入することは(今の所)ない。 広告は、入ることがある。
2種類の方法がある。
$ echo hello
hello
$ echo hi
hi
$ echo /usr/bin/*z
/usr/bin/DeRez /usr/bin/Rez
$ echo /usr/bin/DeRez /usr/bin/Rez
/usr/bin/DeRez /usr/bin/Rez
$
変数名=値
」を使う。
$ X=100
$
参照するには、「$変数名
」とする。
$ X=100
$ echo $X
100
$
他の変数と紛らわしい時には、
「"$変数名"
」のようにダブルクォートで括るとよい。
$ echo x"$X"x
x100x
$
(注意: $Xx と $X は別の変数なので区別できるようにする。)
あるいは、${変数名}
のように、
括弧で括る方法もある。
$ echo x${X}x
x100x
$
シェル変数を削除するには、unset コマンドを使う。
$ unset X
$ echo $X
$ echo x"$X"x
xx
$
設定されていないシェル変数を使おうとすると、空として扱われる。
注意:シェルのプロンプト($
) と間違えないこと。シェルのプロンプ
ト($
) は、実際のコンピュータでは、crocus38:~ i1012345$
のようになっている。
$ X=100
...
$ export X
$
あるいは、最初から export を付けて代入の操作をすることもできる。
$ export X=100
$
bash では、環境変数の参照方法と削除方法はシェル変数と同じ($
とunset)である。
$ date
2016年 6月12日 日曜日 16時16分59秒 JST
$ echo $TZ
$ TZ=EST
$ echo $TZ
EST
$ export TZ
$ date
2016年 6月12日 日曜日 02時17分17秒 EST
$
date
コマンドは、TZ
が設定されていないと、そのコン
ピュータの標準(coins では、JST
、Japan Standard Time の意味)を利
用して日時を表示する。
$ man date
DATE(1) BSD General Commands Manual DATE(1)
NAME
date -- display or set date and time
SYNOPSIS
date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt]
date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
date [-jnu] -f input_fmt new_date [+output_fmt]
date [-d dst] [-t minutes_west]
DESCRIPTION
When invoked without arguments, the date utility displays the current
date and time. Otherwise, depending on the options specified, date will
set the date and time or print it in a user-defined way.
...
ENVIRONMENT
The following environment variables affect the execution of date:
TZ The timezone to use when displaying dates. The normal format is
a pathname relative to /usr/share/zoneinfo. For example, the
command ``TZ=America/Los_Angeles date'' displays the current time
in California. See environ(7) for more information.
...
""
で括ると1単語として扱われる。
$ as="Application Support"
$ echo $as
Application Support
$ ls -ld ~/Library/$as
ls: /home/prof/yas/Library/Application: No such file or directory
ls: Support: No such file or directory
$ ls -ld ~/Library/"$as"
drwx------ 14 yas prof 4096 4 26 12:27 /home/prof/yas/Library/Application Support
$
< > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白 タブ
など。
コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 | エスケープ対象 | エスケープしないメタキャラクタ |
\x | 「\ 」の直後の一文字 | なし (行末の「\」は継続行の意味) |
'str' | 「'」でくくられた文字列 | 「'」自身は入れられない。「\'」も効かない。 |
"str" | 「"」でくくられた文字列 | 「$」, 「`」(バッククォート),「"」(ダブルクォート), 「\」,「!」 |
\
は、ASCII 5c(16進)の文字。表示は、「\」か「¥」。
ダブルクォート ""
の内部では、$
は解釈され、シェル変数や
環境変数の置き換えられる。シングルクォート
「''
」では、$
は解釈さない。
$ echo "$HOME"
/home/prof/yas
$ echo '$HOME'
$HOME
$
$ ls -ld "/Applications/QuickTime Player.app"
drwxr-xr-x+ 3 root wheel 102 5 15 22:29 /Applications/QuickTime Player.app
$ open "/Applications/QuickTime Player.app"
$
バックスラッシュを使ってもよい。
$ ls -ld /Applications/QuickTime\ Player.app
drwxr-xr-x+ 3 root wheel 102 5 15 22:29 /Applications/QuickTime Player.app
$ open /Applications/QuickTime\ Player.app
$
bashのファイル名補完機能
では、空白を含むファイル名は、バックスラッシュで自動的に補完されることがある。
$ ls -ld /A
$ ls -ld /A![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/
$ ls -ld /Applications/Q
$ ls -ld /Applications/Q![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/QuickTime\ Player.app/
ファイル名の補完機能を使う時には、空白を打ち込むには、
「\
バックスラッシュ スペース」と打つ必要がある。
補完よりも、ファイル名の置き換え機能が簡単のこともある。
$ ls -ld /A*/Q*
drwxr-xr-x+ 3 root wheel 102 5 15 22:29 /Applications/QuickTime Player.app
$
$ echo $PATH
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/us
r/local3/bin:/usr/X11/bin:/Developer/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sb
in:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/MacGPG2/bin:/opt/local/sbin:/opt
/local/bin:/usr/texbin
$ printenv PATH
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/us
r/local3/bin:/usr/X11/bin:/Developer/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sb
in:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/MacGPG2/bin:/opt/local/sbin:/opt
/local/bin:/usr/texbin
$
シェルは、打ち込まれたコマンドを環境変数 PATH の中から探して実行する。
たとえば、ls
と打ち込まれると、/bin
にある
/bin/ls
を実行する。
複数のコマンドがみつかれば、PATHの先に見つかったものを実行する。 どのコマンドが実行されるかを確認するには、which コマンドを使う。
$ which ls
/bin/ls
$
$ history
1 saykotoeri2
2 saykotoeri2
3 fg
4 dup
<中略>
500 history
$
シェル変数 HISTFILESIZE の個数だけ記憶している。
$ echo $HISTFILESIZE
500
$
$ ls file.txt
file.txt
ここで -l を付けわすれたのに気がつく
$ ls -l !*
ls -l file.txt
-rw-r--r-- 1 yas prof 9 4 29 21:23 file.txt
$
Yasushi SHINJO
。
http://www.coins.tsukuba.ac.jp/ce/
。
ページの右下の RSS 。
http://www.tsukuba.ac.jp/
。
「ニュース」「イベント」「注目の研究」「一覧を見る」「TSUKUBA ALUMNI」「
一覧を見る」の右。
https://www.coins.tsukuba.ac.jp/feed/
http://www.coins.tsukuba.ac.jp/ce/pukiwiki.php?cmd=rss&ver=1.0
$ set
$ set | lv
どのようなシェル変数が設定されているか観察しなさい。
$ printenv
$ printenv | lv
$ echo $HOME
/home/prof/yas
$ printenv HOME
/home/prof/yas
$
注意: echo
の引数には、$
を付けるが、
printenv
の引数には、$
を付けない。
次のような環境変数の値を調べなさい。
$ date
$ echo $TZ
$ export TZ=EST
$ date
$ unset TZ
$ date
$
環境変数 TZ
に /usr/share/zoneinfo/
の下にあるファイル名
を設定して、その動作を確認しなさい。
$ echo $HOME
cd コマンドの引数に与えて、ホーム・ディレクトリや
ホーム・ディレクトリ以下のディレクトリに移動してみなさい。
$ cd /
$ pwd
$ cd $HOME
$ pwd
$ cd /
$ pwd
$ cd $HOME/Desktop
$ pwd
$
ファイル名の置き換え機能「~/」を使う方法と環境変数 HOME を使う方法を比
較しなさい。
$ echo $PATH
(表示を確認する)
$ aaaa
-bash: aaaa: command not found (エラーの表示)
$ ls
(普通に実行される)
$ which ls
/bin/ls
$ PATH=/usr/bin
$ ls
-bash: ls: command not found (エラーの表示)
$ exit
この例ではPATH の内容がかなり限定され、普段は実行できるコマンドが実行で
きなくなっている。それで、最後に exit コマンドでシェルを終了している。
シェルが必要ならば、もう一度 iTerm を実行するなどしてシェルを実行する。
$ u=/Applications/Utilities
$ echo $u
/Applications/Utilities
$ ls $u
Activity Monitor.app Disk Utility.app
AirPort Utility.app Grab.app
AppleScript Editor.app Grapher.app
Audio MIDI Setup.app Keychain Access.app
Bluetooth File Exchange.app Migration Assistant.app
Boot Camp Assistant.app System Information.app
BootPicker.app Terminal.app
ColorSync Utility.app VoiceOver Utility.app
Console.app XQuartz.app
DigitalColor Meter.app
$
$ echo *
(ファイル名の並び)
$ ls -ld *
(ls -ld の結果)
$
次のようにして、「*」をエスケープして、ファイル名置き換えの動作を無効化
できることを確認しなさい。
$ echo \*
*
$ ls -ld \*
ls: *: No such file or directory
(「*」というファイルが存在しないというエラー・メッセージ。エラーが出ることが正しい動作。)
$ echo '*'
*
$ ls -ld '*'
ls: *: No such file or directory
$ echo "*"
*
$ ls -ld "*"
ls: *: No such file or directory
$
$ echo '< > | { } ( ) [ ] & ; ^ " * ? ~'
< > | { } ( ) [ ] & ; ^ " * ? ~
$ echo "< > | { } ( ) [ ] & ; ^ ' * ? ~"
< > | { } ( ) [ ] & ; ^ ' * ? ~
$ echo \< \> \| \{ \} \( \) \[ \] \& \; \^ \" \* \? \~
< > | { } ( ) [ ] & ; ^ " * ? ~
$
" "
」 や シングルクォート
「' '
」の働きを調べなさい。
$ echo "$HOME"
(表示の確認)
$ echo '$HOME'
(表示の確認)
C-u M-x help ![[←]](../icons/screen-return.gif)
t
English ![[←]](../icons/screen-return.gif)
$ history
$ history | tail -5
(過去の5行だけ表示)
$ history | grep cd
(cd を含む行だけ表示)
$ history | lv
(ページャ lv でページ単位で表示。)
!
の後に番号
!!
^P
/^N
で選択して $ echo $HISTFILESIZE
history コマンドで表示されるコマンドの数を調べなさい。
$ history
<表示>
$ history | wc
$
wc は、word count の略で、行数、単語数、バイト数を表示する。一番左が行
数である。
シェル変数 HISTFILESIZE の値を変化させると、何が起きるか調べなさい。
crocus39:~ yas$ echo "$PS1"
\h:\W \u\$
crocus39:~ yas$
この時、ダブルクォート ""
を付けないとうまく表示できないことがある。この理由を考えなさい。
シェル変数 PS1 は、シェルのプロンプトを保持している。これを変更してみな
さい。
crocus39:~ yas$ PS1="hi$ "
hi$
マニュアル man bash で、PS1 変数(PROMPTING)の中で次のような表現がどのような意味を 持っているかを調べなさい。
\h
\W
\u
$ set | wc
53 67 1566
$ set | lv
(表示省略。q で終了)
$ printenv | wc
24 29 1005
$ printenv | lv
(表示省略。q で終了)
$
" "
」 や シングルクォート 「'
'
」は、中に改行を含めることができる。逆に言うと、必ず閉じる
必要がある。閉じられていない場合には、シェルのプロンプトが$
から
>
に変化する。このことを確認しなさい。
$ echo "a
> b
> c"
(表示の確認)
$ echo 'a
> b
> c'
(表示の確認)
$
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。端末の表示 (コマンドの実行結果)は、コピー&ペースト等の機能を使って提出するファイ ルに含めなさい。課題が達成されたことを示す程度には見やすいように編集し なさい。ただし、過度の編集は避けなさい。編集した部分は必要に応じて省略 記号を入れなさい。
テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。
(1) 次のファイル名(ディレクトリ名も含めたすべて)を、適当なシェル変数を 設定して短く表現しなさい。
/Applications/Firefox.app /Applications/Thunderbird.app /Applications/QuickTime Player.app短く表現したものを、ls -ld コマンドの引数に与えて実行しなさい。
$ シェル変数の代入1
$ シェル変数の代入2
$ シェル変数の代入3
...
$ シェル変数の代入n
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x@ 3 mac-admin admin 102 1 16 09:29 /Applications/Firefox.app
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x@ 3 mac-admin admin 102 1 12 11:10 /Applications/Thunderbird.app
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x 3 root wheel 102 5 21 2009 /Applications/QuickTime Player.app
$
ヒント1: シェル変数への代入は、何回でもよい。1回でも2回以上でもよい。
ヒント2: シェル変数の値に空白が含まれている(可能性がある)ものを参照する
時には、ダブルクォートでくくる("$name"
)とよい。
ヒント3: 補完機能と組み合わせてもよい。その場合にはどのようなキー操作を したのかをレポートに書きなさい。
練習問題 シェル変数の操作、 練習問題 変数とクォートの働き 参照
(2) echo コマンドを使って、次の文字列を画面に表示しなさい。
Lib* ????top A B #AとBの間に空白が3個 <yes><no> Let's go #helpたとえば、次のように回答しなさい。
$ echo 回答内容
Lib*
$ echo 回答内容
????top
$ echo 回答内容
A B
$ echo 回答内容
<yes><no>
$ echo 回答内容
Let's go
$ echo 回答内容
#help
$
注意:これは、
メタキャラクタをエスケープ
する課題である。単に echo コマンドに対してこのような文字列を与えればよ
いということでない。
練習問題 「*」のエスケープ、
練習問題 様々なシェルのメタキャラクタのエスケープ
参照。
(3) RSSリーダ の設定をしなさい。RSSリーダとし ては、 ThunderbirdのRSSリーダ機能、 FirefoxのRSSリーダ機能 がある。その他に、RSSリーダ機能のサービスを利用する方法もある。
RSSリーダに、2つ以上の「学外」のサイトの RSS を登録しなさい。 学外のサイトのうち、1つ以上は、コンピュータ関連のものにしなさい。 残りのものは、コンピュータ関連でもそれでなくても良い。 レポートには、次の内容を含めなさい。
練習問題 ThunderbirdのRSSリーダ機能、 練習問題 FirefoxのRSSリーダ機能 参照
(4) ニュースリーダの設定を行いなさい。ネットワーク・ニュースの記事を読 みなさい。その中で、面白い記事、将来役立ちそうな記事、賛成意見を含む記 事、または、反対意見を含む記事を保存しなさい。この時、次のヘッダをきち んと保持しなさい。
練習問題 Thunderbirdでのニュース・リーダの設定、 練習問題 その他のニュース・リーダの設定 参照。
(5) SNS (ネットワークニュース含む) でメッセージを発信する時、考慮すべき 重要な事を2点上げ、簡単に説明しなさい。
(6) 筑波大学全学計算機システム の「共通科目「情報(実習)」の手引き 2016年度」 を読みなさい。 そして次の点について、次の項目について簡単に説明しなさい。
(7) [加点] 以下のコマンドは、環境変数によって動作が変わる。どのような環 境変数でどのように動作が変わるかを man コマンドや The Unix Super Text (30.4.2 節、その他各コマンドの説明) で調べなさい。そして 練習問題(1612) と同様に実際に実行し、動作の 変化を確かめなさい。 全体として、コマンドと環境変数の組で、3 個以上の例を示しなさい。ただし、 環境変数としては PATH, TZ 以外のものを使いなさい。同じ環境変数で、複数 のコマンドの動作が変化するものを含めてもよい。
(8) [加点] Emacs で、英語でチュートリアルを実施しなさい。開始日時と終了 日時を報告しなさい。