Что делает разрешение «выполнить»?

31

Я шокирован тем, что до сих пор не понимаю разрешения «Выполнить» в Linux.

Есть три разрешения - читать, писать и выполнять. Я понимаю, что читать и писать буквально, но что делать выполнить точно?

Допустим, у меня есть example.phpразрешение на выполнение. Что я могу сделать с example.php?

user45326
источник

Ответы:

32

По сути это означает, что вы можете указать операционной системе запустить код в файле. Например, если файл был двоичным исполняемым файлом, доступ на запись позволил бы вам изменить его, доступ на чтение позволил бы вам просмотреть его, но без разрешений на выполнение вы не сможете запустить программу. В случае сценария это немного сложнее, поскольку вам не обязательно «запускать» программу, вы можете просто прочитать ее содержимое в интерпретаторе, который сам по себе имеет привилегию выполнения, но вам не нужно выполнять команду разрешения на сам скрипт.

Некоторые скрипты в Linux сами по себе исполняемые, вы часто будете видеть строку вверху, как

#! / bin / bash или

#! / Bin / питон

Эта строка сообщает ядру, что файл можно запустить, вызвав соответствующую программу (а не просто текст). Тогда вы можете просто запустить свой скрипт как

./script

вместо того, чтобы делать

Python ./script

БДК
источник
Что это значит для нетекстовых типов файлов, например. .pngили .avi?
Ионо
1
В основном то же самое, расширение файла не имеет значения. Если у вас есть #!/bin/bashв начале вашего .aviфайла, он будет выполнен как bash. Если это настоящий формат avi, вы, вероятно, не сможете его запустить, потому что интерпретировать его как команды не имеет смысла и не удастся.
Mifeet
Действительно #!ли интерпретируется ядром?
masterxilo
17

«execute» позволяет пользователю выполнять исполняемые файлы. Для каталогов это разрешение на вход в каталог с помощью команды cd.

Фил Рыкофф
источник
1
Этот доступ к части каталога огромен. Вы бы никогда не догадались, просто по названию самого режима.
старик
2

В практических целях разрешение на чтение подразумевает способность выполнять.

Однако обратное неверно; есть некоторая ценность в способности давать разрешение на выполнение кода без разрешения на его чтение.

Адам Ли
источник
Это действительно имеет большой смысл.
masterxilo
У меня была путаница с READ / EXECUTE, и я ожидал такого ответа. спасибо
Т.Тодуа
2

Это для запуска приложений из графического интерфейса или командной строки. Для «нормального» использования php (через веб-сервер) это ничего не меняет. Точнее говоря, это зависит от конфигурации, но в большинстве случаев вам не нужно разрешение + x, чтобы разрешить загрузку вашей веб-страницы php через браузер.

Для запуска из командной строки вам необходимо:

  • добавить #!/usr/bin/phpв начале скрипта
  • добавить + х разрешение
  • ваш сценарий должен находиться в вашем исполняемом пути поиска (переменная среды $ PATH), или вы должны указать каталог, в котором он находится, перед именем вашего сценария. Это может быть абсолютный путь, например /etc/xdg/fooили /home/fred/barили относительный каталог, например dir1/prog1или ./prog2.
Maciek Sawicki
источник