Ubuntu Linux:LS-S同意しない裏&統計資料~のためブロック数小さなファイルに使用されます。
ls -s ../nc2/.git/logs/refs/heads/
total 4
du ../nc2/.git/logs/refs/heads/
8 ../nc2/.git/logs/refs/heads/
stat ../nc2/.git/logs/refs/heads/
File: ‘../nc2/.git/logs/refs/heads/’
Size: 4096 Blocks: 8 IO Block: 4096 ......
sudo blockdev --getbsz /dev/sda
4096
ls -sは4つのブロックを使用するファイルを表示します。 du & sizeでは8つのブロックを使うとします。
ls -sが間違っているように見えるのはなぜですか?正しいブロックサイズを検出できませんか? "ls -s --block-size 512"を実行して、ファイルが8つのブロックを使用していることを示すことができます。
ファイルサイズやブロック数の問題ではありません。上記のすべてのコマンドは、ファイルサイズの代わりにブロックサイズをリストします。
編集:追加情報のリクエスト:
ls --version
ls (GNU coreutils) 8.21
type ls
ls is aliased to `ls --color=auto'
LS_BLOCK_SIZE=512 ls -s ../nc2/.git/logs/refs/heads/
total 8
ベストアンサー1
ls -s
レポート/システム呼び出しst_blocks
によって返された構造体メンバー。これは512バイトブロックです。 512バイトは初期ディスクセクタに対応するため、通常は最小ストレージ単位です。stat()
lstat()
あるいは、少なくともls
元のUnix実装とPOSIXが必要とするものを含むほとんどの実装が行うことです。
ただし、GNU実装ls
(Ubuntuで見つかったエミュレーション)はこれを1024バイトのチャンクに変更しますがbusybox
(以前)変数が環境にある場合(busyboxでは機能しません)、512バイトのチャンクに置き換えられます。これは人間が読みやすくするためのものだと思いますが、これは512バイトのストレージユニットを使用するファイルシステムの精度を失い、移植性に役立たないことを意味します。$POSIXLY_CORRECT
$POSIX_ME_HARDER
変更ログから:
Wed Aug 21 13:03:14 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu)
バージョン3.0。
du.c、ls.c:1Kブロックをデフォルトサイズに設定し、-kaは機能しません。愚かな基準はもうやめて!
GNU(busyboxではない)の場合は、オプションまたは環境変数ls
でブロックサイズを指定できます。したがって、またはを使用して、ディスク使用量をバイト単位で取得できます。この機能(GNUでも認識されています)の他の実装(例:BSDの実装)は、次のように認識されます。--block-size
$LS_BLOCK_SIZE
ls --block-size=1 -s
LS_BLOCK_SIZE=1 ls -s
ls
$BLOCKSIZE
$BLOCK_SIZE
ls
@yaholが表示しました)。
POSIXlyでは、これを使用して-k
キロバイト単位で数を取得できます(幸い、GNUまたはBSDは環境変数ls
よりも優先されます)。$BLOCKSIZE
移植可能に(KB単位のレポートがハードコードされているbusyboxを考慮したい場合ls
)、返すst_blocks
(または少なくともおおよその値)には、次のものが必要です。
blocks=$(ls -skd -- "$file" | awk '{print $1*2; exit}')
GNUを使用すると、find
環境に関係なく、多くの-printf %b
512バイトチャンクと-printf %k
1024バイトチャンクが報告されます。-printf
GNU専用です。
とにかく、これはファイルシステムのブロックサイズとは何の関係もありません。
1 BSDでは512(同じ)$BLOCKSIZE
の倍数に丸められ、512未満の値は許可されません。BLOCKSIZE=1023
BLOCKSIZE=512