- Dave McKay
@TheGurkha
- December19,2019,8:00am EDT
linuxのdu
コマンドを使用すると、実際のディスク使用量とファイルまたはディレクトリの実際のサイズの両方を取得します。 これらの値が同じでない理由を説明します。
実際のディスク使用量と実際のサイズ
ファイルのサイズとハードドライブ上で占めるスペースが同じであることはめったにありません。, ディスクスペースが割り当てられるブロックとなります。 ファイルがブロックよりも小さい場合でも、ファイルシステムには使用する不動産の単位が小さくないため、ブロック全体が割り当てられます。
ファイルのサイズがブロックの正確な倍数でない限り、ハードドライブ上で使用するスペースは常に次のブロック全体に切り上げる必要があります。 例えば、ファイルは、以上二つのブロックがより小さく、それはまだかつブロックのスペースをダウンロードしましょう。
ファイルサイズに関連して二つの測定値が使用されます。, 最初は、ファイルの実際のサイズであり、ファイルを構成するコンテンツのバイト数です。 第二は、ハードディスク上のファイルの有効サイズです。 これは、多数のファイルシステムのブロックを必要とする店舗ファイルです。
例
簡単な例を見てみましょう。, 小さなファイルを作成するために、単一の文字をファイルにリダイレクトします。
echo "1" > geek.txt
次に、長い形式のリストls
ファイルの長さを調べます。
ls -l geek.txt
長さはエントリ、これは二つのバイトです。 ファイルに一文字しか送信しないのはなぜ二バイトなのですか? ファイルの中で何が起こっているのか見てみましょう。,
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バイトです。, 私達は今複数の重要な事を知っている。
まず、ファイルの格納に専念できるファイルシステムの不動産の最小量は4,096バイトであることがわかっています。 この意味も小さい、バイトのファイルとして、4KBのハードドライブ空間です。
心に留めておくべき第二のことは、du
、ls
、tune2fs
など、ハードドライブとファイルシステムの統計に関するレポート専用のアプリケーションであり、”ブロック”とは何を意味するかについて異なる概念を持つことができます。, tune2fs
アプリケーションは真のファイルシステムブロックサイズを報告しますが、ls
およびdu
は他のブロックサイズ これらのブロックサイズは、ファイルシステムのブロックサイズに関連するものではありません。
最後に、異なるブロックサイズを使用する以外に、du
およびtune2fs
からの回答は同じ意味を伝えます。, tune2fs
結果は4,096バイトのブロックであり、du
結果は1,024バイトのブロックであった。
du
コマンドラインパラメータやオプションなしで使用すると、du
現在のディレクトリとすべてのサブディレクトリが使用して
例を見てみましょう。
du
サイズは、ブロックあたり1,024バイトのデフォルトのブロックサイズで報告されます。 サブディレクトリツリー全体が走査されます。,
別のディレクトリでduを使用する
du
現在のディレクトリとは異なるディレクトリでレポートする場合は、コマンドラインでディレクトリへのパスを渡すことができます。
du ~/.cach/evolution/
特定のファイルでduを使用する
du
特定のファイルには、コマンドラインでそのファイルへのパスを渡します。, また、選択したファイルのグループにシェルパターンを渡すことができます,など*.txt
:
du ~/.bash_aliases
ディレクトリ内のファイルに報告
du
現在のディレクトリとサブディレクトリ内のファイルに報告します,-a
(すべてのファイル)オプション:
du -a
各ディレクトリについて、各ファイルのサイズと各ディレクトリの合計が報告されます。,
ディレクトリツリーの深さを制限する
du
ディレクトリツリーを特定の深さにリストするように指示できます。 これを行うには、-d
(max depth)オプションを使用し、パラメータとして深さ値を指定します。 全てのサブディレクトリがスキャン計算に使用される報告の合計が、彼らはすべてを記載します。 ディレクトリの最大深さを一つのレベルに設定するには、次のコマンドを使用します。
du -d 1
出力には、現在のディレクトリ内のそのサブディレクトリの合計サイズがリストされ、各サブディレクトリの合計も提供されます。,
du -d 2
ブロックサイズの設定
block
オプションを使用して、現在の操作に対してdu
のブロックサイズを設定できます。,dディレクトリとファイルによって使用されるディスク領域に応じて最も適切なブロックサイズでは、-h
(人間が読める)オプションを使用します。
du -h
ファイルを格納するために使用されるハードドライブ領域の量ではなく、ファイルの見かけのサイズを確認するには、--apparent-size
オプションを使用します。
du --apparent-size
これを-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
から奇妙な結果が表示された場合、特に他のコマンドからの出力にサイズを相互参照する場合、通常、異なるコマンドを設定できる異なるブロックサイズまたはデフォルトのブロックサイズが原因です。 また、実際のファイルサイズとそれらを格納するために必要なディスク領域の違いが原因である可能性があります。
他のコマンドの出力と一致させる必要がある場合は、--block
du
のオプションを試してみてください。,
デイブ-マッケイは、パンチ紙テープが流行していたときにコンピュータを最初に使用し、それ以来ずっとプログラミングしています。 IT業界で30年以上を過ごした後、彼は現在、フルタイムの技術ジャーナリストです。 彼のキャリアの間に、彼はフリーランスのプログラマー、国際的なソフトウェア開発チームのマネージャー、ITサービスプロジェクトマネージャー、そして最近ではデータ DaveはLinuxの伝道者であり、オープンソースの支持者です。フルバイオを読む”