Добрый день!
Это, наверное, простой вопрос, но с разбегу нагуглить не смог.
Предположим, я создал в Linux (Ubuntu) новую папку и перешёл в неё.
После команды "ls -la" вижу в первой строке: "total 8" и закономерно лишь 2 элемента каталога (точка и две точки).
Вопрос: откуда берётся 8?
Вопрос по ls
каталоги место тоже занимают, что замечательно показывает ls -l
Безусловно занимают какое-то место. Однако, мы не про него, а про количество элементов каталога, если я правильно понимаю. Так вот, откуда берётся 8? Почему 8, а не 2, например?
8 -- это не количество элементов, это занимаемое ими место, как выше уже сказали.
Размер в блоках, если иное не задано явно или через переменные окружения, то блок равен 512 байтам,
см.: https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html
OK. Допустим. Но почему нужно 8 блоков? На что они истрачены файловой системой?
А, кажется, дошло. 8 х 512 = 4К именно столько отводится под каталог.
Добавлено: 20.07.2017 14:17:22
Спасибо, коллеги, теперь ясно.
Неправильно!
# ls -al tmp
total 8
drwxr-xr-x. 2 root root 4096 Jun 24 2016 .
dr-xr-x---. 42 root root 4096 Jul 20 16:15 ..ls поступает, не задумываясь: делит размер каждого выведенного файла на 1024 с избытком и всё складывает.
Кстати, для того же каталога:
# ls -l tmp
total 0Так что всё это условно.
Объяснение, которое кажется мне сейчас наиболее логичным:
1. Элемент каталога занимает 4096 байт данных (о чём и сообщает ls для каждого элемента)
2. 4096 это 8 блоков по 512 байт (512 размер блока по умолчанию)
3. Поэтому для пустого каталога, где есть только элементы "." и ".." размер равен 8 ("total 8")
4. ls учитывает элементы в соответствии со своими опциями. Например, "ls -la /tmp" мне показывает 32 и действительно я вижу 8 элементов каталога, а вот "ls -l /tmp" показывает почему-то 4 (это я пока объяснить не могу)
P.S. Почитал ещё по теме - выше не совсем адекватная трактовка (вернее совсем не адекватная) :) Завтра постараюсь сформулировать правильно.
Вы бы в документацию заглянули. Там там всё толково описано, правда вряд ли по-русски:
Some GNU programs (at least ‘df’, ‘du’, and ‘ls’) display sizes in.
“blocks”. You can adjust the block size and method of display to make
sizes easier to read. The block size used for display is independent of
any file system block size. Fractional block counts are rounded up to
the nearest integer
В сокращённом переводе: ряд программ показывают размеры в "блоках". Выводимый размер блока не зависит от размера блока файловой системы.
Далее долго описывается как этот размер изменить и что по умолчанию он 1024
Пример:
[xbatob@pink ~]$ ls -ls Polygon/
итого 868
4 drwxrwxr-x. 3 xbatob xbatob 4096 окт 7 2016 192.168.113.219
4 -rw-r-----. 1 xbatob xbatob 91 мар 16 2015 dns.key
4 -rwxr-x---. 1 xbatob xbatob 2865 мар 16 2015 dns-update.sh
856 -rw-r-----. 1 xbatob xbatob 869405 июл 16 2015 maint.bin
$ BLOCKSIZE=4096 ls -ls Polygon/
итого 217
1 drwxrwxr-x. 3 xbatob xbatob 4096 окт 7 2016 192.168.113.219
1 -rw-r-----. 1 xbatob xbatob 91 мар 16 2015 dns.key
1 -rwxr-x---. 1 xbatob xbatob 2865 мар 16 2015 dns-update.sh
214 -rw-r-----. 1 xbatob xbatob 869405 июл 16 2015 maint.bins.xbatob, похоже, вы правы. Спасибо за разъяснение.
P.S. Единственное, что можно добавить, это то, что размер каталога всё-таки кратен размеру data block файловой системы (как правило 4K), а затем переводится в блоки команды ls.
P.P.S. Ну и то, что мелкие файлы тоже всё-таки кратны data block, что видно из вашего примера, то есть отчасти зависят от его размера.
s.xbatob,
For ls file sizes, the block size defaults to 1 byte.
Тоесть пустой каталог по умолчанию 4 байта получается?
s.xbatob,For ls file sizes, the block size defaults to 1 byte.
Я не понял, где можно увидать подтверждение данной фразы.
Предыдущая фраза:
If none of the above environment variables are set, the block size currently defaults to 1024 bytes in most contexts, but this number may change in the future., - напротив, хорошо соотносится с реальностью.
В общем, смешались в кучу кони, люди.
1) For ls file sizes, the block size defaults to 1 byte.
Это относится только к размерам файлов, выводимых ls по каждому из этих файлов. Но не относится к выводу итога
total: 8
2) Итог выводится с дефолтным размером блока для coreutils. Получить его в байтах тоже несложно:
[console]$ ls -la --block-size=1
total 8192
...
[/console]
3) опция --block-size влияет и на вывод итогов, и на вывод размеров отдельных файлов, например, см:
[console]$ ls -la --block-size=1024
total 8
... 4 ... ./
... 4 ... ../
[/console]
4) на вывод ls влияет содержимое переменной окружения LS_OPTIONS.
s.xbatob,For ls file sizes, the block size defaults to 1 byte.
Прошу ваши собственные измышления мне не приписывать!