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

  • Dave McKay

    @TheGurkha

  • December19,2019,8:00am EDT
Fatmawati Achmad Zaenuri/

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

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

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

ファイルのサイズがブロックの正確な倍数でない限り、ハードドライブ上で使用するスペースは常に次のブロック全体に切り上げる必要があります。 例えば、ファイルは、以上二つのブロックがより小さく、それはまだかつブロックのスペースをダウンロードしましょう。

広告

ファイルサイズに関連して二つの測定値が使用されます。, 最初は、ファイルの実際のサイズであり、ファイルを構成するコンテンツのバイト数です。 第二は、ハードディスク上のファイルの有効サイズです。 これは、多数のファイルシステムのブロックを必要とする店舗ファイルです。

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

echo "1" > geek.txt

次に、長い形式のリストlsファイルの長さを調べます。

ls -l geek.txt

長さはエントリ、これは二つのバイトです。 ファイルに一文字しか送信しないのはなぜ二バイトなのですか? ファイルの中で何が起こっているのか見てみましょう。,

Advertisement

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

hexdump -C geek.txt

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

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

lsからの出力で集計し、二つのバイトのファイルの長さと一致します。

関連:lsコマンドを使用してLinux上のファイルとディレクトリをリストする方法

広告

今、私たちはduファイルサイズを見てコマンド:

du geek.txt

それはサイズが四つであると言いますが、何の四つですか?

ブロックがあり、その後ブロックがあります

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

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

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

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

広告

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

ファイルシステムが使用するブロックサイズを検出するには、tune2fsプログラムを使用します。, 次に、-l(リストスーパーブロック)オプションを使用し、出力をgrepにパイプし、”Block”という単語を含む行を出力します。”

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

sudo tune2fs -l /dev/sda1 | grep Block

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

Advertisement

まず、ファイルの格納に専念できるファイルシステムの不動産の最小量は4,096バイトであることがわかっています。 この意味も小さい、バイトのファイルとして、4KBのハードドライブ空間です。

心に留めておくべき第二のことは、dulstune2fsなど、ハードドライブとファイルシステムの統計に関するレポート専用のアプリケーションであり、”ブロック”とは何を意味するかについて異なる概念を持つことができます。, tune2fsアプリケーションは真のファイルシステムブロックサイズを報告しますが、lsおよびduは他のブロックサイズ これらのブロックサイズは、ファイルシステムのブロックサイズに関連するものではありません。

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

du

コマンドラインパラメータやオプションなしで使用すると、du現在のディレクトリとすべてのサブディレクトリが使用して

例を見てみましょう。

du
Advertisement

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

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

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

du ~/.cach/evolution/

特定のファイルでduを使用する

du特定のファイルには、コマンドラインでそのファイルへのパスを渡します。, また、選択したファイルのグループにシェルパターンを渡すことができます,など*.txt:

du ~/.bash_aliases

ディレクトリ内のファイルに報告

du現在のディレクトリとサブディレクトリ内のファイルに報告します,-a(すべてのファイル)オプション:

du -a
advertisement

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

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

duディレクトリツリーを特定の深さにリストするように指示できます。 これを行うには、-d(max depth)オプションを使用し、パラメータとして深さ値を指定します。 全てのサブディレクトリがスキャン計算に使用される報告の合計が、彼らはすべてを記載します。 ディレクトリの最大深さを一つのレベルに設定するには、次のコマンドを使用します。

du -d 1

出力には、現在のディレクトリ内のそのサブディレクトリの合計サイズがリストされ、各サブディレクトリの合計も提供されます。,

du -d 2

ブロックサイズの設定

blockオプションを使用して、現在の操作に対してduのブロックサイズを設定できます。,dディレクトリとファイルによって使用されるディスク領域に応じて最も適切なブロックサイズでは、-h(人間が読める)オプションを使用します。

du -h

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

du --apparent-size
advertisement

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

du --apparent-size -a

各ファイルは見かけのサイズとともにリストされます。,

合計のみを表示する

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

du -h -s

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

du --apparent-size -s

変更時刻を表示する

作成または最終更新日時を表示するには、--timeオプションを使用します。

du --time -d 2

奇妙な結果?,

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

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

デイブ-マッケイ
デイブ-マッケイは、パンチ紙テープが流行していたときにコンピュータを最初に使用し、それ以来ずっとプログラミングしています。 IT業界で30年以上を過ごした後、彼は現在、フルタイムの技術ジャーナリストです。 彼のキャリアの間に、彼はフリーランスのプログラマー、国際的なソフトウェア開発チームのマネージャー、ITサービスプロジェクトマネージャー、そして最近ではデータ DaveはLinuxの伝道者であり、オープンソースの支持者です。フルバイオを読む”

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です