Ich habe über chmod und seine Oktalmodi nachgelesen. Ich habe diesen 1
gesehen wird nur ausgeführt. Was ist ein gültiger Anwendungsfall für eine Nur-Ausführen-Berechtigung? Um eine Datei auszuführen, benötigt man normalerweise eine Lese- und Ausführungsberechtigung.
$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo
Akzeptierte Antwort:
Shell-Skripte erfordern die Leseberechtigung, um ausgeführt zu werden, aber Binärdateien nicht:
$ cat hello.cpp
#include<iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission
Den Inhalt einer Datei anzuzeigen und auszuführen sind zwei verschiedene Dinge. Bei Shell-Skripten sind diese Dinge verwandt, weil sie „ausgeführt“ werden, indem sie in eine neue Shell (oder die aktuelle) „eingelesen“ werden, wenn Sie die Vereinfachung verzeihen. Aus diesem Grund muss man sie lesen können. Binärdateien verwenden diesen Mechanismus nicht.
Für Verzeichnisse ist die Ausführungsberechtigung etwas anders; es bedeutet, dass Sie innerhalb Dinge mit Dateien tun können dieses Verzeichnis (z. B. lesen oder ausführen). Nehmen wir also an, Sie haben eine Reihe von Tools in /tools
die Menschen verwenden können sollen, aber nur, wenn sie davon wissen. chmod 711 /tools
. Dann ausführbare Dinge in /tools
kann explizit ausgeführt werden (z. B. /tools/mytool
), aber ls /tools/
wird verweigert. Ebenso könnten Dokumente in /private-docs
gespeichert werden die gelesen werden könnten, wenn und nur wenn die Dateinamen bekannt sind.