25

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

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

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

4 ответа4

28

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

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

#!/bin/bash или

#!/ Bin / питон

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

./script

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

Python ./script

16

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

2

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .