このパイプラインを解釈するには:
cat /etc/passwd | cut -d : -f 9 2>&1 | sort | uniq 2>&1 | wc -l
私はUnixを自分で教えていますが、それはよく理解していません。ここでは何を意味しますかcut -d : -f 7 2>&1
?
答え1
cut -d : -f 9 2>&1
これは、より大きな文脈でパイプラインの一部である独立したUnixスタイルのコマンドです。コマンド全体で「|」文字でこれがわかります。
Unixスタイルのコマンドラインは左から右に読みます。実際の実行可能ファイル(またはエイリアス)はですcut
。引数はcut
"-d:-f 9" で、コマンド全体の stderr 出力は "2>&1" を介して stdout にリダイレクトされます。
UnixまたはLinuxのコマンドラインユーザーに必要な技術の1つは、コマンドとその構文を見つける方法です。したがってman cut
。これは、コマンドを呼び出す方法の簡単なマニュアル「manページ」を提供します。標準入力(コマンド全体からパイプとして提供cut
)への入力を受け取ります。cat
入力は文字で区切られた列として扱われ、レコードには行であるレコードごとにいくつかの数値が含まれます。各行の特定の列を「切り取り」、その列(文字列のみ)を標準出力に配置してsort
例に提供します。
Unixスタイルのコマンドは、コマンドラインの特定の部分を表示するために(常にそうではない)「-」文字または「--」文字列を使用します。 '-d' は、次の文字を列区切り文字として使用することを意味します (例: ":"、コロン)。 '-f' は、入力行から列 9 を削除し、文字列を標準出力に出力することを意味します。
リダイレクトフレーズを出力するシェルは、パイプライン全体を2>&1
設定し、エラーメッセージ(通常はファイルディスクリプタ2に印刷されます)をファイルディスクリプタ1(stdoutとも呼ばれます)と同じ場所、つまりsort
。
全体として、パイプラインは共通のタスクを実行します。つまり、ファイル内の一意の文字列数を計算します。cat /etc/passwd
"/ etc / passwd"ファイル(ユーザーID属性を定義する有名なUnix / Linux / * BSDファイル)の内容を標準出力に配置します。
cut
私のシステムに存在しない列9を削除しました。 「ユーザーID」の数値形式だとしましょう。ユーザーID(またはその他)の文字列表現が入っており、sort
オプションはありません。sort
この場合、入力行は語彙的に並べ替えられますが、重複または一意のユーザーIDに従うため、これは重要ではありません。
sort
フラグなしで出力をに送信しますuniq
。標準入力に入力された各行を監視します。uniq
その行が前の行と語彙的に等しい場合は何もしません。そうでない場合はその行を印刷します。入力はアルファベット順に並べられるため、一意の行のみがuniq
印刷されます。重複した内容は印刷されません。
wc
入力を受け取りましたuniq
。 "-l"フラグを使用すると、受信したwc
行数のみが印刷されます。つまり、ユーザーID(または/ etc / passwdの列9の値)の固有値の数です。
マイナーモードのみを使用すると、このパイプラインで重複したユーザーID(または何でも)を計算できます。uniq -c
一意の行を印刷するだけでなく、連続した行の数も印刷します。これをパイプで連結することで、awk '{if ($2 > 1) {print $0}}
数が1より大きい行(つまり、重複行)のみを取得できます。wc -l
重複した行のみが計算されます。