Linuxでファイルまたはディレクトリのサイズを取得する方法

Linuxduコマンドを使用すると、実際のディスク使用量とファイルまたはディレクトリの実際のサイズの両方を取得できます。これらの値が同じでない理由を説明します。

実際のディスク使用量と実際のサイズ

ファイルのサイズとハードドライブ上でファイルが占めるスペースが同じになることはめったにありません。ディスク容量はブロック単位で割り当てられます。ファイルがブロックよりも小さい場合でも、ファイルシステムには使用する領域の単位が小さいため、ブロック全体が割り当てられます。

ファイルのサイズがブロックの正確な倍数でない限り、ハードドライブで使用するスペースは、常に次のブロック全体に切り上げる必要があります。たとえば、ファイルが2ブロックより大きく、3ブロックより小さい場合でも、ファイルを保存するには3ブロックのスペースが必要です。

ファイルサイズに関連して2つの測定値が使用されます。1つ目は、ファイルの実際のサイズです。これは、ファイルを構成するコンテンツのバイト数です。2つ目は、ハードディスク上のファイルの有効サイズです。これは、そのファイルを保存するために必要なファイルシステムブロックの数です。

簡単な例を見てみましょう。1つの文字をファイルにリダイレクトして、小さなファイルを作成します。

エコー「1」> geek.txt

ここで、長い形式のリストを使用 lsして、ファイルの長さを確認します。

ls -l geek.txt

長さは、dave dave  エントリに続く数値であり、2バイトです。ファイルに1文字しか送信しないのに、なぜ2バイトなのですか?ファイル内で何が起こっているかを見てみましょう。

このhexdumpコマンドを使用すると、正確なバイトカウントが得られ、印刷されない文字を16進値として「見る」ことができます。また、-C(正規の)オプションを使用して、出力の本文に16進値と、それに相当する英数字を表示するように強制します。

hexdump -C geek.txt

出力は、ファイルのオフセット00000000から始まり、16進値31を含むバイトと、16進値0Aを含むバイトがあることを示しています。出力の右側の部分は、可能な限り、これらの値を英数字として示しています。

31の16進値は、1桁を表すために使用されます。16進値の0Aは、改行文字を表すために使用されます。改行文字は英数字として表示できないため、代わりにピリオド(。)として表示されます。改行文字はによって追加されechoます。デフォルトで echoは、ターミナルウィンドウに書き込む必要のあるテキストが表示された後、新しい行を開始します。

これは、からの出力 ls と一致し、2バイトのファイル長と一致します。

関連:Linuxでlsコマンドを使用してファイルとディレクトリを一覧表示する方法

次に、duコマンドを使用してファイルサイズを確認します。

du geek.txt

サイズは4と書いてありますが、4つは何ですか?

ブロックがあり、次にブロックがあります

du ファイルサイズをブロック単位でレポートする場合、使用するサイズはいくつかの要因によって異なります。コマンドラインで使用するブロックサイズを指定できます。du特定のブロックサイズを強制的に使用しない場合は、一連のルールに従って、使用するブロックサイズを決定します。

まず、次の環境変数をチェックします。

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • ブロックサイズ

これらのいずれかが存在する場合、ブロックサイズが設定され、duチェックが停止します。何も設定されていない場合、 duデフォルトでブロックサイズは1,024バイトになります。つまり、と呼ばれる環境変数POSIXLY_CORRECTが設定されていない限り。その場合、duデフォルトで512バイトのブロックサイズになります。

では、どの方法が使用されているかをどのように見つけるのでしょうか。各環境変数をチェックして解決することができますが、より迅速な方法があります。結果を、ファイルシステムが代わりに使用するブロックサイズと比較してみましょう。

ファイルシステムが使用するブロックサイズを見つけるために、tune2fsプログラムを使用します。次に、-l(list superblock)オプションを使用し、出力をパイプでつなぎgrep、「Block」という単語を含む行を印刷します。

この例では、最初のハードドライブの最初のパーティションにあるファイルシステムを見て、sda1を使用する必要がありますsudo

sudo tune2fs -l / dev / sda1 | grepブロック

ファイルシステムのブロックサイズは4,096バイトです。これをdu (4)から得られた結果で割ると、 du デフォルトのブロックサイズは1,024バイトであることがわかります。私たちは今、いくつかの重要なことを知っています。

まず、ファイルの保存に充てることができるファイルシステムの最小量は4,096バイトであることがわかっています。これは、小さな2バイトのファイルでさえ4KBのハードドライブスペースを占有していることを意味します。

