Если бит suid не влияет на каталоги, а бит закрепления не влияет на файлы, почему они не объединены в один бит?

18

Сохранит ли это один бит на файл, или в любом случае есть необходимость в заполнении? И даже если есть отступы, почему бы не объединить их и не использовать дополнительный бит для новой функции?

Гарри
источник
3
Липкий бит что-то делает с обычными файлами. Смотрите en.wikipedia.org/wiki/Sticky_bit, чтобы узнать о том, как он используется.
Джошуа
@ Joshua Это интересно, и хорошо, что на не-Linux * никсах поведение меняется. Но я имел в виду Linux для этого вопроса. Интересно, может ли кто-нибудь в ядре Linux с BSD amd и ls все еще зависеть от бита липкого файла? И я полагаю, что различные пользовательские программы могли бы проверять / действовать на него, даже если я не знаю каких-либо распространенных, которые делают.
Гарри

Ответы:

26

По историческим причинам. Фиксированный бит изначально использовался для совершенно другой цели: если он был установлен в исполняемом файле, он велел операционной системе сохранить текстовый сегмент в swap. Таким образом, название "Sticky Bit".

Йохан Мирен
источник
Спасибо, но значит ли это, что они по-прежнему «внутри»? Или однобитная экономия просто недостаточна для каждого файла?
Гарри
6
Исполняемый файл может иметь все четыре комбинации suid и sticky.
Johan Myréen
Да, отсюда и оригинальный вопрос. Может быть, лучше сформулировать, почему имя (или прошлое использование) закрепленного бита как-то связано с сочетанием его с битом suid сегодня? Не могли ли функции обоих битов быть объединены в один бит «липкий / suid», который работает как suid, когда установлен на файлах, но закреплен, когда установлен на каталогах?
Гарри
17
Вы бы сломали обратную совместимость, если бы сдвинули биты. chmod 4755 fileустанавливает бит suid и chmod 1755 dirустанавливает бит закрепления. Мы не хотим ломать старые скрипты только ради сохранения одного бита на файл, не так ли? Конечно, внутренне файловая система свободна для реализации вашей оптимизации, если внешний интерфейс остается прежним.
Йохан Мирен
6
@Johan Myréen: И, конечно, вы на самом деле не сохраните этот бит, он станет просто неиспользованным битом в поле разрешения байта / слова.
jamesqf