<5>
シェルを使ってみる
(3)コマンド履歴 の再利用 | 矢印キー | |
補完 | TAB |
GUI と CUIをつなぐ:
mousepad &
stdin | stdout | |||
一般的なコマンドは | 標準入力 | →□→ | 標準出力 ↓ | として動作する(右図) |
特に指定ないときは | ↑キー入力 | 画面に表示 | という動作をする |
(他に、エラー出力(stderr)、という出力先もあるがここでは無視しておいていい)
標準入力からの入力を伴うプログラムを、上記のように標準的な方法で (リダイレクトせずに)起動した場合、
リダイレクト:
コマンド > ファイル 標準出力がファイルに書き込まれる
コマンド < ファイル 標準入力としてファイルの中身が送りこまれる
ps > aaa
cat aaa
パイプ:
コマンド1 | コマンド2 コマンド1の標準出力の内容が(ファイルを経由せず)、
コマンド2の標準入力として送りこまれる
パイプは
コマンド1 | コマンド2 | コマンド3 | コマンド4
のように 連鎖的に使える
(これを パイプラインとも呼ぶ)
なお、ここでパイプを表す(コマンドとコマンドを区切る)文字として、「たて棒」と呼ばれる記号が使われている
|
は、プログラミング等では「または」を表す演算子としても使われることが多い。||
の形で使われた場合は、「または」を意味する記号になる(1つの時と意味が変わってくるのでご注意)。 -
単なるオウム返しのプログラムをまず使ってみる
cat
コマンドを起動すると(プロンプトに戻らず)待ち状態になるが、
これは、標準入力(に自動的に割り当てられた、端末)からの入力を待っている状態
なので、ここで適当にキーボードをたたき、適宜 Enterを押してみよう
この状態は、放っておくと延々と続く。
終了させるためには、前述の EOFを送信する操作を行う。すなわち、
行の先頭で Ctrl-D を叩く
なお、同じような動作をするコマンドとして rev, tac などもある。
まず 手入力したテキストの行数を数えさせてみる。
wc
次に コマンド出力の行数をかぞえさせてみる
ps x| wc # wc ← Word Count
# ps ← Process Status
# ちなみに cat ← conCATenate (鎖状につなぐ)
裸の ps コマンドだと bash + ps の2つのプロセスがカウントされるが、
なお、wcコマンドの名前は、もちろんトイレ(WC)とは無関係。 名前の由来については、(あえてここには書かないが)例えば 「wc コマンド 名前 由来」などの検索で確認下さい (この先に紹介する各コマンドについても同様です)。
ps x | less # など
less という名前の語源
ページャとして more less pager lv などがある
とりあえず重要なキー操作を覚えておこう
SPC(スペース) | 前進 |
q | 終了=quit |
b | ページ分後退=back |
などのページャーコマンド(1文字 即座に応答する)を覚えておくといい
(ニーモニックとして命名されているものが多い)
注1)
注2)
man というコマンドを活用できる。
man コマンド名
など
#
もし日本語で表示されなければ パッケージ
manpages-ja を入れる(インストールする)といい
apt install manpages-ja (コマンドとして実行)
# または synaptics, aptitude, apt-get でも入れられる
Unixがこの「シェル」と共に世に現れた(もう50年も前の話だが)以前は、
つまり、プログラム1つを動かすために数多くの手間が必要だったが、
シェルの出現によって、それがコマンド1つで可能になり、さらに、
入出力の指定も上記のリダイレクトで簡便に出来るようになった(コンピュータの使い方としては一種の革命だったと言える)。