Permission refusée
Afin d'exécuter un script le fichier doit avoir un bit de permission exécutable activé .
Afin de bien comprendre Linux autorisations de fichiers vous pouvez étudier la documentation relative au chmod
commandement. chmod , une abréviation de mode de changement est la commande qui est utilisée pour modifier les paramètres de permission d'un fichier.
Pour lire la documentation chmod pour votre système local, exécutez man chmod
ou info chmod
à partir de la ligne de commande. Une fois lu et compris, vous devriez être en mesure de comprendre le résultat de l'exécution ...
ls -l foo.sh
... qui donnera la liste des autorisations de LECTURE, d'ÉCRITURE et d'EXÉCUTION pour le propriétaire du fichier, le propriétaire du groupe et toute autre personne qui n'est pas le propriétaire du fichier ou un membre du groupe auquel le fichier appartient (ce dernier groupe d'autorisation est parfois appelé "monde" ou "autre").
Voici un résumé de la manière de dépanner le Erreur "Permission refusée dans votre cas.
$ ls -l foo.sh # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
^^^ | ^^^ ^^^^^^^ ^^^^^
| | | | |
Owner| World | |
| | Name of
Group | Group
Name of
Owner
Le propriétaire a un accès en lecture et en écriture rw mais le - indique que l'autorisation d'exécution est manquante.
Le site chmod
corrige ce problème. (Les groupes et autres n'ont que la permission de lire le fichier, ils ne peuvent pas y écrire ou l'exécuter).
$ chmod +x foo.sh # The owner can set the executable permission on foo.sh
$ ls -l foo.sh # Now we see an x after the rw
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
^ ^ ^
foo.sh est maintenant exécutable pour ce qui est de Linux.
L'utilisation de sudo donne comme résultat Command not found
Lorsque vous exécutez une commande en utilisant sudo vous l'exécutez effectivement en tant que superutilisateur ou Root.
La raison pour laquelle l'utilisateur Root ne trouve pas votre commande est probablement que le fichier PATH
pour Root ne comprend pas la variable d'environnement où foo.sh
est situé . La commande n'est donc pas trouvée.
La variable d'environnement PATH contient une liste de répertoires qui sont recherchés pour les commandes. Chaque utilisateur définit sa propre variable PATH en fonction de ses besoins. Pour voir ce qu'elle contient, exécutez
env | grep ^PATH
Voici quelques exemples de résultats de l'exécution de la commande ci-dessus. env
d'abord en tant qu'utilisateur ordinaire et ensuite en tant qu'utilisateur racine en utilisant sudo
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Notez que, bien que similaires, dans ce cas les répertoires contenus dans le PATH de l'utilisateur non-privilégié (rkielty) et du super utilisateur sont pas la même chose .
Le répertoire dans lequel foo.sh
n'est pas présent dans la variable PATH de l'utilisateur Root, d'où l'utilisation de la commande commande non trouvée erreur.