ワンライナーとは
複数のコマンドを &&
や ||
で繋げて複雑なコマンドを実行する一行で書かれるものをさす。
ファイルディスクリプタとは
わいもよくわからない。
for i in $(ps aux | grep "[u]nicorn" | awk '{print $2}'); do ls /proc/$i/fd | wc -l; done
ps aux
現在生きているプロセスを表示する。
grep
引数に文字列をとって、その文字列に合致する行を抽出する。
awk
「awk 'パターン {アクション}' ファイル名」で対象のファイルでパターンに合致したものをアクションする。
標準出力する。
$2
2番目の引数をとる、という説明がされがち?だが、本当の意味は"スペース区切り"で2番目の値をとる。
wc
カウントする。
オプションによって行数、単語数、バイト数などをカウントできる。
このワンライナーでunicornというプロセス名を持つPID(プロセスのID)をあるだけとってきてファイルディスクリプタがいくつあるかをカウントする、という意味になる。
もっと言うと、現在生きているプロセスを表示し、そのなかでunicornというプロセス名のプロセスの2番目の値(これがPID)を全て抽出し、/proc/$PID/fdの部分に入れてディレクトリ表示し、その行数をカウントする、みたいな意味。