Я никогда этого не понимал, потому что, если у вас есть доступ для чтения файла, разве это не значит, что вы сможете скопировать его в другое место, тем самым позволяя выполнить его в любом случае?
Что мне не хватает?
Флаг Executable указывает ядру, что данные следует прочитать, а затем запустить. Это реализовано с помощью другого вызова выполнение что-то и чтение что-то. Для скомпилированных программ вполне возможно иметь доступ только для выполнения и не иметь доступа для чтения; вы не можете даже "cp" их в другом месте. Для интерпретируемых элементов, таких как сценарии оболочки, чтение необходимо для выполнения.
Я знаю один дистрибутив Linux, который использует флаг выполнения для управления тем, какие скрипты запускаются при загрузке.
Вкратце, флаг Execute используется для обозначения возможности скомпилированный код бежать. Истолкованный код запускается через родительский процессор и может потребовать только «чтения».
Разве это не означает, что вы сможете скопировать его где-нибудь еще, что позволит вам в любом случае выполнить?
Нет, это не так.
Существуют сценарии, когда вы не можете выполнить файл, даже если для него установлен исполняемый бит. Вот как минимум два из них:
Некоторые возможные причины:
Наверное, есть и другие причины ...