Я думаю причина вашего замешательства в том, что вы не знаете, что такое каталог . Для этого давайте сделаем шаг назад и посмотрим, как работают файловые системы Unix.
Файловая система Unix имеет несколько отдельных понятий для адресации данных на диске:
Другими словами, «файл» на самом деле состоит из трех разных вещей:
Большая часть время, пользователи воображают, что файл является синонимом «сущности, связанной с именем файла» - это только тогда, когда вы имеете дело с низкоуровневыми сущностями или API файла / сокета, которые вы думаете об индексных дескрипторах или блоках данных. Каталоги - одна из таких низкоуровневых сущностей.
Вы можете подумать, что каталог - это файл, содержащий множество других файлов. Это правильно только наполовину. Каталог - это файл, который сопоставляет имена файлов с номерами inode. Он не «содержит» файлы, а указывает на имена файлов. Думайте об этом как о текстовом файле, который содержит такие записи:
Вышеупомянутые записи называются записями каталога . Это в основном сопоставления имен файлов с номерами inode. Каталог - это специальный файл, содержащий записи каталога.
Это, конечно, упрощение, но оно объясняет основную идею и другие странности каталогов.
Но подождите! Происходят странные вещи!
ls -ld somedirectory
всегда показывает размер файла 4096, тогда как ls -l somefile
показывает фактический размер файла. Почему?
Проблема 1: когда мы говорим «размер», мы можем иметь в виду две вещи:
Обычно это не одно и то же число. Попробуйте запустить stat
в обычном файле, и вы увидите разницу.
Когда файловая система создает непустой файл, она обычно охотно распределяет блоки данных по группам. Это связано с тем, что файлы имеют тенденцию произвольно быстро увеличиваться и уменьшаться.Если файловая система выделяет столько блоков данных, сколько необходимо для представления файла, рост / сжатие будет медленнее, а фрагментация станет серьезной проблемой. Таким образом, на практике файловым системам не нужно постоянно перераспределять пространство для небольших изменений. Это означает, что на диске может быть много места, которое «занято» файлами, но полностью не используется.
Что делает файловая система со всем этим неиспользуемым пространством? Ничего такого. Пока не почувствуете, что это нужно.Если ваш инструмент оптимизатора файловой системы - возможно, онлайн-оптимизатор, работающий в фоновом режиме, возможно, часть вашего fsck, возможно, встроенный в вашу файловую систему - кажется, что он может переназначить блоки данных ваших файлов - перемещение использованных блоков, освобождение неиспользуемых блоки и т. д.
Итак, теперь мы подошли к разнице между обычными файлами и каталогами: поскольку каталоги составляют «основу» вашей файловой системы, вы ожидаете, что к ним может потребоваться частый доступ или изменение, и поэтому их следует оптимизировать. И поэтому вы вообще не хотите, чтобы они были фрагментированы. Когда каталоги создаются, они всегда максимизируют все свои блоки данных по размеру, даже если у них есть только определенное количество записей каталога. Это нормально для каталогов, потому что, в отличие от файлов, каталоги обычно ограничены по размеру и скорости роста.
Сообщенный размер каталогов 4096 - это номер «файла», хранящийся в индексном дескрипторе каталога, а не количество записей в каталоге. Это не фиксированное число - это максимальное количество байтов, которое уместится в выделенное количество блоков для каталога. Обычно это 512 байт / блок, умноженное на 8 блоков, выделенных для файла с любым содержимым - кстати, для каталогов размер файла и выделенный размер одинаковы. Поскольку он выделен как единая группа, оптимизатор файловой системы не будет перемещать свои блоки.
По мере роста каталога ему назначается больше блоков данных, и он также будет максимально этих блоков путем соответствующей корректировки размера файла.
Итак, ls
и stat
покажут поле размера файла inode каталога, которое установлено равным размеру назначенных ему блоков данных.
Предполагается, что Linux (не FreeBSD ... ).
Это должно отключить специальные функции Alt+Left или Alt+Right, оставив только клавиши Alt+Fn для смены консоли. Его следует запускать на консоли, и для загрузки новой раскладки требуется root :
.dumpkeys > backup-keymap
dumpkeys | sed 's/Decr_Console/Left/g;s/Incr_Console/Right/g' | loadkeys
Для возврата используйте loadkeys < backup-keymap
или перезапустите какой-либо инструмент настройки системной клавиатуры.
Я не знаю, как правильно интегрировать это при загрузке в раскладку клавиатуры. Это может зависеть от дистрибутива (и при использовании systemd...)
Файл/etc/console-setup/remap.inc
в Debian может дать больше подсказок о том, как правильно переопределить клавиатуру вместо этих низкоуровневых команд в Debian.