Что это за "Итого" в самой первой строке после ls-l? [закрытый]
что такое "total" в выводе ls-l?
$ ls -l /etc
total 3344
-rw-r--r-- 1 root root 15276 Oct 5 2004 a2ps.cfg
-rw-r--r-- 1 root root 2562 Oct 5 2004 a2ps-site.cfg
drwxr-xr-x 4 root root 4096 Feb 2 2007 acpi
-rw-r--r-- 1 root root 48 Feb 8 2008 adjtime
drwxr-xr-x 4 root root 4096 Feb 2 2007 alchemist
4 ответов
вы можете найти определение этой линии в ls
документации для вашей платформы. Для coreutils
ls
(тот, который найден на многих системах Linux), информация может быть найдена через info coreutils ls
:
для каждого каталога, который указан, предварите файлы строкой 'total BLOCKS', где BLOCKS-общее распределение диска для всех файлы в этом каталоге.
Формула: что такое это номер?
в общей сумме int = сумме (physical_blocks_in_use) * physical_block_size/ls_block_size) для каждого файла.
где:
ls_block_size
- это произвольная переменная окружения (нормально 512 или 1024 байта) которое свободно modifiable с--block-size=<int>
флагls
, thePOSIXLY_CORRECT=1
GNU окружающая среда переменная (для получения 512-байтовых единиц) или-k
флаг в силу 1кб единиц.physical_block_size
является зависимым от ОС значением внутреннего блочного интерфейса, который может быть или не быть подключен к базовому оборудованию. Это значение обычно 512b или 1k, но полностью зависит от ОС. Он может быть раскрыт через%B
значение onstat
илиfstat
. обратите внимание, что это значение (почти всегда) не связано с количеством физических блоков на современные запоминающее устройство.
почему так запутано?
это число довольно отделено от любой физической или значимой метрики. Многие младшие программисты не имели опыта работы с файл дыры или жесткие / sym ссылки. Кроме того, документация по этой конкретной теме практически отсутствует.
расплывчатость и двусмысленность термина "размер блока" результат о многочисленных различных мерах, которые легко спутать, и относительно глубоких уровнях абстракции, вращающихся вокруг доступа к диску.
примеры противоречивой информации: du
(или ls -s
) vs stat
под управлением du *
в папке проекта выдает следующее: (Примечание: ls -s
возвращает те же результаты.)
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
в общей сумме: 2+2+1+3+3+5+26+4+2+14 = 62 блоки
еще когда бежишь stat
мы видим другой набор значений. Бег!--10--> в том же каталоге дает:
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
Итого: 3+3+1+5+6+10+51+8+3+28 = 118 блоки
Примечание: вы можете использовать команду
stat * --printf="%b\t(%B)\t%n: %s bytes\n"
> для вывода (по порядку) количества блоков, (в parens) размер тех блоки, имя файла, размер в байтах, как показано выше.
есть два важные вещи на вынос:
-
stat
как сообщаетphysical_blocks_in_use
иphysical_block_size
как использовано в формуле выше. Обратите внимание, что эти значения основаны на интерфейсах ОС. -
du
предоставляет то, что принято считать довольно точным оценка использования физического диска.
Для справки -ls -l
выше каталога:
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
это общее количество блоков файловой системы, включая косвенные блоки, используемые перечисленными файлами. Если вы бежите ls -s
на тех же файлах и суммировать сообщенные номера вы получите тот же номер.