Hier gibt es kein Wundermittel. Die Berechtigungen enthalten Informationen, die nicht immer redundant sind.
Wenn Sie dies in einem Systemverzeichnis getan hätten, wäre Ihr System in einem sehr schlechten Zustand, da Sie sich um setuid- und setgid-Bits sowie um Dateien sorgen müssten, die nicht für die ganze Welt lesbar sein sollen, und um Dateien das soll gruppen- oder weltschreibbar sein.
In einem Benutzerverzeichnis müssen Sie sich um Dateien kümmern, die nicht für die ganze Welt lesbar sein sollen. Da kann dir niemand helfen.
Was die Ausführbarkeit betrifft, ist es eine gute Faustregel, alles, was nicht so aussieht, als ob es ausgeführt werden könnte, nicht ausführbar zu machen. Der Kernel kann Skripte , deren ersten beiden Bytes sind ausführen #!
, ELF - Binärdateien , deren ersten vier Bytes sind , \x7fELF
wo \x7f
ist das Byte mit dem Wert 12, und einige seltenere Dateitypen (a.out, alles registriert binfmt_misc
). Daher sollte der folgende Befehl Ihre Berechtigungen in einen vernünftigen Zustand zurückversetzen (setzt bash 4 oder zsh voraus, andernfalls wird er find
zum Durchlaufen des Verzeichnisbaums verwendet; Warnung, direkt in den Browser eingegeben):
for x in **/*; do
if ! [ -f "$x" ]; then continue; fi # skip all but regular files
case $(head -c 4 "$x") in
"#!"??) :;; # skip script
"\x7fELF") :;; # skip ELF executable
*) chmod a-x "$x";;
esac
done
Beachten Sie, dass es eine einfache Möglichkeit gibt, die Berechtigungen eines Verzeichnisbaums unter Linux und möglicherweise anderen Unices mit ACL-Unterstützung zu sichern und wiederherzustellen:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
oder einem anderen Verzeichnis gemacht?