What does the "execute" permission do?

33

8

I am shocked that I still don't understand "Execute" permission in Linux.

There are three permission - read, write, and execute. I understand that read and write literally, but what does execute do exactly?

Let's say I have example.php with execute permission. What can I do with example.php?

user45326

Posted 2010-03-09T00:09:19.167

Reputation: 1 623

Answers

34

Basically it means you can tell the operating system to run the code in the file. For example, if the file was a binary executable, write access would allow you to modify it, read access would allow you to view it, but without execute permissions you would not be able to run the program. In the case of a script, its a little more complicted, because you don't necessarily need to 'run' the program, you can just read its contents into an interpreter, which itself has the execute privelige, but you do not need execute permissions on the script itself.

Some scripts in Linux are themselves executable, you will often see a line at the top like

#!/bin/bash or

#!/bin/python

That line tells the kernel that the file can be executed by calling the relevant program (and isn't just text). Then you can just run your script like

./script

instead of having to do

python ./script

bdk

Posted 2010-03-09T00:09:19.167

Reputation: 831

1What does this mean for non text-based filetypes eg. .png or .avi? – iono – 2014-07-17T06:10:17.430

1Basically the same, the file extension doesn't matter. If you have #!/bin/bash at the beginning of your .avi file, it will be executed as bash. If it is a real avi format, you probably won't be able to run it because interpreting it as commands will not make sense and fail. – Mifeet – 2015-08-19T14:19:28.853

Is the #! really interpreted by the kernel? – masterxilo – 2017-12-21T12:50:19.053

18

"execute" allows the user to execute executables. For directories it is the allowance to enter the directory using the cd command.

Phil Rykoff

Posted 2010-03-09T00:09:19.167

Reputation: 291

1That access to directory part is huge. You would never guess that just from the name of mode itself. – oldboy – 2018-03-24T04:11:15.157

3

It's for running apps from GUI or command line. For "normal" php use (via webserver), that doesn't change anything. Precisely speaking, it depends on configuration, but in most common cases you don't need +x permission to allow loading your php webpage via browser.

For running from command line you need:

  • add #!/usr/bin/php at the script beginning
  • add +x permission
  • your script must be in your executable search path ($PATH environment variable) or you have to specify the directory that it is in before your script name.  This could be an absolute pathname, like /etc/xdg/foo or /home/fred/bar, or a relative directory, like dir1/prog1 or ./prog2.

Maciek Sawicki

Posted 2010-03-09T00:09:19.167

Reputation: 1 072

3

For practical purposes, permission to read implies ability to execute.

However the opposite is not true; there is some value in the ability to give permission to execute code without giving permission to read it.

Adam Lee

Posted 2010-03-09T00:09:19.167

Reputation: 131

This actually makes a lot of sense. – masterxilo – 2017-12-21T12:58:00.537

I had a confusion with READ/EXECUTE, and expected such answer. thanks – T.Todua – 2019-06-23T19:42:46.040