GNU/Linux >> Linux の 問題 >  >> Linux

ls -l の後の最初の行の合計は?

その行の定義は ls にあります プラットフォームのドキュメント。 coreutils の場合 ls (多くの Linux システムで見られるもの)、情報は info coreutils ls 経由で見つけることができます :

<ブロック引用>

リストされているディレクトリごとに、ファイルの前に「total BLOCKS」という行を付けます。ここで、BLOCKS は、そのディレクトリ内のすべてのファイルの合計ディスク割り当てです。


フォーミュラ:それとは 数?

<ブロック引用>

合計 int =(physical_blocks_in_use) * physical_block_size/ls_block_size) の合計

場所:

  • ls_block_size 任意の環境変数です (通常は 512 または 1024 バイト) --block-size=<int> で自由に変更可能 ls のフラグ 、 POSIXLY_CORRECT=1 GNUenvironment 変数 (512 バイト単位を取得するため)、または -k 1kB ユニットを強制するフラグ
  • physical_block_size 内部ブロック インターフェイスの OS 依存値であり、基盤となるハードウェアに接続されている場合と接続されていない場合があります。この値は通常 512b または 1k ですが、OS に完全に依存します。 %B で明らかになります stat の値 または fstat . この値は (ほとんどの場合) modern の物理ブロック数とは無関係であることに注意してください。 ストレージ デバイス。

どうしてそんなに混乱するの?

この数値は、物理的または意味のあるメトリックからかなり切り離されています。多くのジュニア プログラマーは、ファイル ホールやハード/シンボリック リンクの経験がありません。さらに、この特定のトピックに関するドキュメントは事実上存在しません。

「ブロック サイズ」という用語のまとまりのなさとあいまいさ さまざまな手段が混同されやすく、ディスク アクセスを中心に比較的深いレベルの抽象化が行われた結果です。

矛盾する情報の例:du (または ls -s ) vs 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 を実行した場合 同じファイルで報告された数値を合計すると、同じ数値が得られます。


Linux
  1. ファイルの最初の行の前にテキストを挿入する方法は?

  2. 最初の一致後に検索コマンドを停止する方法は?

  3. Bashは最初の行を上書きします、Ps1 Bashプロンプト?

  1. C hello world のアセンブリ出力の各行の意味は何ですか?

  2. Linux コマンド出力の最初の行を省略する

  3. grepさ​​れた行の後にn行目を取得する方法は?

  1. Ctrl-Alt-F1 の後に GUI に戻るコマンド ライン?

  2. ユーザーがログインした後にメッセージを bash シェルに表示するには、どのような方法がありますか?

  3. 逆引き DNS コマンド ライン ユーティリティとは何ですか?