2009年06月23日 情報科学類 コンピュータリテラシ 筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2009/2009-06-23
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
^a.*tion$
」。「aで始まり、tionで終わるもの」。
「^
」、「.
」、「*
」、「$
」 は、
メタキャラクタ。特別の意味を持つ。
メタキャラクタを含まない文字列も、正規表現として意味を持つ。
*,?,[]
」などは、単にワイルドカードではなく、正規表現に
近い。複数の場所に「*
」が書けるので、単なるワイルドカードではな
い。
grep使われている正規表現
\
^
[]
の中で使われたときには否定の意味)
$
.
[c1c2c...cn]
c1c2c...cn
のどれか。
例:[abc]
ならa
かb
かc
のどれか。
[c1-c2]
c1
からc2
の範囲のどれか。
例:[a-z]
ならa
からz
までのアルファベットの小文字。
[^c1c2c...cn]
[^abc]
ならa
でもなくb
でもなくc
でもないもの。
*
.*
なら任意の文字の任意回数の繰り返し。
[a-z]*
ならアルファベット小文字の任意回数の繰り返し。
ab
なら、「a
」に続き「b
」。
\(正規表現\)
X\(abc\)*X
は、XabcabcX
にマッチする。
\N
X\(abc\)\1X
は、XabcabcX
にマッチする。
\<
\>
正規表現 | マッチする例 | マッチしない例 |
abc | abc, abcd | ab |
\\abc | \abc, \abcd | \ab |
a.c | aac, abc, xabc | ac, a, c, |
a*c | c, ac, axc, aaac, xc | a |
[abc]x | ax, bx, XaxX | dx |
[^abc]x | dx, ex | bx, Xbx, abx |
正規表現+
正規表現
の1回以上の繰り返し。「正規表現 正規表現*
」と同じ。
正規表現?
正規表現
が0回、または、1回。
正規表現1|正規表現2
正規表現1かまたは正規表現2
。orの意味。
(正規表現)
正規表現
のグループ化。
\(\)
やその参照\N
は廃止された。
|
の意味が違い、egrepで
|
と書く所、Emacs では
\|
と書く。egrep で
\|
と書く所では、Emacs では|
でよい。
正規表現1\|正規表現2
正規表現1かまたは正規表現2
。orの意味。
\`
\'
\w
\W
\b
\B
通常(一括) | インクリメンタル | |
正規表現なし | search-forward | isearch-forward |
正規表現付き | search-forward-regexp | isearch-forward-regexp |
-forward
以外に -backward
がある。
C-r isearch-backward
C-s isearch-forward
C-M-r isearch-backward-regexp
C-M-s isearch-forward-regexp
C-M-s
は、Esc C-s
, C-M-r
は、Esc C-r
と同じ。
一括 | 問合せ付き | |
正規表現なし | replace-string | query-replace |
正規表現付き | replace-regexp | query-replace-regexp |
M-% query-replace
C-M-% query-replace-regexp
+
,?
,|
,()
が使える。
+
,?
,|
,()
が使える。。
printf()
や substr()
による非正規表現で
の置換えができる。
注意点
$
」や「*
」を解釈しないように、
シングルクォート「''
」でくくるなどして、エスケープする。
[再掲]
アクセス制御(access control)
とは、「主体」が、「オブジェクト」を「操作」する時、どんな操作なら正し
いということを定義して、それがきちんと守られていることをということを保
証することである。
図? アクセス制御における主体、オブジェクト、および、操作
httpd.conf
(access.conf)
.htaccess
coins では、orchid-nwd の次の場所にある。
/opt/apache2/conf/httpd.conf
/sw/etc/apache2/httpd.conf
order deny,allow deny from all allow from 130.158.0.0/16 133.51.0.0/16 192.50.17.0/24主体は、IP アドレスで指定されたクライアント・コンピュータ。
WWW ブラウザが1つのページをアクセスするたびに HTTP のヘッダにユーザ名 とパスワードを含める。
GET /dir1/file1.html HTTP/1.1
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Authorization:
には、ユーザが打ち込んだユーザ名とパスワードが
Base64 (64進数)で符合化されて含まれている。Base64 は、暗号ではないので、
簡単に元にもどせる。
% echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -d
Aladdin:open sesame%
%
Basic 認証では、パスワードがそのままネットワークを流れてしまう。
この問題点を解消するために、SSL で通信路を暗号化することがよく行われる。
<FilesMatch "\.(gif|jpe?g|png)$"> order deny,allow deny from all allow from 130.158.0.0/16 133.51.0.0/16 192.50.17.0/24 </FilesMatch>
協調して動作しているプログラムの間で、ある一連の作業を識別するための数 を意味する。
WWW(World Wide Web)では、1回のデータ転送ごとに通信路が切断される ので、通常はWWWのブラウザ(クライアント)とWWWサーバの間では、途 中経過を保持することができない。
途中経過を保存したい時:
WWWで途中経過を保存するためには、cookie が使われる。
普通のWWWサーバでは、要求を送ってきたコンピュータのIPアドレスを記 録しているので、コンピュータ単位でのアクセス状況を記録することはできる が、個人を特定することはできない。
クッキーを利用することにより、コンピュータではなくどの個人がアクセスし てきたかを記録することができる。
クッキーから電子メールのアドレスや氏名まで調べることはできない。 しかし、インターネットをサーフしている間にどこかでそれを打ち込んだが最 後、クッキーと電子メール・アドレスや氏名との対応が記録されてしまう危険 性がある。
参考
RFC2965 HTTP State Management Mechanism
ネットワーク・ニュースのメッセージを読み書きするには、ニュース・リーダ と呼ばれるプログラムを使う。
ネットワーク・ニュース(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
ニュース・グループの名前は、英語で、かつ長いものは省略形で 付けられている。
ニュース・グループの名前は、全体として、 木構造 になっている。木構造が使われている理由は、 ファイルの名前付け と同様に、非常に数多くのニュース・グループを扱えることによる。 節の区切りは、「/」ではなく、「.」。
ニュース・リーダの中でも、mnews や vin は、ユーザがニュー ス・グループの木構造にそってニュース・グループを選んでいくことになる。 ニュース・リーダによっては、ユーザは、木構造をあまり意識せず、自分が 興味があるグループを自分が好きな順序で選んでいくことができるようになっている。
1つの記事は、普通、1つのニュース・グループにだけ現われる。記事を投 稿する時に、複数のニュース・グループに現われるようにすることを、 クロスポスト という。
よいニュース・リーダなら、クロスポストされた記事を見つけると、一度 だけユーザに提示し、別のニュース・グループでは既読として扱い、提示しな いという機能がある。クロスポストの機能を使わずに、同じ内容の記事を 複数のニュース・グループに別々に投稿することを マルチポスト という。マルチポストは、特別な場合を除いて、避けるべきである。い くら大事で有益な情報でも、何度も同じ記事を読むことを望む人はいない。
Distribution:
とは、
普通、記事が配られる範囲を制限する(小さくする)機能である。
配布範囲の例としては、
学内、社内、市内などが考えられる。典型的な使い方は、
たとえば、fj などのもともと世界区のニュース・グループに、学内に限定し
た話題を投稿する時に、配布範囲として「学内」を指定して投稿するというこ
とである。
特別な配布範囲:
local
world
配布範囲の機能は、現在の所、あまりうまく活用されていない。
多くの場合は、空のままでよい。配布範囲が空の場合、
world
という意味になる。
ニュース・グループの中には、自分には興味がないものもある。ニュース・ リーダには、そのようなニュース・グループを、表示しない機能がある。 このことを、ニュース・グループを購読しない状態にするとか、 アンサブスクライブ(unsubscribe) するという。多くのニュース・リーダは、新しいニュース・グループを 購読する状態 ( サブスクライブ(subscribe) された状態 ) にする。ユーザは、興味があればそのままの状態にしておき、興味がなけれ ば、アンサブスクライブする。
1つのニュース・グループでは、各記事には、サーバが受け取った順に付けら れた番号が付けられている。 記事番号 と呼ぶことがある。ニュース・リーダは、標準では、この記事番号の順番 に記事を提示する。Subject: や、 スレッド の順序で並べ変えて関連する話題を連続的に読めるように提示する機能がある ニュース・リーダもある。記事番号、ニュース・サーバごとに異なる。 記事を参照する時には、 Message-ID: を使う。
記事を書くには、記事の形式で説明 したようなテキストを作成し、サーバ・プロセスに渡すことになる。この 作業を、記事を投稿する、 あるいは、 ポストするという。
ネットワーク・ニュースの記事を投稿するのは、電子メールを出すことと非常 によく似ている。異なる点は、 電子メールの受取人の電子メールのアドレス(To:)の代わりに、ニュー ス・グループ名(Newsgroups:)を指定する所、および、 配布範囲 (Distribution:)を指定することである。
投稿された記事は、すぐには読めない。これは、効率のため、ある程度ため 込んでまとめて処理されるからである。うまく投稿されたかどうかを確認するに は、場合によっては10分〜15分ほど待つ必要がある。そして、1度 ニュース・リーダをを終了して、再び実行しなおすか、新着記事をチェックす る操作を行うと、見えるようになる。
ネットワーク・ニュースでは、記事を投稿する時に、他の人が書いた記事を引 用しつつ自分の意見を書き加える形で行なうことがよく行われる。この方法の 投稿ことを、 フォローアップ(followup) という。ネットワーク・ニュースの記事を読むと直ぐに気が付くように、 記事の大部分はフォローアップ記事である。どのニュース・リーダも、フォ ローアップ記事を簡単に投稿できるような機能を持っている。
記事をクロスポスト記事するには、
Newsgroups:
ヘッダに、ニュース・グループを「,」で区切りながら並べる。
また、クロスポストする時には、同時に
Followup-To:
を付け、以後の議論が続けたいニュース・グループを指定することができる。
これが付いた記事にフォローアップしようとすると、ニュース・リーダは、こ
こに指定されたニュース・グループをNewsgroups: に設定する。
ネットワーク・ニュースでは、フォローアップで話を進めていくことが基本だが、 記事を書いた人に電子メールを出して詳しい話を聞いたり、 詳しい情報提供をしたりすることも行われる。 このことを、電子メールと同様に、 リプライ(reply) するという。
電子メールと違って、ネットワーク・ニュースでは、一度投稿した記事を 取り消すことができる。これを、記事を キャンセル(cancel) するという。キャンセルできるのは、自分が投稿した記事だけである。 普通のニュース・リーダなら、キャンセルする機能がある。
記事は、保存期間が終ると消えるので、ネットワーク・ニュースの記事で、有 益なものを見つけた時には、ファイルに保存する必要がある。ニュース・ リーダでは、記事を保存する機能がある。
NNTPSERVER
)
が使われる。ポー
ト番号は、標準では 119 が使われるので、普通は、ホスト名だけを指定する。
ニュース・リーダの中には、119 以外のポート番号に接続できるものや、複数
のサーバに接続できるものもある。
% ruby -n -e 'print if /正規表現/'
% cd /usr/share/dict
% grep '^pattern' words
% look pattern
MacOSX Firefox
~/Library/Application\ Support/Firefox/Profiles/*/cookies.txt
% mkdir ~/secure_html
% mkdir ~/secure_html/ディレクトリ名
次のドキュメントを参考にして、作成したディレクトリに .htaccess を作成し
なさい。
次の3つの方法を比較しなさい。
Require group
と書く方法
Require user
と書く方法
Require valid-user
と書く方法
例:パスワード・ファイル
/home1/prof/yas/etc/passwd-doc1
に登録されているユーザだけが、
.htaccess
があるディレクトリ以下にあるファイルをアクセスできる。
.htaccess:
AuthType Basic AuthName "restricted stuff" AuthUserFile /home1/prof/yas/etc/passwd-doc1 require valid-userこのパスワード・ファイルは、サーバ上でhtpasswd というプログラムで作成する。
% htpasswd -c /home1/prof/yas/etc/passwd-doc1 user1
Adding password for user1.
New password:user1のパスワードを打ち込む
Re-type new password:user1のパスワードを打ち込む
% htpasswd /home1/prof/yas/etc/passwd-doc1 user2
Adding user user2
New password:user2のパスワードを打ち込む
Re-type new password:user2のパスワードを打ち込む
%
一番最初は、-c
オプション付で実行する。passwd
コマ
ンドと同様に、打ち込んだパスワードは、画面には表示されず、また、確
認のために2回打つ必要がある。
htpasswd コマンドの結果、次のようなファイルが作られる。
user1:1fjr1tHIgoG7U
user2:qXaeA9Zge7Yqc
ユーザ名と暗号化されたパスワード(正確にはパスワードのハッシュ値)から
構成される。
パスワードによるアクセス制御の例:
設定ファイル .htaccess
AuthType Basic AuthName "restricted stuff" AuthUserFile /home1/prof/yas/etc/passwd-doc1 require valid-user
% ls ~yas/secure_html/coins/literacy-2009/
% ls -a ~yas/secure_html/coins/literacy-2009/
ここにある .htaccess にどのような記述がなされているかを調べなさい。
たとえば、fj では次のような方法がある。
(1) 正規表現の検索機能を用いて、次のファイルから次のことがらを検索して 画面に表示しなさい。レポートには結果だけでなく、どのようなコマンドを打っ たのかを示しなさい。head コマンドや tail コマンドと組み合わせて、表示の 行数を採点しやすい程度にしぼりなさい。
/var/log/httpd/www.coins80/access_log.200906230107
または
同じディレクトリ内にあるアクセスログ。自分が作成したWWWページのうち、
HTMLファイルのみ。(ssh で orchid-nwd にログインして行う。)
なお、grepコマンドには、or の機能がない。orが必要な場合、grep コマンド を複数回実行してもよい。egrep 機能を用いれば 1 回で終わることもある。
(2) 正規表現の検索機能を用いて、次のコマンドの実行結果から次のことがら を検索して画面に表示しなさい。
(3) 正規表現の置換え機能(sed,Emacs,viなど)を用いて、次のことを行いなさい。
1: #include <stdio.h> 2: 3: #define NAME "(name)" 4: 5: int main() 6: { 7: printf("Hello, %s\n", NAME ); 8: }
(4) アクセスする時に Cookie の設定を要求する Web サイトを1つ示しなさい。 そのサイトが Cookie の設定を有効にした時と無効にした時で動作が変わるか を調べなさい。
(5) [加点] Webページにおいて、ある特定のディレクトリ以下のファイルやディ レクトリに対して、Basic 認証、または、IP アドレスを用いてアクセス制御を 行うように設定しなさい。レポートにはディレクトリ名、および、作成し た.htaccess の記述、アクセスが許されたときのログ、失敗した時のログを含 めなさい。ログは最小限のものだけを含めなさい。
(6) [加点] ニュースリーダの設定を行いなさい。ネットワーク・ニュースの記 事を読みなさい。その中で、面白い記事、または、将来役立ちそうな記事を保 存しなさい。この時、次のヘッダをきちんと保持しなさい。