While executing programs in Unix, a common problem which is encountered is the bash: ./program_name: permission denied error. The error usually occurs when the script you are trying to execute does not have the necessary permissions. Modifying the permissions of the script or assigning the correct ones will fix the error.
Let us look into the details of the error and also its solution.
The permission denied error is encountered when the script you are running does not have the execute permission. Unix and similar operating systems usually not execute a shell script if it does not have the permission to execute.
Look at the following example -
# /opt/myscript.sh bash: /opt/myscript.sh: Permission denied
In this program, the error is raised as the script “myscript.sh” does not have execute permission.
To check the permissions assigned to a file, type in the following command in the command line –l
s -l myscript.sh # ls -l myscript.sh -rw-r--r-- 1 root root 6 Jun 17 06:40 myscript.sh $getfacl myscript.sh # file: m.sh # owner: root # group: root user::rw- group::r-- other::r--
In the above result, you can see that the script only has read and write permissions, but no execute permissions (denoted by x). Hence, the file cannot be executed.
The only way to fix the error is to change the file permission settings of the script. You can do this using the chmod command, which stands for change mode. Look at the two commands –
Chmod references include:
chmod +x myscript.sh # ls -l myscript.sh -rwxr-xr-x 1 root root 6 Jun 17 06:40 myscript.sh
Here, the chmod command assigns execute permission to every user, as no specific reference is mentioned. After running the script you can see that execute permission was assigned to the file.
You can check this by running the getfacl command. The getfacl command is used for displaying the file name, owner’s name, file group and the Access Control List (ACL). The default ACL will also be displayed.
$ getfacl myscript.sh # file: myscript.sh # owner: root # group: root user::rwx group::r-x other::r-x
After running this script, this is the final result –