Permission refusée
Pour exécuter un script, le fichier doit avoir un bit d'autorisation exécutable défini .
Afin de bien comprendre les autorisations des fichiers Linux , vous pouvez étudier la documentation de la chmod
commande. chmod , une abréviation de mode de modification , est la commande utilisée pour modifier les paramètres d'autorisation d'un fichier.
Pour lire la documentation chmod de 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 répertorie les autorisations READ, WRITE et EXECUTE pour le propriétaire du fichier, le propriétaire du groupe et tous les autres qui ne sont pas le propriétaire du fichier ou un membre du groupe auquel appartient le fichier (ce dernier groupe d'autorisations est parfois appelé comme "monde" ou "autre")
Voici un résumé de la façon de résoudre l' erreur Autorisation 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 dispose d'un accès en lecture et en écriture rw mais le - indique que l'autorisation exécutable est manquante
La chmod
commande corrige cela. (Les groupes et autres n'ont que des autorisations de lecture définies sur le fichier, ils ne peuvent pas y écrire ni 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 en ce qui concerne Linux.
L'utilisation de sudo résultats dans la commande introuvable
Lorsque vous exécutez une commande à l'aide de 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 la PATH
variable d'environnement pour root n'inclut pas le répertoire où foo.sh
se trouve . Par conséquent, la commande n'est pas trouvée.
La variable d'environnement PATH contient une liste de répertoires dans lesquels les commandes sont recherchées. Chaque utilisateur définit sa propre variable PATH en fonction de ses besoins. Pour voir ce qu'il est configuré pour s'exécuter
env | grep ^PATH
Voici un exemple de sortie de l'exécution de la env
commande ci-dessus en tant qu'utilisateur ordinaire, puis en tant qu'utilisateur root à l'aide de 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 l'utilisateur non privilégié (rkielty) et le super utilisateur ne sont pas les mêmes .
Le répertoire où foo.sh
réside n'est pas présent dans la variable PATH de l'utilisateur root, d'où l' erreur command not found .