| ヒストリの例 | alias の例 | リダイレクションの例 | パイプラインの例 | メタキャラクタの例 | シェルスクリプトの例 |
例1:historyコマンドにより直前に実行した80個のコマンドを表示
cc2000(81)% history
2 14:10 a./a.out
3 14:10 ./a.out
4 14:11 emacs cal5.c
5 14:15 gcc cal5.c
6 14:15 ./a.out
7 14:16 emacs cal5.c
8 14:18 gcc cal5.c
・
・ 途中省略
・
76 15:11 ls
77 15:11 cat meta
78 15:12 lpr -Pccpr02 meta
79 15:12 ls
80 15:12 lpr -Pccpr02 meta
81 15:37 history
cc2000(83)%
例2:直前に実行した10個のコマンドを表示 cc2000(86)% history 10 77 15:35 pwd 78 15:35 man tcsh 79 15:35 emacs .cshrc 80 15:41 source .cshrc 81 10:35 who 82 10:35 cd public_html 83 10:35 ls 84 10:35 emacs index-j.html 85 10:43 mozilla & 86 10:45 history 10 cc2000(87)%
例3:例2のヒストリ番号によるコマンド再実行
cc2000(91)% !77 ← !77 でヒストリの77番目のコマンドを実行
pwd
/NF/home/kyoin0/kitagawa
cc2000(92)%
例4:例2のヒストリから特定の文字で始まるコマンドを再実行
cc2000(92)% !p ← !p で以前の p で始まるコマンドを実行
pwd
/NF/home/kyoin0/kitagawa/public_html
cc2000(93)%
例1:コマンドの略称を別名として定義する
cc2000(134)% alias h history ← これ以降、history コマンドを h という略称で呼び出し可能
例2:コマンドのオプションを常に利用するよう別名定義する(デフォルトオプションの設定) cc2000(135)% alias rm "rm -i" ← オプションを指定したい場合は、" で囲みます これ以降 rm は常に rm -i として解釈されます(ファイルを削除するか否かを確認します)
例3:別名定義の確認 (alias) cc2000(136)% alias ← 現在設定されている別名 (alias) を確認 eclipse /usr/local/java/eclipse/eclipse -data ~/eclipse/workspace & jlatex platex209 h history ← 上記例1で設定した別名 h ls (ls --color=auto) mule emacs rm (rm -i) ← 上記例2で設定した別名 rm script /NF/local/general/bin/script.sh timidity env LANG=C timidity which alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde cc2000(137)% ↑これら別名の h と rm 以外は元々システム側が最初から設定してあるもの
例4:別名定義の破棄 (unalias)
cc2000(137)% unalias h ← 別名定義 h を破棄(コマンド h が使えなくなる)
bcコマンドは、四則演算をキーボードから入力すると、計算結果をデイスプレイ に表示する機能を持っています(電卓のようなものです)。以下に bc コマンドの実行例を示します(下線部がキーボード入力する部分です)。
例:bcコマンドの実行 cc2000(54)% bc ← bcコマンドを実行する 1+2 3 2*3 6 4/2 2 quit ← bcコマンドの終了には quit を入力する cc2000(55)%
bc コマンドに対してリダイレクションを行うための準備として、上記の例で行った3つの演算(1+2, 2*3, 4/2)を3行のテキストファイルとして作成し、bc.in というファイル名で保存しておきます。ファイル作成は Emacs で行えばいいでしょう(他にも作成手段はあります)。ファイルが用意できたら、次のように cat コマンドか more / less 等でファイルの中身を確認しておきましょう。
cc2000(64)% cat bc.in ← 用意した bc.in を cat で画面表示 1+2 2*3 4/2 cc2000(65)%
bc コマンドを実行する際に、先に用意したテキストファイル bc.in をリダイレクションによってキーボード入力の代わりに使用します。
例:入力を扱うリダイレクション ( < ) の使用例 cc2000(65)% bc < bc.in ← bcコマンドにファイル bc.in の中身をリダイレクションで入力 3 6 2 ← この 3, 6, 2 というのが入力ファイルで記述した3つの演算に対する結果 cc2000(66)%
次に、bc を利用して計算を行った結果(標準出力に出力される)をリダイレクションによって、ファイルへ出力します。
例:出力を扱うリダイレクション ( > ) の使用例 cc2000(66)% bc > bc.out ← bc の計算結果(標準出力)を bc.out というファイルにリダイレクション 1+2 2*3 4/2 quit cc2000(67)% cat bc.out ← リダイレクションで作成されたファイル bc.out の中身を確認 3 6 2 cc2000(68)%
bc コマンドの例の最後として、標準入力、標準出力の両方のリダイレクションを扱う例を示します。
例:標準入力 (入力ファイル bc.in) と標準出力 (出力ファイル bc.out2) を両方扱う例 cc2000(68)% bc < bc.in > bc.out cc2000(69)% cat bc.out 3 6 2 cc2000(70)%
プログラミングの授業で出てくる九九の表の作成プログラム (b99.c) の実行結果をリダイレクションでファイルに保存する例を示します。
例:b99.c をコンパイルして、実行した結果をファイル kekka99 に保存する例 cc2000(92)% gcc b99.c cc2000(93)% ./a.out > kekka99 cc2000(94)% cat kekka99 1*1 = 1 1*2 = 2 1*3 = 3 1*4 = 4 1*5 = 5 1*6 = 6 1*7 = 7 1*8 = 8 1*9 = 9 2*1 = 2 2*2 = 4 2*3 = 6 2*4 = 8 2*5 =10 2*6 =12 2*7 =14 2*8 =16 2*9 =18 3*1 = 3 3*2 = 6 3*3 = 9 3*4 =12 3*5 =15 3*6 =18 3*7 =21 3*8 =24 3*9 =27 4*1 = 4 4*2 = 8 4*3 =12 4*4 =16 4*5 =20 4*6 =24 4*7 =28 4*8 =32 4*9 =36 5*1 = 5 5*2 =10 5*3 =15 5*4 =20 5*5 =25 5*6 =30 5*7 =35 5*8 =40 5*9 =45 6*1 = 6 6*2 =12 6*3 =18 6*4 =24 6*5 =30 6*6 =36 6*7 =42 6*8 =48 6*9 =54 7*1 = 7 7*2 =14 7*3 =21 7*4 =28 7*5 =35 7*6 =42 7*7 =49 7*8 =56 7*9 =63 8*1 = 8 8*2 =16 8*3 =24 8*4 =32 8*5 =40 8*6 =48 8*7 =56 8*8 =64 8*9 =72 9*1 = 9 9*2 =18 9*3 =27 9*4 =36 9*5 =45 9*6 =54 9*7 =63 9*8 =72 9*9 =81 cc2000(95)%
KSU の出力で(プログラム for2.c)、結果をファイル ksu_result に出力します。
cc2000(103)% gcc for2.c cc2000(104)% ./a.out > ksu_result ← ファイル ksu_result に出力するので画面には表示されない cc2000(105)% cat ksu_result ← ksu_resultの内容を見て結果が記録されていることを確認 KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU cc2000(106)%
リダイレクションで使用した bc コマンドの結果を昇順(小さい順)に並べ替える処理を扱います。まずは、パイプを使わずに、リダイレクションを使用して sort を実行する例を示します。
例:bcコマンドの結果をリダイレクションで sort コマンドに対して入力し昇順に並べ替える。 cc2000(70)% bc < bc.in > bc.out を実行後 cc2000(71)% sort -n < bc.out ←ソート(並べ替え)を実行 (オプション -n は小さい順に並べる) 2 3 6 cc2000(72)%
パイプラインを使うと、上記で実行した2つのコマンドを1行で書くことができます。
例:bcコマンドの結果をパイプで sort コマンドに渡してソート処理を行う
cc2000(72)% bc < bc.in | sort -n
2
3
6
cc2000(73)%
出力結果は上記のリダイレクションの例と同じですが、パイプラインを使うことで中間的に発生していたファイル(ここでは bc.out)が不要となります。途中結果を残す必要がない場合は、パイプを使うことで手間が省けます。
次に、ls コマンドで得られたファイルリストに対してソート処理 (sort コマンド) を行う例を示します。
例: ディレクトリ /NF のファイルリストをソートする(リダイレクションで実施) cc2000(73)% ls /NF ← /NFのファイルリストを表示 FTP Real WWW active admin common home local usr ← 結果はアルファベットの昇順に並んでいる cc2000(74)% ls /NF > NF.out ← 結果をリダイレクトで NF.out に出力 cc2000(75)% sort -r < NF.out ← sort の -r オプションは reverse(逆順)の意味 usr local home common admin active WWW Real FTP cc2000(76)%
この処理をパイプを用いて実行すると次のようになります。
例:ディレクトリ /NF のファイルリストをソートする(パイプで実施)
cc2000(76)% ls /NF | sort -r
usr
local
home
common
admin
active
WWW
Real
FTP
cc2000(77)%
数あるコマンドの中で、データを標準入力から得て標準出力に結果を表示する ようなコマンドを特にフィルタコマンドと呼んでいます。例えば more や sort などです。 こうしたコマンドを幾つかパイプでつないで使用すると、各コマンドが入力データを 少しずつ変化させて出力するフィルタの役割を果たしているように見えるでしょう。 more は長い出力を一画面ずつ一時停止して表示するフィルタ、sort は結果を並び 替えるフィルタ、というわけです。まだこの段階では余り大した機能の無いコマンド しか紹介していませんが、キーワードを含む行だけを通過させる grep コマンドや、 末尾から指定された行数だけ出力する tail コマンドなどを見れば、まさにフィルタ コマンドと呼ばれる理由がわかるでしょう。
例 cc2000(81)% ls a.out bin bin.c meta search search.c slen slen.c string string.c cc2000(82)% ls a* ← ファイル名が a で始まるものをリスト表示 a.out cc2000(83)% ls b*.* ← ファイル名が b で始まり、途中に . (ピリオド) があるものを表示 bin.c cc2000(84)% ls *.c ← ファイル名が .c で終わるものを表示 bin.c search.c slen.c string.c cc2000(85)% ls ??? ← ファイル名が3文字のものを表示 bin cc2000(86)%
コマンドファイルというのは、一連のコマンドを書き込んだファイルであり、それを呼び出すと一連の操作を、キーボードから入力するかわりに、ファイルから順次読み出して実行してくれるものである。コマンドファイルの実行はtcshコマンドで行う。
簡単なコマンドファイルの作成と実行例
cc2000(113)% echo 'date; pwd' > mycom cc2000(114)% cat mycom date; pwd cc2000(115)% tcsh mycom 2004年 9月 16日 木曜日 15:31:12 JST /NF/home/kyoin0/kitagawa cc2000(116)%
コマンドファイルを実行可能にするために、
書式: chmod +x コマンドファイル名
とすると、コマンドファイル名がコマンド名となる。
例 %chmod +x mycom %mycom 2004年 9月 16日 木曜日 15:31:12 JST /NF/home/kyoin0/kitagawa