Назначение единицы измерения по умолчанию для команды find 512 байтов

Команда find позволяет выполнять поиск по размеру, который вы можете указать с помощью единиц, указанных на странице руководства:

 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 для «блока», а не «байта», которая, как я подозреваю, будет более распространенным предположением? И почему блокировка будет по умолчанию, а не байтом? Когда и почему кто-то захочет использовать это устройство? Преобразование в байты / килобайты включает в себя немного математики, кажется, не очень удобно быть единицей по умолчанию.

2 Solutions collect form web for “Назначение единицы измерения по умолчанию для команды find 512 байтов”

Первые версии Unix использовали 512-байтные блоки в своей файловой системе и драйверах дисков. Unix начиналась как довольно минималистическая и низкоуровневая система с интерфейсом, который внимательно следил за реализацией, и просочился в детали, которые должны были остаться абстрактными, например размер блока. Вот почему сегодня «блок» по-прежнему означает 512 байт во многих контекстах, хотя могут быть разные размеры блоков, возможно, даже разные размеры блоков, применяемые к данному файлу (один для файловой системы, один для диспетчера томов, один для диск …).

Реализация отслеживала использование диска путем подсчета количества блоков данных для файла, поэтому было легко сообщить размер файла как количество блоков. Использование диска и размер файла могут различаться не только потому, что использование диска обычно имеет размер, округленный до целого числа блоков, но также потому, что разреженные файлы имеют меньше блоков, чем обычно требуется размер. Насколько мне известно, ранние системы Unix, в которых реализованы разреженные файлы, find -size используют количество блоков, используемых файлом, а не размер файла; в современных реализациях используется размер файла, округленный (есть примечание об этом в спецификации POSIX ).

Самые ранние find реализации принимали только количество блоков после -size . В какой-то момент find -size начал принимать суффикс c чтобы указать количество символов c вместо блоков; Я не знаю, кто его начал, но это было в 4.3BSD . Другие суффиксы появились позже, например, в FreeBSD это был выпуск 6.2, в котором были введены k , M и другие суффиксы, но не b которые, как я думаю, существуют только в GNU и BusyBox find.

Исторически многие программы использовали «характер» и «байт» взаимозаменяемо и, как правило, предпочитали термин «характер». Например, wc -c подсчитывает байты. Поддержка многобайтовых символов и, следовательно, количество символов, которое отличается от количества байтов, является относительно недавним явлением.

Таким образом, нет никакой цели. Размер блока размером в 512 байт, тот факт, что он является единицей по умолчанию, и использование буквы b не возникало преднамеренно, а через историческое происшествие.

Блоки были важнее байтов, потому что с самого начала файлы использовали определенное количество блоков, а не байтов в файловой системе. Файл с одним байтом все еще занимал один блок на диске.

Например, справочная страница find(1) из Unix 6-го издания гласит:

 -size n True if the file is n blocks long (512 bytes per block). 

На странице руководства не было удобных способов представления других единиц измерения для размера.

POSIX явно указывает в описании find что использует 512-байтовые блоки:

-size n [c]
Первичный должен оцениваться как истинный, если размер файла в байтах, деленный на 512 и округленный до следующего целого, равен n. Если за n следует символ «c», размер должен быть в байтах.

В некоторых старых системах, например, на странице руководства HPUX 10.20 , это не было явным.

  • Как удалить оставшиеся файлы удаленного пользователя?
  • find: значение \? знак как значение параметра имени
  • Как я могу найти репозитории .git и pull'em?
  • Почему поиск выглядит в текущем каталоге?
  • найти файлы с контуром каталога исключить подкаталоги
  • Настройка глобальных разрешений для просмотра для подкаталогов (rx), но делает файлы недоступными для всех, кроме владельцев и членов группы
  • Поиск файлов, созданных определенным пользователем
  • Как перечислять только имена файлов, удаляющих каталоги и подкаталоги
  • Использование find -perm для поиска файлов setuid
  • Как передать файлы, найденные в качестве аргументов?
  • Плохая замена при переименовании файлов с помощью find
  • Linux и Unix - лучшая ОС в мире.