chown -R root: root. * in / root führt chown auf / aus

600
J.Lambrecht

Beim Ausführen des Befehls im Titel von / root springt er irgendwie zu / und wechselt den Besitz für ALLfiles. Ich habe nur bemerkt, dass Fehlermeldungen für / proc auftauchten.

Vielleicht werde ich alt, sollte aber. und ... von keinem Befehl ignoriert werden? AFAIK diese sind wegen des Dateisystems da und dienen keinem anderen Zweck.

Ausführen von Debian Wheezy mit neuesten Updates.

0

2 Antworten auf die Frage

4
a CVn

Vielleicht werde ich alt, sollte aber. und ... von keinem Befehl ignoriert werden? AFAIK diese sind wegen des Dateisystems da und dienen keinem anderen Zweck.

Das würde keinen Sinn machen, einfach weil du gezielt die Namen gefüttert hast .und ..von deinem chown chown <...> .*. Warum sollten chownSie in einem solchen Fall denken, dass Sie nicht das gemacht haben, was Sie wollten?

Die Namen wurden an chown weitergegeben, da die Shell sie basierend auf den von Ihnen angegebenen Shell-Glob-Erweiterungskriterien erweitert hat, die sowohl mit .als auch ..mit jedem anderen Punktverzeichnis im aktuellen Verzeichnis übereinstimmten . Da Sie gesagt haben chown, dass Sie rekursiv arbeiten sollten, ging es in diese Verzeichnisse und alles darunter. Dies bedeutet, dass es "hinabgestiegen" wurde ..und dann von dort weiter arbeitete.

Sie können dies selbst ausprobieren, indem echo .*Sie die Namen sehen, die in die Kommandozeile von chown eingegeben wurden. Man vergleiche das mit dem Ausgang des echo *mit shopt dotglobein- und ausgeschaltet bzw. ( shopt -s dotglobeinzuschalten, shopt -u dotglobauszuschalten). Verwenden Sie lseher als echodie erste Rekursionsstufe zu sehen.

Es gibt durchaus stichhaltige Gründe, um chown -Rentweder eine .oder zu laufen ... Am offensichtlichsten scheint es, ein Archiv zu extrahieren, das falsche Besitzinformationen zu Dateien und allen Dateien in einem einzigen Verzeichnis enthält. In einem solchen Fall chown -R abc:xyz .ist es absolut vernünftig, aus dem unkomprimierten Verzeichnis heraus den Besitz auf ein vernünftiges System auf Ihrem System zurückzusetzen.

Wenn Sie Ihre Shell wollen nicht erweitern .*in .und ..dann müssen Sie sicherstellen, dass es für die jeweilige Schale richtig eingestellt ist. Zitate aus der GNU-bash 4.2.37 (1) -release (aktuell auf Debian Wheezy zum Zeitpunkt dieses Schreibens, Debian- bashPaketversion 4.2+dfsg-0.1+deb7u3auf amd64-Architektur) Manpage:

GLOBIGNORE
Eine durch Doppelpunkte getrennte Liste von Mustern, die den Dateinamen definiert, der von der Erweiterung des Pfadnamens ignoriert werden soll. Wenn ein Dateiname, der mit einem Pfadnamen-Erweiterungsmuster übereinstimmt, auch einem der Muster in GLOBIGNORE entspricht, wird er aus der Liste der Übereinstimmungen entfernt.

Denken Sie daran, dass ein Teil der Unix-Philosophie darin besteht, "darauf zu vertrauen, dass der Benutzer weiß, was er tut".