心に留めておくべき二つ目は、次のようなハードドライブやファイルシステムの統計上の報告に特化したアプリケーションでありduls、そして tune2fs、どのような「ブロック」の手段の異なる概念を持つことができます。tune2fs一方、アプリケーションは、実際のファイルシステムのブロックサイズを報告 lsしてdu構成されるか、または他のブロック・サイズを使用するように強制することができます。これらのブロックサイズは、ファイルシステムのブロックサイズに関連することを意図したものではありません。それらは、それらのコマンドが出力で使用する単なる「チャンク」です。

最後に、異なるブロックサイズを使用する以外は、からの回答dutune2fs 同じ意味を伝えます。tune2fs結果は、4,096バイトのブロックであり、du結果は、1,024バイトの4つのブロックでした。

使用する du

コマンドラインパラメータまたはオプションなしでdu、現在のディレクトリとすべてのサブディレクトリが使用している合計ディスク容量を一覧表示します。

例を見てみましょう:

デュ

サイズは、ブロックあたり1,024バイトのデフォルトのブロックサイズで報告されます。サブディレクトリツリー全体がトラバースされます。

du別のディレクトリでの使用

du 現在のディレクトリとは異なるディレクトリについてレポートする場合 は、コマンドラインでディレクトリへのパスを渡すことができます。

du〜 / .cach / Evolution /

du特定のファイルでの使用

du 特定のファイルについてレポートする場合 は、コマンドラインでそのファイルへのパスを渡します。次のようなファイルのグループを選択するためにシェルパターンを渡すこともできます*.txt

du〜 / .bash_aliases

ディレクトリ内のファイルに関するレポート

持っているためにdu、現在のディレクトリおよびサブディレクトリ内のファイルに関するレポートを、使用-a(すべてのファイル)オプションを:

du -a

各ディレクトリについて、各ファイルのサイズと各ディレクトリの合計が報告されます。

ディレクトリツリーの深さの制限

duディレクトリツリーを特定の深さまでリストするように指示できます。これを行うには、-d(最大深度)オプションを使用し、パラメータとして深度値を指定します。すべてのサブディレクトリがスキャンされ、報告された合計を計算するために使用されますが、すべてがリストされているわけではないことに注意してください。1レベルの最大ディレクトリ深度を設定するには、次のコマンドを使用します。

du -d 1

出力には、現在のディレクトリ内のそのサブディレクトリの合計サイズが一覧表示され、各サブディレクトリの合計も表示されます。

ディレクトリを1レベル深くリストするには、次のコマンドを使用します。

du -d 2

ブロックサイズの設定

このblockオプションを使用しdu て、現在の操作のブロックサイズを設定できます。1バイトのブロックサイズを使用するには、次のコマンドを使用して、ディレクトリとファイルの正確なサイズを取得します。

du --block = 1

1メガバイトのブロックサイズを使用する場合は、-m(メガバイト)オプションを使用できます。これは次と同じ--block=1Mです。

du -m

ディレクトリとファイルで使用されるディスク容量に応じて最適なブロックサイズでサイズを報告する場合は、-h(人間が読める)オプションを使用します。

du -h

ファイルの保存に使用されるハードドライブの容量ではなく、ファイルの見かけのサイズを確認するには、次の--apparent-sizeオプションを使用します。

du --apparent-size

これを-a(すべての)オプションと組み合わせて、各ファイルの見かけのサイズを確認できます。

du --apparent-size -a

各ファイルは、見かけのサイズとともに一覧表示されます。

合計のみを表示する

あなたがしたい場合は du ディレクトリの合計のみを報告するために、使用-s(集計)オプションを選択します。これを-h(人間が読める)オプションなどの他のオプションと組み合わせることもできます。

du -h -s

ここでは、--apparent-sizeオプションとともに使用します。

du --apparent-size -s

変更時間の表示

作成または最終変更の日時を確認するには、次の--timeオプションを使用します。

du --time -d 2

奇妙な結果?

du特に他のコマンドからの出力にサイズを相互参照するときに、から奇妙な結果が表示される場合は、通常、さまざまなコマンドを設定できるブロックサイズまたはデフォルトのブロックサイズが異なることが原因です。また、実際のファイルサイズとそれらを保存するために必要なディスク容量の違いが原因である可能性もあります。

他のコマンドの出力と一致させる必要がある場合は、の--blockオプションを試してくださいdu