Как bash делает файл исполняемым?

Как bash делает файл исполняемым?

Я знаю, что когда я запускаю команду

chmod +x filename

bash сделает мой файл исполняемым. Что именно происходит с архитектурой файла, чтобы сделать его исполняемым? т.е. как ядро ​​узнает, что этот файл исполняемый?

Просто пытаюсь потренировать свои ботанские мускулы.

решение1

«Архитектура» файлане меняется– вам нужно убедиться, что он имеет правильный формат. То есть, файлужедолжен быть допустимым двоичным файлом ELF, или скриптом с допустимым #!заголовком, или чем-то другим, что распознается вашим конкретным ядром (например, a.out или MZ/PE).

Что chmodпроисходит, так это просто установка бита в правах доступа к файлу, сообщающего ядру, что пользовательдопустимыйдля выполнения этого файла. Он может действовать как небольшой барьер безопасности, а также предотвращать определенные виды аварий. (Обратите внимание, что +xздесь сокращение для ugo+x; это бит разрешения, как и чтение/запись.)

Если вы установите +x для файла, который ядро ​​не распознает, оно просто вернет код ошибки из execсистемного вызова. (Обратите внимание, что некоторые оболочки имеют специальную обработку для этого — если ядро ​​сообщило о «нераспознанном формате», оболочка попытается интерпретировать файл как скрипт.внутренне, так как именно так раньше работали скрипты #!оболочкиизобретенный.)

решение2

Содержимое файла не меняется вообще. Файловые системы, разработанные для типичного Unix, будут поддерживать хранение информации о каждом файле. Это часто называют «метаданными» файла.

Вот почему вы не получите похожих результатов с некоторыми файловыми системами. А именно, FAT не имеет встроенного пространства, предназначенного для хранения данных, связанных с разрешениями Unix, и Unix обычно обходит это, используя специальный параметр при монтировании такого тома файловой системы. Поэтому обычно все файлы на диске FAT имеют одинаковые разрешения, указанные при монтировании. (Я бы ожидал похожего поведения для других файловых систем, таких как ISO9660, хотя она, вероятно, обычно недоступна для записи.) На томах, смонтированных таким образом, использование chmod +xфактически ничего не изменит.

Короче говоря, ядро ​​узнает об этом, проверяя драйвер файловой системы. Для типичных файловых систем, разработанных для unix, этот драйвер поддерживает чтение мест, где хранятся разрешения в стиле Unix.

chmod просто изменяет эти места на диске.

Связанный контент