2017-04-17 2 views
0

Par exemple, j'ai un fichier nommé file2 qui fait écho à quelque chose.Pourquoi est-ce que j'obtiens une 'permission refusée' après avoir utilisé ./file2 sous Linux?

Ainsi, dans la coquille, après avoir tapé cette

# ./file2 

Il montre

Permission denied

Où suis-je pas ici?

+0

Vous essayez d'exécuter un fichier que vous n'avez pas autorisé à. Soit vous n'avez pas les privilèges appropriés, soit le fichier ne peut pas être exécuté. –

+1

Le doublon est une copie de la question dans votre titre - ce qui est une question différente de ce que vous avez dans le corps de la question. –

Répondre

3

Vous essayez d'exécuter un fichier et vous n'avez pas les droits appropriés pour cela. Lorsque vous créez un nouveau script Bash avec votre éditeur de texte (disons Vim), vous devez disposer des autorisations suivantes: -rw-r--r--. En tant qu'utilisateur, vous pouvez ensuite lire et écrire ce fichier, mais vous ne pouvez pas l'exécuter avec ./.

  1. Si vous voulez exécuter un fichier sans changer les autorisations, vous pouvez utiliser la commande suivante: bash myFile.sh.

  2. Si vous souhaitez exécuter un fichier avec ./, vous devrez modifier les autorisations. Quelque chose comme ça est OK: chmod +x myFile.sh. Si vous ne voulez pas lutter avec ./ et préférez appeler myFile.sh à partir de n'importe où, comme d'autres commandes intégrées, déplacez le fichier exécutable dans un répertoire qui se trouve dans votre PATH. /usr/local/bin devrait être un choix judicieux. Vérifiez votre chemin avec echo $PATH, juste au cas où ...

+1

Je suggérerais '$ HOME/bin' est un meilleur choix (de loin) pour les commandes aléatoires. Seules les commandes qui pourraient être utiles à tout le monde sur la machine appartiennent à '/ usr/local/bin'. –

+0

@JonathanLeffler Merci pour votre commentaire. Tu as parfaitement raison. J'ai suggéré '/ usr/local/bin' pour plus de commodité, mais mieux vaut utiliser' $ HOME/bin'. ;) – Badacadabra

1

. fait référence au répertoire de travail courant et .. fait référence au répertoire parent. Donc, ./file2 signifie "exécuter le fichier nommé fichier2 dans le répertoire courant". Sans le ./, le shell cherchera file2 dans tous les répertoires de votre PATH. Si vous voulez l'exécuter, ajoutez le bit d'exécution avec chmod +x ./file2 et réessayez. Si vous voulez juste l'afficher, essayez less ./file2