Wenn ich versuche zu rennen, habe ./script.sh
ich, Permission denied
aber wenn ich bash script.sh
renne, ist alles in Ordnung.
Was habe ich falsch gemacht?
bash
shell-script
permissions
mount
Piotr Stapp
quelle
quelle
getfacl script.sh
?Antworten:
Falsche POSIX-Berechtigungen
Dies bedeutet, dass Sie nicht über das gesetzte Ausführungsberechtigungsbit verfügen
script.sh
. Beim Laufenbash script.sh
benötigen Sie nur Leserechte fürscript.sh
. Siehe Was ist der Unterschied zwischen dem Ausführen von "bash script.sh" und "./script.sh"? Für mehr Information.Sie können dies überprüfen, indem Sie ausführen
ls -l script.sh
.Möglicherweise müssen Sie nicht einmal einen neuen Bash-Prozess starten. In vielen Fällen können Sie die Skriptbefehle einfach in Ihrer aktuellen interaktiven Shell ausführen
source script.sh
oder. script.sh
ausführen. Sie möchten wahrscheinlich einen neuen Bash-Prozess starten, wenn das Skript das aktuelle Verzeichnis ändert oder auf andere Weise die Umgebung des aktuellen Prozesses ändert.Zugriffssteuerungslisten
Wenn die POSIX-Berechtigungsbits korrekt gesetzt sind, wurde die Zugriffssteuerungsliste (Access Control List, ACL) möglicherweise so konfiguriert, dass Sie oder Ihre Gruppe die Datei nicht ausführen können. Beispielsweise würden die POSIX-Berechtigungen anzeigen, dass das Test-Shell-Skript ausführbar ist.
Der Versuch, die Datei auszuführen, führt jedoch zu folgenden Ergebnissen:
Der
getfacl
Befehl zeigt den Grund warum:In diesem Fall handelt es sich bei meiner primären Gruppe um eine Gruppe,
domain users
der Ausführungsberechtigungen entzogen wurden, indem die ACL mit eingeschränkt wurdesudo setfacl -m 'g:domain\040users:rw-' t.sh
. Diese Einschränkung kann durch einen der folgenden Befehle aufgehoben werden:Sehen:
Dateisystem gemountet mit noexec Option
In diesem speziellen Fall kann das Skript nicht ausgeführt werden, da das Dateisystem, auf dem sich das Skript befindet, mit der
noexec
Option bereitgestellt wurde. Diese Option überschreibt POSIX-Berechtigungen, um zu verhindern, dass Dateien auf diesem Dateisystem ausgeführt werden.Dies kann durch Ausführen
mount
von überprüft werden, um alle bereitgestellten Dateisysteme aufzulisten. Die Mount-Optionen sind in Klammern in dem dem Dateisystem entsprechenden Eintrag aufgeführt, zSie können das Skript entweder in ein anderes bereitgestelltes Dateisystem verschieben oder das Dateisystem erneut bereitstellen, um die Ausführung zu ermöglichen:
Hinweis: Ich habe verwendet
/tmp
hier als Beispiel , da es gut aus Sicherheitsgründen für Haltung/tmp
mit montiertemnoexec,nodev,nosuid
Reihe von Optionen.quelle
Versuchen
chmod 755 script.sh
Dadurch wird die Datei ausführbar. Dann versuche es,
./script.sh
Hoffe das wird funktionieren.
quelle
Auf meinem win7 mit Admin läuft cmd; Ich habe .sh-Dateien im Zusammenhang mit cygwin64 / bin / bash, aber es wurde von cmd blockiert. Keiner der obigen Vorschläge hat geholfen (chmod, setfacl, mount).
Die folgende Lösung hat funktioniert, es ist ein Admin-Sledge-Hammer-Acl-Fixer, wenn Ordner / Dateien auf win7 nicht mehr für Administratoren zugänglich sind (was häufig der Fall ist):
quelle