размер блока файла - различие между статистикой и ls

NIS является способом получить данные (данные аутентификации, путь к корневому каталогу, …) о пользователях (и другой материал). Выполнение вещей (например, создание каталога) не являются своим заданием. Таким образом, я думаю, что Вы смотрите в неправильном месте.

Большинство нельдов использует PAM для управления логинами (не только аутентификация, но также и учетное управление, ведение счетов и наиболее соответствующим образом управление сеансами). Реализация Linux (и другие) включает названный модуль pam_mkhomedir который делает точно, что Вы хотите. Вставьте эту строку /etc/pam.d/* для каждого сервиса, который позволяет локальным пользователям входить в систему (или в /etc/pam.d/common-session если у Вас есть это):

session    required    pam_mkhomedir.so skel=/etc/skel/

9
10.01.2012, 19:23
3 ответа

Много дисков имеют размер сектора 512 байтов, означая, что любое чтение или запись на диске передают целый 512-байтовый сектор за один раз. Довольно естественно разработать файловые системы, где сектор не разделяется между файлами (который усложнил бы дизайн и повредил бы производительность); поэтому файловые системы имеют тенденцию использовать 512-байтовые блоки для файлов. Следовательно традиционные утилиты такой как ls и du укажите на размеры в единицах 512-байтовых блоков.

Для людей 512-байтовые единицы не очень значимы. 1 КБ является тем же порядком величины и намного более значимый. Блок файловой системы (самая маленькая единица, на которую разделен файл) на самом деле часто состоит из нескольких секторов: 1 КБ, 2 КБ и 4 КБ являются общими размерами блока файловой системы; таким образом, 512-байтовая единица сильно не выравнивается по ширине дизайном файловой системы, и нет никакого серьезного основания кроме традиции для использования 512-байтовой единицы вне дискового драйвера вообще.

Таким образом, у Вас есть традиция, которая не имеет большого движения для него и более читаемой конвенции, это берет. Немного как восьмеричный и шестнадцатеричное: нет того правильно, и один это неправильно, они - различные способы записать те же числа.

Много инструментов имеют опцию выбрать дисплеи: ls --block-size=512 для GNU ls, установка POSIXLY_CORRECT=1 в среде для GNU df и GNU du получить 512-байтовые единицы (или передача -k вызвать единицы 1 КБ). Что stat команда в GNU coreutils выставляет как “размер блока” ( %B значение), значение иждивенца ОС внутреннего интерфейса; в зависимости от ОС это может или не может быть связано с размером, используемым файловой системой или дисковым кодом (это обычно не — посмотрите Различие между размером блока и размером кластера). На Linux значение 512, независимо от того, что делает любой базовый драйвер. Значение %B никогда вопросы, это - просто причуда, что это существует вообще.

9
27.01.2020, 20:06

stat команды используют физический blocksize жесткого диска. В основном весь жесткий диск начиная с их начала в 1956 использовал 512-байтовые блоки. Однако это недавно начало изменяться с предстоящим из Усовершенствованного Формата.

Я подозреваю это ls'1024byte-blocksize имеет также историческую причину. Возможно, файловой системе было однажды свойственно иметь blocksize 1 024, или это использовалось, чтобы дать Вам размер в килобайте. Но (по крайней мере, с GNU coreutils) можно указать размер блока с --block-size= опция.

1
27.01.2020, 20:06

Покопавшись в исходном коде и стандарте POSIX, я бы сказал, что ответ @antje -m и @Gilles в основном правильный.

В качестве резюме стоит процитировать комментарий из POSIX.1 -2008 :

The use of 512-byte units is historical practice and maintains compatibility with ls and other utilities in this volume of POSIX.1-2008. This does not mandate that the file system itself be based on 512-byte blocks. The -k option was added as a compromise measure. It was agreed by the standard developers that 512 bytes was the best default unit because of its complete historical consistency on System V (versus the mixed 512/1024-byte usage on BSD systems), and that a -k option to switch to 1024-byte units was a good compromise. Users who prefer the more logical 1024-byte quantity can easily alias df to df -k without breaking many historical scripts relying on the 512-byte units.

Для размера блока вls -s:

POSIX говорит , что размер блока по умолчанию определяется реализацией -, если не задана опция -k.

Размер блока по умолчанию, реализованный в GNU coreutilsls, определяется в GNU gnulib:.gnulib/lib/human.c

/* The default block size used for output.  This number may change in
   the future as disks get larger.  */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif

который взят из старой фиксации:

commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering <jim@meyering.net>
Date:   Mon Jun 29 15:23:04 1998 +0000

В самом сообщении фиксации ничего не говорилось о числе 1024.

И обратите внимание, что размер блока, используемый в duи df, также равен 1024, lsпросто решил соответствовать им. Хотя для duи dfэто конфликт со стандартом POSIX (, поэтому здесь переменная окружения POSIXLY_CORRECTидет ). Похоже, это решение команды GNU, см. страницу википедии POSIX об этом противоречии.

Для команды stat.

Это не часть стандарта POSIX, ноstatсистемный вызов . Однако единица измерения размера блока не стандартизирована(sys _stat.h):

The unit for the st_blocks member of the stat structure is not defined within POSIX.1-2008.

Команда statпросто отображает информацию, предоставленную системным вызовом stat, и использует размер блока 512 с некоторыми исключениями (, они не -Linux, например. HP -UX, IBM AIX и т. д. см. макросы, определенные в gnulib/lib/stat-size.h).

Таким образом, число 512 является скорее историческим выбором и соглашением Linux.

GNU coreutils(, следовательно, команда ls)не является частью ядра Linux (, следовательно, вызов stat), они нацелены на другой системный аспект, GNU coreutilsбольше для человека (легче читать ), а ядро ​​Linux для абстрактного оборудования (, следовательно, ближе к оборудованию ).

Изменить :Размер блока 4096 — это размер блока ввода-вывода, реальный физический размер блока, вероятно, по-прежнему составляет 512 байт , как объясняется в этом вопросе .

5
27.01.2020, 20:06

Теги

Похожие вопросы