J'ai écrit un programme C++ et je me suis conformé pour produire un fichier a.out. Cependant, chaque fois que j'essaye de l'exécuter, je reçois une autorisation refusée. J'ai lu que nous pouvons utiliser Sudo, mais je ne parviens pas à le faire fonctionner. J'utilise quelque chose comme, Sudo "./a.out" mais cela ne fonctionne pas non plus.
Edit:
Voici le message que je reçois quand j'essaie "./a.out".
bash: ./a.out: Permission denied
g++
donne généralement les autorisations d'exécution du fichier créé. Si vous ne passez pas l'option -o
, le fichier s'appellera a.out
.
Deux raisons possibles pour lesquelles votre fichier n'a pas le bit d'exécution défini, avec leurs solutions:
La valeur mask value est définie sur une valeur telle que 0133, ce qui empêche la définition du bit d'exécution. Solution: définir explicitement les autorisations:
chmod 755 a.out
fmask=0022
ou umask=0022
(en omettant fmask
). Voir la section Options de montage pour fat sur page de manuel du montage pour plus de détails.Pour les scripts bash pour lesquels le bit d'exécution n'est pas défini, vous pouvez exécuter bash file.sh
. Une telle fonctionnalité existe pour tous les fichiers avec un contenu exécutable (fichiers compilés et fichiers avec un ensemble Shebang line #!/path/to/interpreter
). Pour exécuter des fichiers sans le bit d'exécution défini, utilisez le fichier spécial /lib/ld-linux.so.2
(ou /lib/ld-linux-x86-64.so.2
pour les applications 64 bits) pour exécuter un tel programme:
/lib/ld-linux-x86-64.so.2 a.out
.out est une extension inhabituelle. Habituellement, cela signifie normalement un fichier "de sortie de trace".
Vérifiez la syntaxe que vous utilisez pour compiler
par exemple.
gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename
ou peut-être
g++ myfile.cpp -lm -o outputfilename
Vous pouvez devrait examiner pour voir si le bit exécutable est défini sur le fichier
ls -l a.out
ou vous pouvez simplement forcer le bit exécutable
chmod +x a.out
alors vous pouvez exécuter votre fichier
./a.out
ou simplement
a.out
Vous devriez peut-être aussi vérifier que le fichier de sortie a été écrit correctement en tant que fichier binaire.
c'est à dire.
file a.out
Cela indiquera le format du fichier - un script ou un fichier binaire
Vous devez rarement exécuter en tant que root, sauf si vous avez limité le nombre de personnes pouvant exécuter l’exécutable.
Si vous avez compilé en tant que root (par exemple Sudo make), ou si vous avez un fichier Makefile qui a installé l'exécutable en tant que root, puis-je vous suggérer de récupérer l'autorisation en tant qu'utilisateur connecté
c'est à dire.
Sudo chown fred:fred a.out
c'est-à-dire remplacer "fred" par votre identifiant d'utilisateur.
copiez simplement le dossier dans votre dossier personnel et cela fonctionnera. Vous essayez probablement de l'exécuter sur un lecteur externe ou quelque chose.
La solution de contournement pour les systèmes de fichiers FAT dans la première réponse
"Cela pourrait être le cas si vous déposez des fichiers sur un lecteur flash au format FAT32. Solution: (...) montez le lecteur avec fmask = 0022 ou umask = 0022 (en omettant fmask)."
normalement ne fonctionne pas - la valeur par défaut pour umask est généralement 0022 de toute façon, donc cela ne change rien.
Cependant, la valeur par défaut d'un autre paramètre de montage interdit efficacement l'exécution des fichiers binaires, en particulier si le système de fichiers FAT est monté en tant qu'utilisateur non root: noexec
Il suffit donc de monter des lecteurs au format FAT avec l’option exec
comme ceci:
Sudo mount -o exec /dev/sd.. /mountpoint
(ceci doit normalement être fait en tant que root, d’où le "Sudo") et vous devriez pouvoir exécuter des binaires directement à partir de là.