Ich wurde 1993 in Unix trainiert. J.Lambrecht vor 9 Jahren 0
Jede Manipulation an. oder .. ist verboten. Dazu verwenden wir ./ oder ../, da chown .. den chown-Befehl in unerwünschter Weise verhalten kann. von der TLDP-Bash-Anleitung für Anfänger zur Dateinamenerweiterung Die Shell-Variable GLOBIGNORE kann verwendet werden, um die Anzahl der Dateinamen, die einem Muster entsprechen, einzuschränken. Wenn GLOBIGNORE gesetzt ist, wird jeder übereinstimmende Dateiname, der auch einem der Muster in GLOBIGNORE entspricht, aus der Liste der Übereinstimmungen entfernt. Die Dateinamen und .. werden immer ignoriert, auch wenn GLOBIGNORE eingestellt ist. J.Lambrecht vor 9 Jahren 0
@ J.Lambrecht "Ich wurde 1993 in Unix ausgebildet." Dann sollten Sie wissen, dass Unix! = Linux! = GNU. Linux begann gerade erst, an Schwung zu gewinnen, und GNU war im Vergleich zu heute noch ziemlich primitiv. Ich fügte meinem System ein Zitat aus der bash-Manpage hinzu, das zufällig ein aktuelles Debian Wheezy ist. Es zeigt überhaupt nicht an, dass `.` und` ..` implizit die Liste sind, wenn $ GLOBIGNORE nicht gesetzt ist. a CVn vor 9 Jahren 0
Der TLDP (http://www.tldp.org/LDP/Bash-Beginners-Guide/html/) wurde zuletzt vor sechseinhalb Jahren (20081227) aktualisiert. Zum Vergleich scheint zu diesem Zeitpunkt für [GNU bash] (ftp://ftp.gnu.org/gnu/bash/) 3.2 aktuell gewesen zu sein. a CVn vor 9 Jahren 0
Um zu vermeiden, dass ".." in die Erweiterungsliste aufgenommen wird, verwenden Sie ". [^.] *": Dies wird in alle Dateien erweitert, die mit "." Beginnen, außer "." Und "..". Überprüfen Sie, indem Sie `echo. *` Mit `echo. [^.] *` Vergleichen. (Für das Protokoll habe ich 1985 Unix gelernt.) AFH vor 9 Jahren 1
@AFH Ich mache das die ganze Zeit, aber es ist nicht das, wonach die OP gefragt hat, also habe ich das nicht in meine Antwort aufgenommen. a CVn vor 9 Jahren 0
Was ist das, ein Nährboden für Autismus? Danke AFH, das ist bisher der nützlichste Kommentar. J.Lambrecht vor 9 Jahren 0
@ J.Lambrecht Die einzige Frage, die ich in Ihrer Frage sehe, lautet "sollte. Und ... sollte von keinem Befehl ignoriert werden?". Stack Exchange funktioniert im Allgemeinen, indem es die beantwortete Frage beantwortet *; Wir gehen nicht herum und * raten *, was Sie fragen (und wir stellen sogar Fragen auf Eis, so dass sie nicht beantwortet werden können, wenn die Frage nicht klar ist, was gefragt wird, bis die Frage hoffentlich vom OP geklärt ist). Wenn Sie wissen wollten, wie Sie dieses Verhalten vermeiden können, sollten Sie danach gefragt haben, ob `.` und` ..` von "jedem Befehl" ignoriert werden sollten. a CVn vor 9 Jahren 1
danke trotzdem, ich war ernstlich schockiert und habe bis Freitag nie unerwartetes Verhalten mit Dateinamenserweiterung erfahren J.Lambrecht vor 9 Jahren 0
1
Romeo Ninov
  1. Punkt (.) Kann nicht ignoriert werden, da es sich um ein aktuelles Verzeichnis handelt
  2. Doppelpunkt (..) (oberes Verzeichnis) wird nicht ignoriert, da er als Platzhalter verwendet wird

Aber wenn Sie es auf diesem Weg ausführen, haben Sie keine solche Wirkung

chown -R root:root * 

Wenn Sie nur versteckte Dateien ändern möchten, versuchen Sie es mit Verzeichnissen:

find . -regex '.*/\..*' -exec chown root:root {} \; 
mit * ist nicht dasselbe wie mit *. * J.Lambrecht vor 9 Jahren 0
Überprüfen Sie http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html auf der gesamten Seite unter 'Dateinamenerweiterung', die explizit angegeben wird, dass es ignorieren sollte. und .. J.Lambrecht vor 9 Jahren 0
Sie möchten dies also nur für versteckte Dateien und Verzeichnisse tun. Siehe meine bearbeitete Antwort Romeo Ninov vor 9 Jahren 0
ich kann das nicht glauben, . und .. MÜSSEN ignoriert werden, es sei denn, diese werden als ./ und ../ verwendet, da sie das Nutzungsverhalten von chown verletzen, das in einen umfangreichen Befehl eingebettet werden muss J.Lambrecht vor 9 Jahren 0
@ J.Lambrecht `.` und` ..` werden nur dann ignoriert, wenn der nicht gepunktete * -Dateigab angegeben wird. `. *` stimmt mit `.` und` ..` und `.foo` und` .bar` überein. Im Grunde enthält `* keine 'versteckten' Dateien, was bedeutet, dass alles beginnt, das mit` .` beginnt, aber `. *` Überschreibt dieses Verhalten und enthält _anything_, beginnend mit einem `.`. Ja, dies schließt die Verzeichnisse ein. PS. Ich wurde in '89 ausgebildet. : / Otheus vor 9 Jahren 1
Seufzer. Noch nie war mir das passiert. Ich habe sogar die Regeln für die Dateinamenerweiterung nach all dieser Zeit vergessen. Trotzdem bin ich verärgert, weil es die Verhaltensregeln beim Umgang mit Dateien ändert. Die .files sollten keine Ausnahmebedingung sein. Ich glaube, mein Ego hat einen Schlag abbekommen. J.Lambrecht vor 9 Jahren 0