| 無料ホームページスペース無料メールアドレスをご提供します。 KANSAI WEBサービス会員規約 |
| コンピュータ/通信総合サイト・広島の関西商事 管理人:大内 雅司 |
リダイレクトとパイプについて「標準入力とコマンドの結合」
| このセッションのポイント |
| @コマンドは、通常キーボードから入力を受取り、画面へ出力する。これを「標準入力」と「標準出力」と呼ぶ。 Aリダイレクトをつかうと、「標準入力」をファイルに、「標準出力」をファイルに、それぞれ変更することができる。 Bパイプにより「標準出力」と「標準入力」を結ぶと、複数のコマンドの実行を連結できる。 |
★標準入力と標準出力
コマンドを実行するときには「標準入力」(通常はキーボード)から入力され、その結果は「標準出力」(通常は画面)に出力されます。
また、コマンドを実行した場合のエラー表示も画面に出力されます。その画面の出力結果、あるいはエラーをファイルに保存したい場合には、「リダイレクト」という方法を使用します。
また、コマンドの出力を違うコマンドの入力に使用したい場合は「パイプ」という方法を使用します。
★リダイレクト
コマンドの実行結果の出力エラーは、ともに画面に表示されます。しかしコマンドを表示した結果たエラー表示を、ファイルに保存したいことがあると思います。
この操作は、「リダイレクト」という機能を用いて現実することができます。具体的には、標準の出力先を画面からファイルに変更するという操作を行います。
■標準出力の保存
例えば、「ls」コマンドで、/(ルート)ディレクトリ直下のディレクトリ一覧を詳細表示させる場合は、以下のように実行します。
| [user01@linux ~]$ ls -l / 合計 138 drwxr-xr-x 2 root root 4096 6月13 11:08 bin drwxr-xr-x 4 root root 1024 6月13 11:08 boot drwxr-xr-x 9 root root 5040 6月13 11:08 dev drwxr-xr-x 77 root root 12288 6月13 11:08 etc drwxr-xr-x 3 root root 4096 6月13 11:08 home drwxr-xr-x 11 root root 4096 6月13 11:08 lib drwxr-xr-x 2 root root 16384 6月13 11:08 lost+found drwxr-xr-x 4 root root 4096 6月13 11:08 media drwxr-xr-x 2 root root 0 6月13 11:08 misc drwxr-xr-x 2 root root 4096 6月13 11:08 mnt drwxr-xr-x 2 root root 0 6月13 11:08 net drwxr-xr-x 2 root root 4096 6月13 11:08 opt drwxr-xr-x 82 root root 0 6月13 11:08 proc drwxr-xr-x 12 root root 4096 6月13 11:08 root drwxr-xr-x 2 root root 4096 6月13 11:08 sbin drwxr-xr-x 2 root root 4096 6月13 11:08 selinux drwxr-xr-x 2 root root 4096 6月13 11:08 srv drwxr-xr-x 10 root root 0 6月13 11:08 sys drwxr-xr-x 8 root root 4096 6月13 11:08 tmp drwxr-xr-x 14 root root 4096 6月13 11:08 usr drwxr-xr-x 21 root root 4096 6月13 11:08 var |
では、この表示をファイルに保存してみます。以下では「標準出力」に表示されるはずの実行結果の出力先を変更し、「lsfile」ファイルに「リダイレクト」しています。
そのため、画面には何も表示されずに、次のプロンプトが返されます。
| [user01@linux ~]$ ls -l / > lsfile [enter] |
「cat」コマンドで「lsfile」の内容を確認すると、「ls」コマンドの実行結果記述されていることが分かります。
| [user01@linux ~]$ cat lsfile [enter] |
今回は「ls」コマンドを対象にしましたが、結果が画面に出力されるものは、すべて「リダイレクト」でファイルに収めることができます。
ただし、エラー表示は”>”だけでは「リダイレクト」できません。
以下のように実行したあと、「cat」コマンドで「errfile」を確認してみましょう。
| [user01@linux ~]$ ls /root > errfile [enter] ls: /root: 許可がありません [user01@linux ~]$ cat errfile [enter] [user01@linux ~]$ |
■標準エラー出力の保存
画面に表示されるものは、「標準出力」と「標準エラー出力」に分類されます。”>”は、「標準出力」だけをリダイレクトする昨日を持っていました。では、「標準出力エラー」を保存したい場合は、どうすればよいのでしょうか?
「標準出力エラー」を保存するには、”2>”を使用します。以下のようにすれば、画面へエラーが表示されません。
| [user01@linux ~]$ ls /root 2> errfile
[enter] [user01@linux ~]$ |
エラー内容は「errfile」に保存されています。確認してみて下さい。
| [user01@linux ~]$ cat errfile [enter] ls: /root: 許可がありません [user01@linux ~]$ |
※「標準出力」「標準エラー出力」の両方を同じファイルにリダイレクトするには、”&>”を使用してください。
★パイプ
パイプは、あるコマンドの「標準出力」を別のコマンドの「標準入力」に使用するための機能です。概念的には複雑ですが、よく使用される例を挙げて説明しますので、使用方法をマスターしてください。
■標準入力
多くのコマンドは、ファイルを引数にとって実行します。しかし引数にファイル指定をしなかった場合、標準入力(通常はキーボードからの入力)をコマンドの実行対象とするコマンドが、多く存在します。例えば、「cat」コマンドを引数なしで実行してみましょう。次のプロンプトが返ってこない状態になります。
| [user01@linux ~]$ cat [enter] |
ここで”Hello”と入力し、「Eneter」キーを押してください。入力した”Hello”を「cat」コマンドが読み取って出力します。入力した文字列が、あるファイルに記述されているときのようなどうさをします。
| [user01@linux ~]$ cat [enter] Hello [enter] Hello |
※「cat」コマンドを終了するためには、Ctrl-dキーを入力します。
■パイプの使用例1:「less」コマンドとの組合せ
コマンドの実行結果が画面サイズより大きい場合、先頭の方の記述はスクロールされて消えてしまいます。
例えば、”/etc”ディレクトリにあるファイルを詳細表示してみます。
| [user01@linux ~]$ ls -l /etc [enter] |
そういうときには、パイプと「less」コマンドを使用しましょう。具体的には、以下のように実行します。
「ls」コマンドの「標準出力」を「less」コマンドの「標準入力」に渡すことによって、長い出力をスクロールアウトせず、すべて閲覧することができるようになります。
| [user01@linux ~]$ ls -l /etc | less [enter] |
■パイプの使用例2:「grep」コマンドとの組合せ
ファイルの内容から、ある文字列を含む行だけを抜き出すのが、「grepコマンド」です。
第1引数に検索したい文字列、第2引数に対象のファイルを指定します。
ネットワーク情報が記載されている、”/etc/sysconfig/network-scripts/ifcfg-eth0”というファイルで試してみます。
まずは、「cat」コマンドでファイル内容を確認してみて下さい。
| [user01@linux ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
[enter] DEVICE=eth0 BOOTPROTP=static BROADCADT=192.168.0.255 HWADDR=00:AA:BB:CC:DD:EE IPADDR=192.168.0.12 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes TYPE=Ethernet |
この中から、IPアドレスを設定している行を抜き出しましょう。IPアドレスを設定している行は、”IP"という文字列を含みます。
そのため、「grep」を以下のように実行します。
| [user01@linux ~]$ grep IP /etc/sysconfig/network-scripts/ifcfg-eth0
[enter] IPADDR=192.168.0.12 |
この「grep」コマンドも、よくパイプとともに使用されます。前のコマンドの「標準出力」の結果から、ある文字列を含む行だけを抜き出して表示します。
以下のように実行すれば、”ls -l /etc”によって出力されるものから、ファイル名に”conf”を含む行だけを抜き出して表示します。
| [user01@linux ~]$ ls -l /etc | grep conf [enter] |
もし、実行結果が画面サイズより大きければ、さらに「パイプ」で「less」コマンドに渡しましょう。
| [user01@linux ~]$ ls -l /etc | grep conf | less [enter] |
| copy right kansai-syoji,.co all right reserved Web-Master masashi ouchi http://kansai.homelinux.com/~Linux |