Що робить дозвіл "виконувати"?


31

Я вражений тим, що досі не розумію дозволу "Виконати" в Linux.

Є три дозволу - читати, писати та виконувати. Я розумію, що читати і писати буквально, але що саме виконується?

Скажімо, у мене є example.phpдозвіл на виконання. Що я можу зробити example.php?

Відповіді:


32

В основному це означає, що ви можете сказати операційній системі запустити код у файлі. Наприклад, якби файл був двійковим виконуваним файлом, доступ до запису дозволив би змінити його, доступ до читання дозволив би переглядати його, але без дозволів на виконання ви не змогли б запустити програму. Що стосується сценарію, то це трохи складніше, тому що не обов'язково «запускати» програму, ви можете просто прочитати її вміст в інтерпретаторі, який сам має привілей для виконання, але виконувати його не потрібно. дозволи на сам сценарій.

Деякі сценарії в Linux самі виконуються, ви часто бачите рядок, як вгорі

#! / bin / bash або

#! / бін / пітон

Цей рядок вказує ядру, що файл можна виконати за допомогою виклику відповідної програми (а це не лише текст). Тоді ви можете просто запустити свій сценарій, як

./скрипт

замість того, щоб робити

python ./script


Що це означає для нетекстових файлів, наприклад. .pngабо .avi?
іоно

1
В основному те саме, розширення файлу не має значення. Якщо у вас є #!/bin/bashна початку вашого .aviфайлу, він буде виконуватися як bash. Якщо це справжній формат avi, ви, ймовірно, не зможете запустити його, оскільки інтерпретувати його як команди не буде сенсом і не вдаватиметься.
Mifeet

Чи #!справді трактується ядро?
masterxilo

17

"Execute" дозволяє користувачеві виконувати виконавчі файли. Для каталогів це дозволить ввести каталог за допомогою команди cd.


1
Цей доступ до частини каталогів величезний. Ви ніколи не здогадаєтесь про це лише від назви самого режиму.
PrimitiveNom

2

У практичних цілях дозвіл на читання передбачає можливість виконання.

Однак навпаки не вірно; є певна цінність у можливості надати дозвіл на виконання коду без надання дозволу на його читання.


Це насправді має багато сенсу.
masterxilo

У мене була плутанина з ПРОЧИТАННЯМ / ВИКОНАННЯ, і я очікував такої відповіді. дякую
T.Todua

2

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

Для запуску з командного рядка вам потрібно:

  • додати #!/usr/bin/phpна початку сценарію
  • додати + x дозвіл
  • ваш сценарій повинен знаходитись у вашому виконуваному шляху пошуку (змінна середовище $ PATH) або вам потрібно вказати каталог, у якому він знаходиться, перед назвою вашого сценарію. Це може бути абсолютна назва шляху, як, /etc/xdg/fooабо /home/fred/bar, або відносна директорія, як dir1/prog1або ./prog2.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.