web-dev-qa-db-ja.com

ls -lとdu-shのファイルサイズの違いは何ですか?

私は何年もの間私を悩ませた最も混乱した探求を持っています。 ls -lとdu -sh *によって指定されるファイルサイズの違いは何ですか。

GRILL:/user/MAIL/DATA>ll
total 270
drwxr-xr-x  11 user     users         1024 Mar 21  2013 .
drwxr-xr-x   6 user     users           96 May 28  2008 ..
drwxr-xr-x  10 user     users         1024 Jun 14 09:40 Rod
drwxr-xr-x   3 user     users           96 Sep 17  2010 Atlas
drwxr-xr-x  2339 user     users       132096 Jun 14 15:00 Admin    
drwxr-xr-x   3 user     users           96 Jul 11  2014 DE
drwxr-xr-x   5 user     users           96 Jun 14 08:30 Express
drwxr-xr-x   3 user     users           96 Sep 17  2010 Deferred
drwxr-xr-x   2 user     users           96 Feb 10  2009 Imagi
drwxr-xr-x   6 user     users         1024 Jul 11  2014 NO
drwxr-xr-x   3 user     users         2048 Mar 21  2013 SE
-rw-r--r--   1 user     users           55 Mar 21  2013 cmd

GRILL:/user/MAIL/DATA>du -sk *
6723    Rod
0       Atlas
435494  Admin
2       DE
111273  Express
2       Deferred
0       Imagi
541     NO
12      SE
1       cmd

ls -lの管理者のサイズは132096です。管理者ディレクトリから400000以上のファイルを削除しようとしましたが、スペースが少しでも減少していませんでした。

一方、du -skはサイズを435494として提供します。ファイルの元のサイズはどれですか、それらの違いは何ですか?誰か詳しく説明していただけませんか?

6

ファイルの場合、_ls -l file_は(特に)fileのサイズをバイト単位で示しますが、_du -k file_はfileが占めるディスク上のスペースを示します(1単位) kB = 1024バイト)。ディスク領域はブロック単位で割り当てられるため、_du -k_で示されるサイズは常に_ls -kl_で示される領域より少し大きくなります(これは_ls -l_と同じですが、1 kB単位です)。

ディレクトリの場合、_ls -ld dir_は、(特に)dir内のファイルとサブディレクトリのファイル名のリストのサイズを(多数の属性とともに)示します。これはファイル名のリストであり、ファイルやサブディレクトリの内容ではありません。そのため、ファイルをdirに追加すると(ファイルが空の場合でも)このサイズは大きくなりますが、dirのファイルの1つが大きくなってもサイズは変わりません。

ただし、dirからファイルを削除すると、リストのスペースはすぐには再利用されませんが、削除されたファイルのエントリは未使用としてマークされ、後でリサイクルされます(これは実際には実装に依存しますが、説明されているのは、最近のほとんど普遍的な行動です)。そのため、ファイルを削除する場合、_ls -ld_の出力に変更が見られない場合があります。

最後に、_du -ks dir_は、dirのすべてのファイルと、dirのすべてのサブディレクトリのすべてのファイルによってディスク上で占有されている領域の(推定)を1 kB = 1024バイトで示します。単位。上記の説明を考慮すると、これは_ls -kld dir_の出力とはまったく関係がありません。

4
Satō Katsura

ls -lは、1レベルのファイルサイズのみを表示します。

duは、フォルダーサイズを再帰的に表示します(フォルダーの下のファイルサイズの合計)。

0
Frank