私は何年もの間私を悩ませた最も混乱した探求を持っています。 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
として提供します。ファイルの元のサイズはどれですか、それらの違いは何ですか?誰か詳しく説明していただけませんか?
ファイルの場合、_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
_の出力とはまったく関係がありません。
ls -l
は、1レベルのファイルサイズのみを表示します。
du
は、フォルダーサイズを再帰的に表示します(フォルダーの下のファイルサイズの合計)。