このLinuxコマンドの意味を理解するのに問題があります。
du -sk * | sort -rn | head
duがディスク使用量を表示するために使用されていることはわかっていますが、残りのコマンドを理解するのが困難です。誰かがここで正確に何が起こっているのかを説明できますか?複雑なLinuxコマンドの詳細な研究に役立つリソースを提案できますか?
ベストアンサー1
a | b | c
を実行しa
、同時に別のプロセスで実行されます。ここで、あるコマンドの標準出力は、次のコマンドの標準入力にパイプされます。b
c
これは、.a
シェルによって現在のディレクトリにある隠れていないファイルの名前に拡張されます(隠されていないファイルがない場合、コマンドはエラーで中断されるか、シェルによってリテラルに拡張されます)。du -sk *
*
*
ここでファイル名がで始まる場合、-
そのファイルはオプションと見なされるため、du
正しい構文は次のとおりです。du -sk -- *
つまり、--
それ以降のファイルはオプションとは見なされません。
-k
ディスク使用量をキロバイト単位で取得します(1024バイト、du
標準実装ではデフォルトは512バイト)。-s
ファイルごとのディスク使用量の要約(該当するタイプの場合)。目次、すべてのサブディレクトリの詳細を提供するわけではありません)。
したがって、現在のディレクトリに隠されていないすべてのファイルのディスク使用量(ディレクトリタイプの累積)を印刷し、同じ行にキロバイト数を表示してからファイル名を表示します(ただし、ファイル名はより多くのファイルで構成される可能性があります) 。 1行以上)。
多くのdu
実装では、一部のパラメータが同じファイル(ハードリンク)を参照する場合、または同じファイルが複数のディレクトリにある場合は、最初のディスク使用量のみが出力から考慮されます。
sort -rn
sort
はいワイヤー入力番号がn
逆でr
あるため、すべてのファイル名に改行文字が含まれていないと仮定して、ファイル/ディレクトリを最大から最小まで(ディスク使用量に応じて)ソートします。
head
(の略head -n 10
)は、出力の最初の10行を除くすべての行を破棄しますsort
。
これらのユーティリティのGNU実装のより正確なバージョンは次のとおりです。
du -skl0 ./* | sort -zk1,1rn | head -z | tr '\0' '\n'
すべてのハードリンクを強制的-l
に検討してください。-0
/-z
出力/プロセスレコードはNULで区切られているため、改行文字を含むファイル名でうまく機能します。プレフィックスは、改行文字を含むファイル名の./
場合、出力内の各ファイル名が始まる場所を示すことができます。-
)で始まるファイル名に関する問題を回避する。関係(同じディスク使用量を持つ2つのファイル)が語彙の逆順で関係をソートしないときに動作を変更するsort -k1,1rn
代わりに使用します。sort -rn
1 GNUの場合、du
デフォルトはキロバイトですが、、、、などの環境変数で上書きできますPOSIXLY_CORRECT
。DU_BLOCK_SIZE
BLOCK_SIZE
BLOCKSIZE