ディレクトリ /etc に存在する全ファイルの詳細情報を調べましょう。
ls -la /etc/etc にはファイルがたくさんあるので,画面にすべてを表示しきれませんね。 どうしたらいいでしょう。
一つの解決策として,
>
) を使って
ls -la /etc > etcfilesを実行します。シェルの入力支援機能を積極的に利用して,タイプの手 間をできるだけ省いてください15。
more etcfilesを実行してみてください。more の操作方法は,man コマンドに よるマニュアルページの閲覧方法と同じです 。だって,man は内部的に more を呼び出して,マニュア ルを表示しているのですから。
more < etcfilesを実行してください。
<
の有無に拘らず実行結果は同じ
ですが,more の内部的な動作は異なります。more は引数にファ
イル名が与えられれば,そのファイルを直接読み込みます。一方,
引数を与えずに <
に続いてファイル名を指定すると,標
準入力からファイルを読み込みます(標準入力のリダイレクト)。
なお,more は処理結果を標準出力に出力しますが,その先につ ながっているのは,これまでと同様に通常は画面です。![]()
rm etcfiles
|
)」で区切っ
て記述することによって行います。パイプによって連結された一連のコマンドを
パイプライン (pipeline) と言います。
なお,csh や tcsh において,コマンドの標準出力と標準エラー出力の両方を次
のコマンドの標準入力に連結するには |
の代わりに |&
を使い
ます。
では,/etc に存在する全ファイルの詳細情報を,パイプを使って一度に表示し
て閲覧してみましょう。
ls -la /etc | more
この状況を示したものが次の図です。図では ls の引数 (-la /etc) の記述は
省略しています。
動作の概要は以下のとおりです。![]()
ls の標準出力をパイプによって more の標準入力に連結しているので, ls の実行結果は画面には出力されません。
command1のような多段のパイプが可能です。この場合,command1 の出力が command2 の標準出力を通って処理され,さらに command3 で処理されま す。|
command2|
command3
なお,これまでと同様に,各コマンドに引数を与えてパイプすることも可能です。![]()
これまでに紹介したコマンドでは
cat, grep, head, sort, tail, tr, uniq, wcはフィルタです。各コマンドの動作を忘れていたら,マニュアルページ等で 確認してください。
うまくいったら,ここで作成したファイルは削除しましょう。
grep は,引数で与えた文字列パターンを含む行のみを抽出して,標準出 力に出力するコマンドです。
grep pattern file...の書式で実行すると,grep はfile... から patten を含む 行のみを抽出しますが,file... を省略すると,標準入力から入 力を読み込みますので,フィルタとして利用できます。
この問題をリダイレクトを使って解くには,例えば
を実行します。ls -l > temp
grep Dec temp
またはgrep Dec < temp
rm temp
さて,パイプを使って上記に相当する操作を行ってください。
cat -n
file... または cat -n <
file... とします。
第 4.4 節で作成したファイル campus と CAMPUS を 同時に cat の引数に与えて実行してみてから,それを行番号付きの表示 にしましょう。さらにその表示を最初の 5 行分のみにしましょう。head コマンドも使います。
同じ計算機を使っているユーザーを,辞書順に並べて表示しましょう。
さらに,その結果に行番号を付けて出力しましょう。引数にファイル名 を指定せずに cat コマンドを使うと,cat は標準入力から入力を読み込 みます。
利用者が自分一人のときだけ上手くいってもだめですよ。 who am i もなしです。