[[授業資料]]
#CONTENTS
// 第 1 回 -- ログイン,コマンド操作の基本,マニュアル, シェル
* Unix is multiuser system: マルチユーザシステムとしての unix [#oc924fc6]
unix は「複数の人間が同時に同じシステムを使う」ために設計された OS であり,こうしたシステムをマルチユーザシステムとよぶ.
こうしたシステムでは,ユーザを識別したり,ユーザの行動や資源を個別に制限するための仕組みがある. また,「人間ではないユーザ」を用いて適切な作業をさせる等,この仕組みは様々な使い方がされている.
unix では,ユーザは事前に登録され,ログインによってアクセスを開始し,アクセス中は適切なコマンドによって作業を行ない,ログアウトでアクセスを終了する,という使い方が基本である.
こういった内容に関して,まずは最も最初から必要となるアカウントやパスワードといったものやログイン,ログアウト操作について知る.
** Login: ログイン [#i93b4b06]
unix システムにユーザとしてアクセスして利用を開始する手続きを言う.
次に示す「ログアウト」と対になる手続きである.
一般に,ユーザを識別するために「アカウント」と「パスワード」の入力が求められる.
具体的な手続きにはログインの方法 (プロトコル) によって様々な形式がある.
また,unix が動いているマシンの前で直接ログインする他にネットワークを通じて遠方からログインすることもできる.
通常は,ログインすると設定してある「シェル」とよばれるプログラムが起動し,ユーザの入出力を受け持ってくれる.
** Logout: ログアウト [#gd88446f]
unix システムでユーザとしてアクセスを終了する手続きを言う.
前に示す「ログイン」と対になる手続きである.
このログアウトを行なうまでは unix にアクセス中という扱いになる.
具体的な手続きはこれまた様々な形式があり,システムによって異なるため,
未知のシステムにログインする前にログアウトについてだけは知っておく必要がある.
** Account: アカウント [#h76a2eee]
システムのユーザとしての個々の名称をいい,「アカウント」の他に
「ユーザネーム」などともよばれる.
メールアドレスの一部として利用されることも多い.
** Password: パスワード [#ee852455]
あるユーザであることを証明するための秘密の合言葉が「パスワード」である.
ユーザの識別を保証する手段であるため,パスワードの漏洩は避けねばならない.
そのため,パスワードはなるべく複雑なものが推奨される.
// 具体的には,教育用計算機の利用の手引き
// <a href="http://www.ecs.cmc.osaka-u.ac.jp/tebiki/node13.html">「パスワードの選び方」</a>
// などにあるように,
覚えやすいく推測されにくいもの,を工夫して使うのがよい.
また,こまめに変更するのがよい.
&ref(/materials/warning.png); ログイン & ログアウト時の注意
- ログインしたまま席を離れると,他人がその席に座ってパスワードを変更したり,貴方宛のメールを読んだり,貴方の名前でメールを送ったり,貴方のデータを改竄,消去したりと他にも様々な不正行為が可能となる. 特に証拠がなければそれは貴方がやったこととして扱われる. そのため,ログインしたまま席を離れることはしてはならない. こまめにログアウトするよう注意がけるべきである. &br; 逆に,他人が席を離れたからといってそうした行為をしてはならない. こうした行為は「不正行為」として教育用計算機システムの規約で認定されており,発覚した場合は厳正に処罰される.
- 節電のため,ログアウト時にディスプレイの電源を切るように.ただし,間違えてコンピュータ自身の電源を切ったりしないようにすること.もし間違えて本体の電源を切ってしまった場合は 教官,TA などに相談すること.
&ref(/materials/warning.png); パスワードについての注意
教育用計算機システムのようにマルチユーザシステムで最も警戒すべきは「他人が自ユーザになりすまさないように」という点である.
そのためには,パスワードは絶対にばれないようにする必要がある.
- よって,パスワードを紙等に「メモ」することは絶対にしてはならない.
- 「ショルダーハッキング」と言って,パスワードを入力する人の肩越しにモニタやキーボードを盗み見て他人のパスワードを入手する方法がある.そうされないように,ログインの際には周囲の視線に注意.&br;また,ショルダーハックしていると誤解されないように,他人がログインする時やパスワードを変更している際は,''「明示的に顔や体を他の方向に向ける」''のがマナーである.&br;他人がログインしようとしている時に顔をそむける等の配慮をしないと,黙ってぶん殴られても文句を言えないので注意すること.
** Commands and Procedures to login/logout: ログイン,ログアウト等に関連するコマンドや手続きについて [#i7b496cc]
ログイン周りはセキュリティ問題に強く関係するため,システムによって拡張されたり制限が加わっていたりすることが多い.
それは阪大教育用計算機システムでも同様であり,一般論がそのまま適用できない場面が多くなっている.
しかし,まずは基礎から,ということでここではなるべく古典的かつ一般的なものを解説する.
なお,セキュリティに関しては遠隔ログイン等を紹介する際に詳しく説明する.
CENTER:■ ログイン,ログアウト等に関連するコマンド,手続き ■
| コマンド等 | 機能等解説 (一般の場合) | 備考 |h
| (略) | ログインのための手続き. &br; システムやプロトコルによってかなり異なるが,通常はコンソール前に座れば一目瞭然なことが多いだろう. | 「利用の手引き」の「ログイン操作」を参照のこと. |
| ''logout'', ''exit'' 等 | ログアウトする. &br;これもシステムによってかなり異なる.&br; | (X を使っている場合) このコマンドは用いないこと.&br;「利用の手引き」の「ログアウト操作」を参照.&br;確実にログアウトできるように,この手続きだけは忘れないようにすること. |
| ''passwd'',''yppasswd'' 等 | パスワードを変更する. | |
| ''id'' | ユーザの、ユーザ名とグループ名および各番号を表示する. | |
| ''last'' | 最近ログインしたユーザのリストを表示する.| |
| ''uptime'' | システムの稼働時間,ユーザ数,平均負荷を表示する. | |
| ''who, w, finger, whoami'' 等 | who: 誰がログインしているかを表示する&br; w: ログインしているユーザとその作業内容を表示する. CPU の情報もわかる.&br;finger: ユーザ情報を調べる&br;whoami: ... &br;who am I: 私は誰? | |
| ''date, cal'' 等 | date: 日時を表示&br;cal: カレンダーを表示する.&br; | |
| ''leave'' | 何時離席すべきかを知らせる&br;leave 1400 : 午後2時になったら帰らないと,という時に指定する.&br;こうすると,午後 1:55 と 1:59, 2:00, 2:01, (1分おきでずっと) に御知らせが届く.&br;leave +0015 : 15分後に帰らないとという時. | |
* Basic of Command Operations: コマンド操作の基本 [#t7940d2d]
さて,unix の cui 上で操作を行うということはどういうことか解説しておこう.
その仕組みについては後述するが,cui での操作はコンピュータに対して「コマンド」を用いて命令することで行われる.このコマンドには,大ざっぱな文法構造があるので,それを事前に理解しておくとこれからの学習に大いに助けになろう.以下,そのコマンドの文法等について説明する.
** Basic Grammer of Commands: 命令 (コマンド) の基本的な文法 [#haa52669]
基本的な文法は,「召使いへの''英語での命令''」であると思えば良い.
具体的には,
''(命令形の動詞) (副詞) (目的語)''
と並べて命令文を作る,と思えばよい.
実際には,
''コマンド␣オプション␣引数''
と並べる(間はスペース␣で区切られる).
オプションとは,コマンドの「動作に変更を加えるためのもの」であり,引数とは,コマンドが「作用する対象」である.つまり,コマンドが (命令形の動詞) に相当し,オプションが (副詞) に相当し,引数が (目的語) に相当すると思えばよい.オプションや引数をどう解釈し扱うかはコマンドに依存するので,後述するオンラインマニュアルで逐次調べる必要がある.しかし,一般にオプションには - (ハイフン,マイナス) を前につける慣例があるので,それは知っておいた方がよいだろう.
** Common Key Bindings: コマンド中でよく使われるキー [#c4719956]
コマンドを実行したが,用が済んだので終わりたい,よく分からないので止めたい,等の時にどうしたら良いか分からないというときがある.本来はきちんとマニュアルを読んでそれに従うべきだが,マニュアルが無い,英語で良く分からない等の状況もあるので,そういう時は慣例としてよく用いられている次のようなキー入力を試してみるとよい.
ただし,^ は「Ctrlキーを押しながら」を意味する.
: ''^c'' | … 実行中のコマンドを停止する,かもしれない.
: ''^d'' もしくは ''.''(ピリオド) + [Enterキー] | … コマンドが入力を求めているとき,「入力はもう終り」を意味することができる,かもしれない.&br;シェルも「入力を求めるプログラム」であるので,設定によってはこのキー入力でシェル自身が終了してしまうので注意すること.
: ''^g'' | … 編集系の実行中コマンドを停止する,かもしれない.
: ''^]'' | … 通信系の実行中コマンドの対話実行を停止する,かもしれない.
&ref(/materials/notes.png); 操作しても支障のなさそうな範囲で, 先に出てきたコマンドを試してみて,コマンド操作の雰囲気をつかんでみる. 具体的には,次の手順で行う. なお,この手順はこの授業での実習の基本なので,端末エミュレータの扱いには慣れておくべし.
+ 端末エミュレータを起動.
+ その上でコマンドをタイプし,[Enter] キーを押して入力.
+ 現れた反応をみて学習.
+ 以下繰り返し.
&ref(/materials/warning.png); kterm をはじめとする端末エミュレータとは,文字端末と呼ばれる文字しか扱わない端末の「エミュレータ=動作模倣ソフトウェア」の一種である (kterm = Kanji TERMinal emulator). cui 環境を体感するには端末エミュレータは最も手軽な手段であるので,これからも良く用いる.同様の文字端末エミュレータには,xterm, rvxt, gnome端末など数多くがあるので,自分の好みのものを使うとよいだろう. なお,より「本格的な」cui 環境については第3回の授業で解説する.
* Online Manuals: 「自分で調べるための」オンラインマニュアル [#kbc5e86d]
unix というシステムの持つ文化には,「何事も自分で調べよ」という大人な部分がある.そのため,コマンドには基本的にオンラインのマニュアルが用意されており,そのマニュアルを参照することで使いこなせるようになることが期待される.また,unix のコマンドは長い歴史の中で大勢の開発者が少しづつ追加,改良してきたものなのでその名前から使い方,オプション等はかなり違う (要するにバラバラ).そうした意味でも,各コマンドの目的,動作の詳細,オプションや各種設定の仕方等をオンラインマニュアルから読んでからユーザはコマンドを使うという「流れ」が unix cui 操作の大前提となっている.
オンラインマニュアルで見られるものは,
- 名称 : 名前と一行程度の簡単な説明.
- 書式 : オプションや引数をどう並べるか.
- 解説 : 何をするコマンドなのかの解説およびオプションの説明.
- 歴史 : そのコマンドにまつわる歴史.
- 環境変数や設定ファイルについて.
- 使用例 : 簡単な例. これを最初に見る,というのが実は良い.
- 関連項目: 関係する,もしくは似たようなコマンドの列挙.ちょっと探している機能と違う,というときはここをよくみる.
- バグ : バグや使用上の注意点がかかれている.
という感じになっている.
わからなかったらまずマニュアル,という癖をつけておくのが上達への第一歩である.(第二歩目は,「unix に詳しくて教えてくれる知人を見つける」である(^-^)).
** Commands for Online Manuals: オンラインマニュアルに関連するコマンドや手続きについて [#a317c52c]
CENTER:■ オンラインマニュアルに関連するコマンド,手続き ■
| コマンド等 | 機能等解説 |h
| man␣コマンド名 | オンラインマニュアル. &br;与えたコマンドについてのマニュアルを表示する.何も設定しないと,たいていは英語マニュアルだ. |
| jman␣コマンド名 | 日本語オンラインマニュアル.&br; 与えたコマンドについてのマニュアルを日本語で表示する. マニュアルの日本語訳が存在しなければ英語のものを表示する. 設定によっては使えない. |
| (j)man␣man | オンラインマニュアルのマニュアル(^-^).&br; man もコマンドなので,これはアリなのだ. マニュアルの使い方についてよく分からない場合はこれを見よ. |
| (j)man␣-k␣キーワード | マニュアルデータベースの中からキーワードを含むようなもののコマンドを探し出して列挙する.&br;良く分からないがこんな感じ,というコマンドを探したりするのに使う. |
| xman | Xwindow 上のオンラインマニュアル. &br;存在するマニュアルリストが一覧で見られるなど,結構便利だが,英語表示のみなことが多い. |
| info | オンラインマニュアル.&br;man 系統で見られるマニュアルは主に「システム管理者によって用意された」ものであるが,info でみられるマニュアルはユーザが主に用意するものである,という違いがユーザからみたときに一番わかりやすい違いか. &br;操作方法が一種独特. 一種のハイパーテキストなので,うまく作られていれば非常に強力なマニュアルとなる…が,そうした用途には web document が主として使われるようになってしまった. |
&ref(/materials/warning.png); ''(j)man'' などのコマンドでオンラインマニュアルを画面に出力したはいいが,その後どうやって操作したらよいかがわからないかもしれない.
実は,こうした画面出力では通常は ''less'' というコマンドが用いられているので,このコマンドの操作方法を調べておけばよい.具体的には,''(j)man less''などとせよ.
&ref(/materials/notes.png); オンラインマニュアルコマンドを試してみる. 先に出てきた, ログイン関連のコマンドを対象としてマニュアルを調べてみるとよいだろう.
* Shell: シェル [#g8931188]
&ref(./shell-image.png);
unix で cui 操作をしようとすると,実はそこには「シェル」というソフトウェアが既に起動していて,人間の命令 (コマンド) を待ち構えている. 具体的には,kterm を起動したとき,
>
や
$
などという表示がでるが,これはシェルが「何か入力してください」とコマンド入力を待ち受けていることを示している.
基本的に,この「シェル」プログラムを通して人間の文字入力を命令としてコンピュータに伝えるのがunix での cui 操作である.つまり,unix os と人間の間に,シェルが入って両方の橋渡しをしてくれるのである.イメージとしては,シェルは「同時通訳者」もしくは人間の「執事,召使い」と思えばよい.
実際,シェルは細かいことを人間の代わりに覚えておいてくれたり,探し物をしてくれたり,間違ったコマンドを直してくれたり,とまさによくできた召使いといってよい.
結局,unix での cui 操作に慣れるというのは,''召使いであるシェルへの命令の仕方に慣れる''ということであるともいえる.
ちなみに,シェルにはいろいろな種類があり,好みに応じて好きなものをを選ぶことができる.これ以上の詳しい解説はシェルスクリプトを学習するときに行なう.さて,こうした「二段階を経ての命令」には便利さとは逆に問題も存在する.
それは,unix cui での操作には,
- シェルの操作
- 対象プログラム自身の操作
という二つのファクターが入ってくるので,この二つのファクターに関する知識が要求されること,問題が起きたとき (特に初心者は) 混乱しやすいという点である.
これは,意識して区別するようにしていけばすぐ分かるようになる.よく分からないときは,自分が困っている原因がどこにあるのかをまずはっきりさせるようにすると解決が早いだろう.
** Variety in Shells: シェルの種類 [#i7be1dbe]
シェルは数多くあるが,大きく分けて [sh系] と [csh系] との二つに分類できる.
: ''sh系'' | は sh という最もシンプルかつ古いシェルに端を発するもので,シェルスクリプト (簡単なプログラム) が組みやすい反面,対話的処理がやや分かりにくいという性質を持つ.
: ''csh系'' | は C 言語に似た文法を採用した csh というシェルから始まるもので,対話的には使いやすいが,シェルスクリプトでやや問題が生じやすい.
[sh系] の比較的新しいものに bash, [csh系] の比較的新しいものに tcsh があるので,そのどちらかを使っておけば良いだろう. また,zsh という非常に強力なシェルも存在するので,興味あるものは一度調べておくのがよい.
(注) 教育用計算機システムで sh と称されているものの実体は bash であるので, sh の機能が制限されていることの体感は難しい(^-^).
** Change of Shell: シェルの一時変更 [#i4440733]
シェルも一つのソフトであるので,普通のコマンドとして起動できる. よって,一時的に異なるシェルを使いたいという場合は素直にコマンドとして入力すればよい. その時点から終了させるまで新しいシェルの上で作業ができる.使っているシェルを終了するには,''exit'' コマンドを使う. イメージとしては,シェルの上でさらにシェルが動く,という感じだ.
** Change of Login Shell: ログインシェルの変更 [#ue45cd4d]
ログインすると自動的にあるシェルがユーザ用に起動し,それ以降ユーザと unix システムの橋渡しをする.これをログインシェルと呼ぶ.ログインシェルはシステムの標準シェルの中から自分の好みのものを選択して変更することができる.ただし,標準シェルとは /etc/shells に登録されているものをいう. 変更方法については後述する.
* Functions of Shell: シェルの機能 [#tca18083]
シェルスクリプトに関しては後日の講義で解説するので,ここではシェルの対話的利用に関する説明を行なう.また,パスに関しては利用環境のカスタマイズ等の講義で教える. 機能に関しては,各種シェルにより使えたり使えなかったりするうえ,コマンドも異なるため,詳細は調べてから利用するように.
** Input of Commands: コマンドの入力 [#g39519dc]
シェルへのコマンド入力は,行単位で行なわれる. つまり,キーボードから入力した文字列は,最後に [Enterキー] を押すことでシェルに伝わるのである. 言い換えると,[Enterキー] を押すまではいろいろできるということだ.
** Continuous Execution and Grouping of Commands: 連続実行,grouping [#maf46e9a]
コマンド入力の基本は 1行で1コマンド であるが,連続するコマンドを同じ行に続けて書くこともできる.具体的には,
コマンド; コマンド; …
とコマンドの間に ; (セミコロン) を挟むだけでよい.こうすると,次のヒストリーとのからみで便利なことがある.
また,こうした連続実行するコマンドを ( ) で一つのグループにまとめて
(コマンド; コマンド)
等とすることができる. グループ化された複数コマンドはシェルからは一つのコマンドとして扱われるので,ジョブ制御等での動作が変わってくる.
** History: ヒストリー [#g42accb7]
これまで入力したコマンドを (設定した数だけ) 覚えている機能. 何回も同じコマンドをキーボードから打つより,昔のコマンドを呼び出す方が楽. 使い方は history コマンドや ! 関連を見よ.
** Edition of Command Lines: コマンドラインの編集 [#qf65acb7]
[Enterキー] を押す前なら,入力行を適当に編集できる. どのキーがどのように使えるかはシェルによって異なるが,おそらく矢印キーや emacs キーバインディングは使えるものが多いだろう.
** Completion: 補完 [#g531f545]
コマンド名やファイル名を入力している時,あるキーを押すと途中で残りの部分をシェルが補ってくれる機能である.対応するコマンドやファイル名が一つしかない場合はそれ自体で補完し,候補が複数ある場合は共通部分まで補完してくれる.さらにキーをもう一度押すと一覧表が表示されたりする.
ただし,この機能はシェルによってかなり働きが違う.上の「あるキー」は [Tabキー] か [Escキー] , ^d などになる (シェルによって異なる)が,まずは [Tabキー] を試してみるのが良いだろう.
** Alias: 別名 [#t2576a23]
自分で決めたコマンド名で異なるコマンドを呼び出すことができる.いつも同じオプションをつけておきたい,コマンドが長すぎるので短いものにしたい,分かりやすい名前にしたい,などの要望に応える機能である.使い方は alias コマンドを見よ.
** Glob Expansion(Wildcard Characters): ファイル名生成 (ワイルドカード展開) [#jae48c3e]
コマンド中で対応するファイル名を一々全て入力するのではなく,あるパターンを記述することで該当するファイルを指定することができる.非常に便利なので,是非とも使いこなせるようになるべし.
このパターンを作るための文字とその役割は以下の通りである.
- ''?'' 任意の一文字
- ''*'' 任意文字列 (0文字以上)
- ''[]'' [ ] 中のどれか一文字. - で範囲指定もできる.
- ''{文字列1, 文字列2,...}'' {} 中の , で区切られたどれかの文字列.
ただし,ファイル名の先頭にある . (ピリオド) だけは . で直接指定しないと反応しないので注意が必要だ (例外).
*** example of glob expansion: ''ワイルドカード展開の例'' [#p9c52897]
> ls -Fa ← man で調べておくこと.
> ./ .a 00.c a.txt b z.txt
> ../ .b a abc dummy.html
> echo ??? ← man で調べておくこと.
> abc
> echo [a-c]*
> a a.txt abc b
> echo {a,z}.txt
> a.txt z.txt
> echo *.* ← 途中にピリオドのあるもの. ファイル名先頭の . には対応しない.
> 00.c a.txt dummy.html z.txt
> echo * ← 全て… と言いたいがファイル名先頭の . には対応しない.
> 00.c a a.txt abc b dummy.html z.txt
> echo .* * ← 全て… と言いたいがディレクトリの . .. にも反応してしまう.
> . .. .a .b 00.c a a.txt abc b dummy.html z.txt
* Commands about Shells: シェルに関連するコマンドや手続きについて [#q77cdb41]
これ以降,詳細は man コマンドで調べるのが前提である. 忘れないように.
CENTER:■ シェルに関連するコマンド,手続き ■
| コマンド等 | 機能等解説 |h
| chsh, ypchsh 等 | ログインシェルの変更.&br;標準シェル (/etc/shells) に載っているシェルの好きなものにログインシェルを変更できる. |
| alias␣別名=コマンド | コマンドに別名を与える.&br;このコマンドを実行以降,指定したコマンドを別名で呼び出すことができる. |
| unalias␣別名| 別名を解除する. |
| history | これまでに実行したコマンドの履歴リストの表示.&br;リストの長さには制限があるので,正確には「直前までのコマンド履歴の一部」であるが… |
| !! | 直前のコマンド行の再実行.&br;時に便利だ. |
| !n (nは数字) | コマンド履歴リストの n番のコマンド行.&br;これもなかなか便利. |
| !-n (nは数字) | 現在より n行前のコマンド行.&br;同じく便利. |
| !文字列 | コマンド履歴リスト中,指定文字列が先頭にあるコマンド行で最も最近のもの.&br;とても便利だ. 是非とも使いこなそう.|
| !?文字列? | コマンド履歴リスト中,指定文字列が含まれるコマンド行で最も最近のもの &br; 便利なのだが,(人間が) 勘違いして違う行を呼び出してしまうことがあるので,使うときは注意をするべし.|
| ↑,↓, ^n, ^p など | コマンド履歴リストを直接コマンドラインに表示して利用.&br;無意識に使っている人も多い.|
&ref(/materials/notes.png); 上に出てきたシェルの機能,コマンド等を一つ一つ確かめてみよ. 良く分からない概念などがたぶんあるだろうから,そうした際は教官や TA に遠慮無く聞くこと.
* Report: レポート [#d4c57b4d]
以下の課題について,あたうかぎり賢明な調査と考察を行い,
&br;
''AppliedMath7-Report-01''
&br;
という題名をつけて e-mail にて教官宛にレポートとして提出せよ. なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.
+ ''(j)man␣-a'' の意味を調べよ.
+ ''cal'' を用いて,10年後の自分の誕生日が何曜日か調べよ.
+ ''ls'' のオプションを調べ,自分で最もよい設定を探し,どう良いのか等を記述せよ. また,alias を用いて ''ls''と打つだけでそのオプションが働くようにしてみよ.
+ コマンドライン編集に使えるキーを調べよ. (左へ行くキー,右へ行くキー,一文字削除キー,行の後ろまで削除するキー,行の先頭に行くキー,行の最後に行くキー等々…)
+ 上に記した「以外の」便利なシェルの機能がないか,調べて報告せよ.&br;# web 等で調べれば数多く見つかるだろう.
+ bash, tcsh, zsh の違いを書籍ないしは web 等の資料をもとに調べよ.さらに,各々のシェルを実際に使ってみて,その違いを体験して,自分なりの感想を記せ.
&br;&br;
&br;&br;
* about Icons, ClipArts [#z03a4807]
For details, see [[&ref(/materials/JNorth_arrow-right-sm.png); this>materials]].
// ━┃┏┓┛┗┣┳┫┻╋
// コマンドライン入力は「行頭を > で始める」.
// コマンドライン出力は「行頭をブランクで始める」.
// 実習アイコン
// &ref(/materials/notes.png);
// 注意アイコン
// &ref(/materials/warning.png);
// Link アイコン
// &ref(/materials/JNorth_arrow-right-sm.png);
// OK アイコン
// &ref(/materials/OK.png);
// NG アイコン
// &ref(/materials/NG.png);
// サンプルアイコン
// &ref(/materials/Gnome-Preferences.png);
// 大文字での強調
// CENTER:&size(24){''ほげほげ''};
// programu source 表記
// #highlighter(language=ruby,number=on,cache=on){{}}
// パイプ
// ¦