回答:
その行の定義はls
、プラットフォームのドキュメントに記載されています。coreutils
ls
(Linuxシステムの多くに見られるもの)、情報を経由して見つけることができますinfo coreutils ls
。
リストされているディレクトリごとに、ファイルの前に「total BLOCKS」という行を付けます。BLOCKSは、そのディレクトリ内のすべてのファイルの合計ディスク割り当てです。
info
coreutilsに関するドキュメントは、manページよりも詳細であることがよくあります。そのため、各manページの最後に、詳細についてはinfoセクションを参照するよう注意書きを付けています。
info ls
と、と同じ出力が得られinfo coreutils ls
ます。議論coreutils
は何をしますか?
合計int = 各ファイルの(physical_blocks_in_use)* physical_block_size / ls_block_size)の合計。
どこ:
ls_block_size
ある任意の環境変数と自由に変更可能である(通常は512または1024バイト)--block-size=<int>
上のフラグls
、POSIXLY_CORRECT=1
(512バイト単位を取得する)GNU環境変数、または-k
フラグが1kBの単位を強制します。physical_block_size
内部ブロックインターフェイスのOS依存の値であり、基盤となるハードウェアに接続されている場合とされていない場合があります。この値は通常512bまたは1kですが、OSに完全に依存しています。またはの%B
値で明らかにできます。 この値は(ほとんどの場合)最新のストレージデバイス上の物理ブロックの数とは無関係であることに注意してください。stat
fstat
この数値は、物理的または意味のあるメトリックからかなり切り離されています。多くのジュニアプログラマーは、ファイルホールやハード/シンボリックリンクの経験がありません。さらに、この特定のトピックで利用できるドキュメントは事実上存在しません。
「ブロックサイズ」という用語のばらばらさとあいまいさは、多数の異なる測定値が簡単に混同され、ディスクアクセスを中心に展開する比較的深いレベルの抽象化の結果です。
du
またはls -s
)とstat
du *
プロジェクトフォルダで実行すると、次のようになります(注:ls -s
同じ結果が返されます)。
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
合計:2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62ブロック
しかし、実行stat
すると、異なる値のセットが表示されます。stat
同じディレクトリで実行すると、次のようになります。
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
合計: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118ブロック
注:上記のように、コマンド
stat * --printf="%b\t(%B)\t%n: %s bytes\n"
>を使用して、ブロックの数、(括弧内の)ブロックのサイズ、ファイルの名前、およびバイト単位のサイズを(順番に)出力できます。
重要なポイントが2つあります。
stat
上記の式で使用されるphysical_blocks_in_use
との両方を報告しphysical_block_size
ます。これらはOSインターフェースに基づく値であることに注意してください。du
物理ディスク使用率のかなり正確な見積もりとして一般に受け入れられているものを提供しています。参考までに、ls -l
上記のディレクトリは次のとおりです。
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
これは、リストされたファイルによって使用される、間接ブロックを含むファイルシステムブロックの総数です。ls -s
同じファイルで実行し、報告された数を合計すると、同じ数になります。
/bin/ls -s
-> total 15 2 filename 3 filename2 3 filename3 3 filename4 2 filename5 2 filename6 2 filename8 2 filename9
ちょうど言及-あなたは-h(ls -lh)を使用してこれを人間が読める形式に変換できます。
man ls
、私のシステムではその行に言及していませんが、言及してinfo coreutils ls
います。どのように来るman ls
とは、info coreutils ls
同じコマンドに関するさまざまな情報がありますか?なぜls
一度だけ文書化されていないのですか?同じコマンドに対して2つの異なるドキュメントがあると、失敗するように設定されているように見えます。