chown -R Benutzer: Benutzer. * ändert Berechtigungen rückwärts: Ist dies das richtige Verhalten?


8

Ich habe in eine Menge Ärger , wenn die Berechtigung eines Ordners zu ändern myfolderWohnsitz in /. Ich habe den Befehl erteilt

sudo chown -R luca:luca /myfolder/.*

Meine Absicht war es, den Besitz aller versteckten Dateien in zu ändern /myfolder.

Leider wurde mir klar, dass auch das Eigentum an /geändert wurde, was mich natürlich mit einem kaputten System zurückließ. Ich denke, das ist passiert, weil ..Streichhölzer .*, aber mir scheint es immer noch komisch.

Ist das Ändern des übergeordneten Verzeichnisses das richtige Verhalten oder sollte ich einen Fehlerbericht einreichen?

Wenn es mein Fehler bei der Verwendung von chown war, welche bewährten Methoden sollten verwendet werden, um zu verhindern, dass der Besitz von Systemordnern und -dateien geändert wird?


4
Dies ist beabsichtigtes Verhalten als ..Streichhölzer.*
Uwe Plonus

.*bedeutet jede Datei, die mit endet . *.bedeutet jede Datei, die mit beginnt.
NickTux

4
@NikTh Es ist umgekehrt!
Uwe Plonus

Eine bewährte Methode besteht möglicherweise darin, nicht /direkt zu ändern (Ordner erstellen, entfernen usw.), es sei denn, dies ist unbedingt erforderlich (stellen Sie eine Frage zu dem, was Sie erreichen möchten). Die Verwendung von Platzhaltern und Root-Rechten ist ebenfalls gefährlich, da Sie häufig nicht 100% sicher sind, was vom Platzhalter betroffen ist.
Edwin

1
@LucaCerone Es ist verwandt chmodund chownsind ähnliche Befehle, beide beginnen mit ch, enthalten ein ound haben zwei andere ähnliche Buchstaben ( nund m). </ literal> Im Ernst, sie haben beide die Form : [cmd] -R [mode or user] [one or more files]. Einige Lösungen, die zu dieser Frage angeboten werden, funktionieren auch für Ihren Fall, zum Beispiel diese von Sean Reifschneider (in der Mitte). Diese Antwort ist auch auf versteckte Dateien nur durch die glob Muster für nicht versteckte Dateien zu entfernen.
Lekensteyn

Antworten:


5

Denken Sie daran, dass die Befehlszeile vor der Ausführung von der Shell erweitert (interpretiert) wird

sudo chown -R luca:luca /myfolder/.*

wird zuerst interpretiert als:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

Beachten Sie die /myfolder/..in Ihrer Befehlszeile

chown -R luca:luca /myfolder/..ist gleichbedeutend damit, chown -R luca:luca /
dass das Chown "rückwärts" läuft

Verwenden echo /myfolder/.*Sie diese Option, wenn Sie zur Bestätigung "*" verwenden.


@ Emmanuel: Warum sollten Sie xargs verwenden und herausfinden, wann die Option -R ausreicht?
Januar

@Emmanuel: danke! Kannst du etwas über den Fund und die Xargs erzählen?
Lucaceron

@LucaCerone Ich bin nicht sicher, warum Sie dieses akzeptiert haben, es ändert rekursiv alle Dateien in /myfolder. Der findBefehl ist überflüssig und wird mit Dateinamen unterbrochen, die Leerzeichen enthalten. (Wenn Sie Dateien rekursiv ändern möchten, find /myfolder | xargs chown luca:lucaist ähnlich wie chown -R luca:luca /myfolder).
Lekensteyn

Lekensteyn hat recht, ich habe vergessen zu grep ^.
Emmanuel

@Lekensteyn Ich habe den Fund geändert, um nicht mit dem Speicherplatz übereinzustimmen
Emmanuel

4

Gut. Die Befehlszeile als root ist sehr mächtig. Lesen Sie einige dieser Klassiker. Und ja, .*Matching to ..ist genau das, was beabsichtigt ist. Punkt ist kein Sonderzeichen. Es ist eine Konvention. Konventionell werden Dateien, die mit einem Punkt beginnen, beim Auflisten eines Verzeichnisses in der Standardansicht ausgeblendet - nicht weniger und nicht mehr. Konventionell erhält der zum aktuellen Verzeichnis führende Inode den .Namen und der zum übergeordneten Verzeichnis führende Inode den ..Namen.

Was Sie hätten tun sollen, war

chown -R luca:luca /myfolder

Habe ich erwähnt, dass die Dateinamen, die mit einem Punkt beginnen, nichts Besonderes sind? Rekursiv chownglaubt das nicht.

Im Moment können Sie möglicherweise einige der Funktionen wiederherstellen, indem Sie den Besitz wieder auf root ändern. Auf lange Sicht müssen Sie das System jedoch wahrscheinlich neu installieren.

Generell:

  1. Vermeiden Sie es, als Root zu arbeiten.
  2. Wenn Sie als Root arbeiten, lesen Sie jeden Befehl zweimal, bevor Sie die Eingabetaste drücken.
  3. Wenn Sie sich bei der Erweiterung nicht sicher sind, versuchen Sie es zuerst mit einem "sicheren" Befehl (wie echo .*).
  4. Arbeiten Sie nicht als root.
  5. Es gibt viele Aufgaben, die über eine grafische Oberfläche sicher ausgeführt werden können (Ihr Problem ist ein Beispiel für eine solche Aufgabe).
  6. Habe ich erwähnt, dass Sie die Verwendung des Root-Kontos vermeiden sollten?

Ich wollte nicht den Besitz aller Dateien im Ordner ändern ... nur der versteckten Dateien ..
Lucacerone

2
OK, mein schlechtes dann. In diesem Fall chown -R luca:luca /myfolder/.[^.]*denke ich
Januar

2
echo .*ist eine gute Möglichkeit, die Erweiterung auszuprobieren. Es zeigt Ihnen genau, was die Shell sieht. ls .*kann etwas verwirrender sein, da es in Verzeichnissen ls -d .*echo .*
abläuft

@RobieBasak guter Punkt!
Januar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.