Что это за "итог" в первой строке после 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
Ответы
Ответ 1
Вы можете найти определение этой строки в документации ls
для вашей платформы. Для coreutils
ls
(найденного во многих системах Linux) информацию можно найти через info coreutils ls
:
Для каждого каталога, который указан, предварите файлы с линией `total BLOCKS ', где BLOCKS - это общее распределение диска для всех файлов в этом каталоге.
Ответ 2
Формула: что это за номер?
total int = Сумма (physical_blocks_in_use) * physical_block_size/ls_block_size) для каждого файла.
Где:
-
ls_block_size
- произвольная переменная среды (обычно 512 или 1024 байта), которая свободно модифицируется с помощью --block-size=<int>
флаг ls
, POSIXLY_CORRECT=1
GNU переменная среды (для получения 512-байтовых единиц) или флаг -k
, чтобы заставить 1kB. -
physical_block_size
- зависимое от ОС значение внутреннего интерфейса блока, которое может быть или не быть подключено к базовому оборудованию. Это значение обычно равно 512b или 1k, но полностью зависит от ОС. Он может быть обнаружен с помощью значения %B
на stat
или fstat
. Обратите внимание, что это значение (почти всегда) не связано с количеством физических блоков на современном устройстве хранения.
Почему так запутанно?
Этот номер довольно удален от любой физической или значимой метрики. Многие младшие программисты не имели опыта работы с файловыми отверстиями или жесткими/символическими ссылками. Кроме того, документация, доступная по этой конкретной теме, практически не существует.
Неравномерность и двусмысленность термина "размер блока" была результатом множества различных мер, которые легко путают, и относительно глубоких уровней абстракции, вращающихся вокруг доступа к диску.
Примеры конфликтной информации: 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
, мы видим другой набор значений. Выполнение stat
в том же каталоге дает:
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"
> для вывода (по порядку) количества блоков (в парнах) размера этих блоки, имя файла и размер в байтах, как показано выше.
Есть две важные вещи:
-
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
Ответ 3
Это общее количество блоков файловой системы, включая косвенные блоки, используемые указанными файлами. Если вы запустите ls -s
в тех же файлах и суммируете сообщенные номера, вы получите тот же номер.
Ответ 4
Как раз упомянуть - вы можете использовать -h (ls -lh), чтобы преобразовать это в удобочитаемый формат.