Wenn Sie den Befehl ausgeführt haben chmod -777 /foo
, kann er seltsame Funktionen haben. Höchstwahrscheinlich werden die Bits negiert, die Sie in der oktalen Negation von 777 übergeben (was 111111111 in binär ist, was wichtig ist), was tatsächlich nicht dargestellt werden kann, da chmod
ein 9-Bit-Satz für Dateiberechtigungen verwendet wird (1 Bit) pro Berechtigung zum Lesen, Schreiben, Ausführen * Eigentümer, Gruppe, Benutzer), eine vorzeichenlose Zahl (darf nicht negativ sein).
Nehmen wir an, Sie können vorzeichenbehaftete Zahlen (negative und positive Werte) darstellen. Wenn Sie das 2er-Komplement von 777 (0b111111111) finden, können Sie das genaue Verhalten (und die Nummer, an die Sie übergeben) des Befehls herausfinden:
111111111
-000000000
----------
111111111
+000000001
----------
1000000000 #this number will cause an overflow because it is 512
#since our range is only -256 -> 255
Was bedeutet das alles? Sie sagten dem Kernel "Hey, machen Sie die Berechtigungen für diesen Ordner 1000000000". Der Kernel antwortete mit "Ok" und tat, was Sie fragten. Jetzt sind Ihre Dateisystemberechtigungen genau das --------- root root /
. Dies alles setzt voraus, dass ich (und Ihr Kernel / Ihre CPU) die Mathematik korrekt durchgeführt haben.
Wiederherstellung
Die /
Standardberechtigungen des Root-Dateisystems ( normalerweise) sind normalerweise 755. Der einfachste Weg, dies zu beheben, besteht darin, sich anzumelden und mit Ctrl+ zu tty zu wechseln F1(wodurch Sie zu tty1 gelangen, tty2-6 sind ebenfalls geöffnet, wobei tty7 der Speicherort ist der aktuellen X-Sitzung). Sie können sich als root anmelden (oder als normaler Benutzer, aber sudo
vor jedem der folgenden Befehle verwenden) und diesen Befehl ausführen:
chmod 755 /
Das sollte das Problem beheben, das Sie haben.
sudo chmod -R 777 /
oder benutztsudo chmod 777 /
?