Četl jsem o chmodu a jeho osmičkových režimech. Viděl jsem, že 1
se pouze provádí. Jaký je platný případ použití pro oprávnění pouze ke spuštění? Chcete-li spustit soubor, obvykle potřebujete oprávnění ke čtení a spouštění.
$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo
Přijatá odpověď:
Skripty prostředí vyžadují ke spuštění oprávnění ke čtení, ale binární soubory ne:
$ 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
Zobrazení obsahu souboru a jeho spuštění jsou dvě různé věci. Se skripty shellu tyto věci souvisejí, protože se „provádějí“ „načtením“ do nového shellu (nebo aktuálního), pokud si odpustíte zjednodušení. Proto je musíte umět číst. Binární soubory tento mechanismus nepoužívají.
U adresářů je oprávnění ke spuštění trochu jiné; to znamená, že můžete dělat věci se soubory v rámci tento adresář (např. je číst nebo spouštět). Řekněme tedy, že máte sadu nástrojů v /tools
které chcete, aby je lidé mohli používat, ale pouze pokud o nich vědí. chmod 711 /tools
. Potom spustitelné věci v /tools
lze spustit explicitně (např. /tools/mytool
), ale ls /tools/
bude odepřeno. Podobně lze dokumenty ukládat do /private-docs
které lze číst tehdy a pouze tehdy, jsou-li známy názvy souborů.