linuxコマンドをいくつか覚えたあとは
パイプとリダイレクトというテクニックを知るとできることが広がります。
いまいちなじみのないこれらのテクニックを紹介します。
パイプ
command1 | command2
のようにシェルコマンドの間にある縦棒のことをパイプといいます。
テキスト上だとコマンドを真っ二つにしているようですが、
パイプ(水道管みたいなもの)の名の通り、
command1
の出力がパイプを通してcommand2
の入力として実行します。
例1
ls -l | grep rw-r--r--
カレントディレクトリの中でrw-r--r--(権限644)のものだけ出力します。
例2
cat error_20180402.log | grep ERROR
error.logファイルの中でERRORの文字がある行だけ出力する。
例3
ps | grep ERROR
実行中プロセスの中でhoge.pyの状況を調べる。
pidを調べてkillしたり、メモリやCPUの使用状況を見てパフォーマンスチェックしたりします。
このように情報の一覧を表示して、その中で特定の状況を絞ることができます。
もちろんA | B | C のようにどんどんパイプでつなげることもできるので
少しずつ応用できるように「このコマンドとこのコマンド使ってこんなことできないかな?」と考えてみるといいでしょう。
リダイレクト
リダイレクトは方向を変えるという意味です。
例えば
echo hello
すると画面にhelloが出力されます。
画面のことを標準出力といい、この標準出力に向いている出力を
echo hello >> hoge.txt
とすると、
hoge.txt
ファイルにリダイレクト(方向を変えます)します。
なので画面にはhelloが表示されず、代わりにhoge.txtにhelloが書き込まれます。
リダイレクトを本来この形
echo hello A >> B
でAからBに向きを変えることです。
echo hello 1>>hoge.txt
と打ってみてください。
さきほどと同じようにhoge.txtにhelloが書き込まれていますね。
これは1が標準出力という意味で、
echo hello >hoge.txt
だと リダイレクトの左部分、つまりリダイレクトするものがなさそうに見えますが、
左の部分がないときは標準出力がリダイレクト対象としてデフォルトで選ばれます。
そのため、
echo hello 1>hoge.txt
と同じ結果となるのです。
ちなみにエラー出力は2が割り振られており、
ls -bze 2> hoge.txt
とすると、エラーの内容をhoge.txtに出力することができます。
ちなみに>
は上書き、>>
は追記になりますので気をつけましょう。