このfind
コマンドを使用すると、サイズ別に検索でき、man
ページに指定されている単位を使用してサイズを指定できます。
File uses n units of space. The following suffixes can be used:
`b' for 512-byte blocks (this is the default if no suffix is used)
`c' for bytes
`w' for two-byte words
`k' for Kilobytes (units of 1024 bytes)
`M' for Megabytes (units of 1048576 bytes)
`G' for Gigabytes (units of 1073741824 bytes)
b
より一般的な仮定である「バイト」の代わりに「ブロック」を選択する歴史的な理由はありますか?バイトの代わりにブロックがデフォルトであるのはなぜですか?誰かがいつ、なぜこのデバイスを使用したいのですか?バイト/キロバイトに変換するには少し計算が必要で、基本単位では不便なようです。
答え1
Unixの最初のバージョンは、ファイルシステムとディスクドライバで512バイトのブロックを使用しました。 Unixは、実装に密接に従うインターフェイスやブロックサイズなど、抽象的に残る必要がある詳細を漏らす非常に最小限の低レベルシステムで始めました。これは、ブロックサイズが異なる可能性があり、特定のファイルに適用されるブロックサイズも異なる可能性があるにもかかわらず、今日の「ブロック」はまだ多くの状況で512バイトを意味する理由です(ファイルシステム用、ボリューム管理ドライブ用、ボリューム管理ドライブ用、ボリュームマネージャの場合)ディスク...)。
実装では、ファイルに割り当てられたデータブロックの数を計算してディスク使用量を追跡するため、ファイルサイズをブロック数として簡単に報告できます。ディスク使用量とファイルサイズは通常、ディスク使用量が整数ブロックサイズに丸められるため、異なる場合があります。スパースファイル通常、必要以上にチャンクが小さい。私が知っている限り、スパースファイルを実装した初期のUnixシステムは、find -size
ファイルサイズの代わりにファイルが使用するブロック数を使用しました。POSIX仕様)。
最初のfind
実装では、最後の数ブロックしか許可されていません-size
。ある時点で、サフィックスは一部を表すためにfind -size
受け入れられ始めました。c
氏ブロックの代わりに文字を使用することです。誰が始めたのかわかりませんが、ここに問題があります。4.3BSD。後で別のサフィックスが現れました。たとえば、FreeBSD では次のようになります。バージョン 6.2k
、M
その他のサフィックスが導入されましたが、b
GNUとBusyBox findにのみ存在するようです。
歴史的に多くのプログラムでは、「文字」と「バイト」を同じ意味で使用し、「文字」という用語を好む傾向がありました。たとえば、wc -c
バイト数を計算します。マルチバイト文字のサポートとそれに伴うバイト数と区別される文字数は、比較的新しい現象です。
結論から言うと目的はありません。 512バイトはブロックサイズと基本単位であるという事実、そしてこの文字を使ったのはb
意図的なものではなく、歴史的偶然の結果だ。
答え2
ブロックはバイトよりも重要です。ファイルは最初から指定された数のブロックを使用するためです。彫刻代わりにバイトファイルシステムから。 1バイトのファイルはまだディスク上の1ブロックを占めています。
例えばfind(1)
Unix Sixth Edition のマニュアルページには次のように記載されています。
-size n True if the file is n blocks long (512 bytes per block).
マニュアルページは、他の寸法測定単位を表示する便利な方法を提供しません。
POSIXは説明に明確に記載されています。find
512バイトブロックを使用します。
-size
チェックしない]
ファイルサイズ(バイト)を512で除してnに丸めた場合、デフォルトの用語はtrueと評価されます。 nの後に文字「c」が続く場合、サイズはバイト単位でなければなりません。
一部の古いシステムでは、次のようになります。HPUX 10.20マニュアルページには明確に記載されていません。