Ubuntu sagt "bash: ./program Berechtigung verweigert" [geschlossen]

205

Ich führe Ubuntu auf Computer 1 und Computer 2 aus. Ich habe ein C ++ - Programm auf Computer 1 kompiliert und kann es vom Terminal aus ausführen ./program_name. Es läuft gut.

Wenn ich dies jedoch auf Computer 2 versuche, heißt es: bash: ./program_name: permission denied

Was ist los und was kann ich dagegen tun?

Kian
quelle
7
Haben Sie Ausführungsberechtigungen progam_name?
Fedorqui 'SO hör auf zu schaden'
1
Wie haben Sie das Programm von Computer 1 auf Computer 2 gebracht? Haben Sie die ausführbare Datei kopiert oder den Quellcode neu kompiliert? Was ist die Ausgabe des Befehls "ls -l Programmname"?
Eric Postpischil
2
Dies scheint für SO kein Thema zu sein, da es nicht um Programmierung, sondern um Rechteverwaltung unter Linux geht
Nijansen
4
versuchenbash program_name
Nadjib Mami
9
Ich habe eine .shDatei geschrieben. Es wurde abgelehnt, mit dieser Fehlermeldung ausgeführt zu werden. Ich würde sagen, dass dies definitiv ein Thema für StackOverflow ist. Ich habe für die Wiedereröffnung nominiert.
ArtOfWarfare

Antworten:

391

chmod u+x program_name. Dann führen Sie es aus.

Wenn dies nicht funktioniert, kopieren Sie das Programm vom USB-Gerät auf ein natives Volume auf dem System. Dann chmod u+x program_nameauf der lokalen Kopie und führen Sie das aus.

Unix- und Unix-ähnliche Systeme führen ein Programm im Allgemeinen nur aus, wenn es mit der Berechtigung zur Ausführung gekennzeichnet ist. Die Art und Weise, wie Sie die Datei von einem System auf ein anderes kopiert (oder ein externes Volume bereitgestellt) haben, hat möglicherweise die Ausführungsberechtigung deaktiviert (als Sicherheitsfunktion). Der Befehl chmod u+x namefügt dem Benutzer, dem die Datei gehört, die Berechtigung zum Ausführen hinzu.

Dieser Befehl ändert nur die mit der Datei verknüpften Berechtigungen. Die Sicherheitskontrollen für das gesamte Volume werden nicht geändert. Wenn Sicherheitskontrollen auf dem Volume die Ausführung beeinträchtigen (z. B. noexeckann für ein Volume in der Unix- fstabDatei eine Option angegeben werden, die besagt, dass keine Ausführungsberechtigung für Dateien auf dem Volume zulässig ist), können Sie das Volume erneut bereitstellen mit Optionen, um die Ausführung zu ermöglichen. Das Kopieren der Datei auf ein lokales Volume kann jedoch eine schnellere und einfachere Lösung sein.

Eric Postpischil
quelle
3
Früher dachte ich, dass dies nur auf nativen Nicht-Unix / Linux-Partitionen wie FAT32 passieren würde und nicht auf /tmp. Es stellt sich heraus, dass meine tmpfs das /tmpgleiche Problem haben und ich die ausführbare Datei auf ein echtes natives Volume kopieren muss, dh meinen Home-Ordner ~ in einer ext4-Partition.
RayLuo
13
Ich bin heute auf dieses Problem gestoßen, also STFW, das erste Suchergebnis ist in lila Farbe, was bedeutet, dass ich das schon einmal gelesen habe. "Das ist ein vielversprechendes Zeichen", sprach ich mit mir selbst und klickte dann auf das Suchergebnis. Es brachte mich zu dieser Seite, dieser Antwort, die in meinem Fall nicht funktioniert, und schließlich dem Kommentar, der oben funktioniert. Und dann bemerke ich, dass ich vor 2 Monaten einen Kommentar geschrieben habe. Wow, was für ein Leben.
RayLuo
5
Entschuldigen Sie, dass Sie diese Frage / Antwort huckepack genommen haben ... bitte denken Sie auch, dass sich möglicherweise noexec in fstab befindet, das das Laufwerk ohne Ausführungsberechtigungen bereitstellt ... "Ich habe gehört", dass "einige Leute" ziemlich viel Zeit verloren haben, danach zu suchen. ..
Simon Opelt
1
@Webman: chmodmacht eine dauerhafte Änderung. Wenn sich die Berechtigungen ändern, nachdem Sie chmodsie aktiviert haben, werden sie durch etwas anderes geändert . (Dies kann etwas anderes beinhalten, das die Datei löscht und neu erstellt, oder das Volume, auf dem die Datei bereitgestellt und erneut bereitgestellt wird. Wenn das Volume erneut bereitgestellt wird, gibt es Möglichkeiten, Standardberechtigungen für Dateien auf externen Volumes anzugeben, dies liegt jedoch außerhalb des Bereichs Ich kann jetzt antworten.)
Eric Postpischil
2
@ SimonOpelt "andere Leute" sind dankbar
Matt Jacobsen
32

Versuche dies:

sudo chmod +x program_name
./program_name 
Vitor Villar
quelle
Danke für deinen Rat. Ich habe es gerade versucht - aber jetzt heißt es bash: ./program_name kann keine Binärdatei ausführen
Kian
Könnte es sein, dass Computer 2 32 Bit und Computer 1 64 Bit ist? Ich denke, vielleicht sollte ich es einfach auf Computer 2 kompilieren. Vielen Dank für Ihre Hilfe an alle.
Kian
Ja, wenn Sie ein Programm in 64 Bit kompilieren und versuchen, es in einem System mit 32 Bit auszuführen, funktioniert dies nicht. Sie müssen den Quellcode auf dem Computer 2 neu kompilieren.
Vitor Villar
sudoist im Allgemeinen nicht erforderlich, es sei denn, das Programm befindet sich in einem Verzeichnis, in dem Sie keine Schreibberechtigung haben (in welchem ​​Fall, wie haben Sie es dort überhaupt installiert?)
Tripleee
10

Klingt so, als hätten Sie das Ausführungsflag für die Dateiberechtigungen nicht gesetzt. Versuchen Sie Folgendes:

chmod u+x program_name
Sam Roberts
quelle