Ubuntu dit «bash: ./program Permission refusée» [fermé]

207

J'exécute Ubuntu sur l'ordinateur 1 et l'ordinateur 2. J'ai compilé un programme C ++ sur l'ordinateur 1 et je peux l'exécuter à partir du terminal en utilisant ./program_name. Ça marche bien.

Cependant, lorsque j'essaie de le faire sur l'ordinateur 2, il dit: bash: ./program_name: permission denied

Qu'est-ce qui ne va pas et que puis-je faire?

Kian
la source
7
Avez-vous des autorisations pour exécuter progam_name?
fedorqui 'SO arrête de nuire'
1
Comment avez-vous obtenu le programme de l'ordinateur 1 à l'ordinateur 2? Avez-vous copié l'exécutable ou recompilé le code source? Quelle est la sortie de la commande "ls -l nom_programme"?
Eric Postpischil
2
Cela semble être hors sujet pour SO, car il ne s'agit pas de programmation mais de gestion des droits sous Linux
nijansen
4
essayerbash program_name
Nadjib Mami
10
J'ai écrit un .shfichier. Il a refusé de s'exécuter avec ce message d'erreur. Je dirais que c'est définitivement le sujet de StackOverflow. J'ai proposé ma réouverture.
ArtOfWarfare

Réponses:

392

chmod u+x program_name. Ensuite, exécutez-le.

Si cela ne fonctionne pas, copiez le programme du périphérique USB vers un volume natif sur le système. Ensuite, chmod u+x program_namesur la copie locale et exécutez cela.

Les systèmes Unix et Unix-like n'exécuteront généralement pas un programme à moins qu'il ne soit marqué d'une autorisation d'exécution. La façon dont vous avez copié le fichier d'un système à un autre (ou monté un volume externe) peut avoir désactivé l'autorisation d'exécution (par mesure de sécurité). La commande chmod u+x nameajoute l'autorisation à l'utilisateur propriétaire du fichier de l'exécuter.

Cette commande modifie uniquement les autorisations associées au fichier; il ne modifie pas les contrôles de sécurité associés à l'intégralité du volume. Si ce sont des contrôles de sécurité sur le volume qui interfèrent avec l'exécution (par exemple, une noexecoption peut être spécifiée pour un volume dans le fstabfichier Unix , qui dit de ne pas autoriser l'exécution pour les fichiers du volume), alors vous pouvez remonter le volume avec des options pour permettre l'exécution. Cependant, la copie du fichier sur un volume local peut être une solution plus rapide et plus facile.

Eric Postpischil
la source
3
Je pensais que cela ne se produirait que sur des partitions natives non Unix / Linux telles que FAT32, et ne se produirait pas /tmp. Il s'avère que mon tmpfs /tmpsouffre du même problème, et je dois copier le fichier exécutable dans un vrai volume natif, c'est-à-dire mon dossier personnel ~ dans une partition ext4.
RayLuo
13
J'ai rencontré ce problème aujourd'hui, donc je STFW, le premier résultat de la recherche est de couleur violette, ce qui signifie que j'ai lu cela auparavant. "C'est un signe prometteur", me suis-je parlé, puis j'ai cliqué sur ce résultat de recherche. Cela m'a amené à cette page, cette réponse qui ne fonctionne pas dans mon cas, et enfin le commentaire ci-dessus qui fonctionne. Et puis je remarque que ce commentaire a été écrit par moi, il y a 2 mois. Wow, quelle vie.
RayLuo
5
Désolé pour le ferroutage sur ce Q / A ... pensez également que noexec est peut-être dans fstab qui monte le disque sans aucun privilège d'exécution ... "J'ai entendu" que "certaines personnes" ont perdu pas mal de temps à chercher cela. ..
Simon Opelt
1
@Webman: chmodapporte un changement durable. Si les autorisations changent une fois que vous les avez utilisées chmodpour les activer, quelque chose d'autre les modifie. (Cela peut inclure la suppression et la recréation du fichier ou le volume sur lequel le fichier est démonté et remonté. Si le volume est remonté, il existe des moyens de spécifier des autorisations par défaut pour les fichiers sur des volumes externes, mais cela dépasse la portée Je peux répondre maintenant.)
Eric Postpischil
2
@SimonOpelt "les autres" sont reconnaissants
Matt Jacobsen
32

Essaye ça:

sudo chmod +x program_name
./program_name 
Vitor Villar
la source
Merci pour vos conseils. Je viens d'essayer cela - mais maintenant il dit bash: ./program_name ne peut pas exécuter le fichier binaire
Kian
Serait-ce parce que l'ordinateur 2 est 32 bits et l'ordinateur 1 est 64 bits? Je suppose que je devrais peut-être simplement le compiler sur l'ordinateur 2. Merci pour votre aide à tous.
Kian
Oui, si vous compilez un programme en 64 bits et essayez de l'exécuter dans un système 32 bits, cela ne fonctionne pas. vous devez recompiler le code source sur l'ordinateur 2.
Vitor Villar
sudon'est généralement pas nécessaire, sauf si le programme se trouve dans un répertoire où vous n'avez pas la permission d'écrire (dans ce cas, comment l'avez-vous installé là-bas en premier lieu?)
tripleee
10

On dirait que vous n'avez pas le drapeau d'exécution défini sur les autorisations de fichier, essayez:

chmod u+x program_name
Sam Roberts
la source