Seltsames chmod Verhalten ...
Hallo, ein # chmod -Rv 644 *.html sollte doch normal allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Bei mir tut sich unter SuSE 7.2 nichts in den Unterverzeichnissen. # chmod -Rv 644 *.html mode of `index.html' changed to 0644 (rw-r--r--) Die html-Dateien in den Unterverzeichnissen bleiben unangetastet. # find ./ -name *.html ./index.html ./New/index.html ./Cool/index.html ./Ratings/index.html ./Computer_und_Internet/index.html ./Computer_und_Internet/Zeitschriften/index.html usw. Ist das nun ein Bug oder kann man das chmod Verhalten irgendwie anpassen? Es ist kein Alias definiert, der chmod -R unterbindet. cu Markus
On Sat, 21 Sep 2002, Markus Kolb wrote:
ein # chmod -Rv 644 *.html sollte doch normal allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Bei mir tut sich unter SuSE 7.2 nichts in den Unterverzeichnissen.
Nein. Es aendert nur alle Datein und Dirs *.html in ./ find . -name \*.html -exec chmod -v 644 {} \;
Achim Hoffmann wrote:
On Sat, 21 Sep 2002, Markus Kolb wrote:
ein # chmod -Rv 644 *.html sollte doch normal allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Bei mir tut sich unter SuSE 7.2 nichts in den Unterverzeichnissen.
Nein. Es aendert nur alle Datein und Dirs *.html in ./
Was ist dann der Unterschied zu chmod -v 644 *.html ?
Am Samstag, 21. September 2002 23:44 schrieb Markus Kolb:
Nein. Es aendert nur alle Datein und Dirs *.html in ./
Was ist dann der Unterschied zu chmod -v 644 *.html ?
Gar keiner, -R tritt nur in Kraft, wenn Du es auf ein Verzeichnis anwendest also z.B. 'chmod -R 644 /home/manfred' -- Machs gut | http://www.iiv.de/schwinde/buerger/tremmel/ Manfred | http://www.knightsoft-net.de
Hy, Am 02/09/22@07:42 schrieb Manfred Tremmel:
Am Samstag, 21. September 2002 23:44 schrieb Markus Kolb:
Nein. Es aendert nur alle Datein und Dirs *.html in ./
Was ist dann der Unterschied zu chmod -v 644 *.html ?
Gar keiner, -R tritt nur in Kraft, wenn Du es auf ein Verzeichnis anwendest also z.B. 'chmod -R 644 /home/manfred'
Wenn seine Verzeichnisse auch auf .html ende gibt es evtl. doch einen Unterschied. Aber durch entfernen des x Bits dieser Verzeichnisse in der ersten Ebene, nimmt er sich die Möglichkeit in die Unterverzeichnisse zu wechsel und die weitere Bearbeitung schlägt feht. Ich glaube aber wirklich nicht das der OP seine Verzeichnisse auch .html genannt hat. -- bye maik
Am Sonntag, 22. September 2002 08:30 schrieb Maik Holtkamp:
Gar keiner, -R tritt nur in Kraft, wenn Du es auf ein Verzeichnis anwendest also z.B. 'chmod -R 644 /home/manfred'
Wenn seine Verzeichnisse auch auf .html ende gibt es evtl. doch einen Unterschied. Aber durch entfernen des x Bits dieser
Ok, wenn es sich um Verzeichnisse mit dieser Dateiendung handelt, hast Du natürlich recht.
Verzeichnisse in der ersten Ebene, nimmt er sich die Möglichkeit in die Unterverzeichnisse zu wechsel und die weitere Bearbeitung schlägt feht.
Auch dieses ist richtig.
Ich glaube aber wirklich nicht das der OP seine Verzeichnisse auch .html genannt hat.
Trotzdem ist Dein Einwand natürlich korrekt. -- Machs gut | http://www.iiv.de/schwinde/buerger/tremmel/ Manfred | http://www.knightsoft-net.de
Manfred Tremmel wrote:
Am Samstag, 21. September 2002 23:44 schrieb Markus Kolb:
Nein. Es aendert nur alle Datein und Dirs *.html in ./
Was ist dann der Unterschied zu chmod -v 644 *.html ?
Gar keiner, -R tritt nur in Kraft, wenn Du es auf ein Verzeichnis anwendest also z.B. 'chmod -R 644 /home/manfred'
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o) cu
On Son, 22 Sep 2002 at 12:06 (+0200), Markus Kolb wrote:
Manfred Tremmel wrote:
Am Samstag, 21. September 2002 23:44 schrieb Markus Kolb:
Nein. Es aendert nur alle Datein und Dirs *.html in ./
Was ist dann der Unterschied zu chmod -v 644 *.html ?
Gar keiner, -R tritt nur in Kraft, wenn Du es auf ein Verzeichnis anwendest also z.B. 'chmod -R 644 /home/manfred'
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o)
Ich sehe, Du hast Rekursion verstanden ;-) Die man-Page ist schon richtig. Du kannst einen chmod -R nur für ein Verzeichnis starten, Rekursion für eine Datei macht ja wenig Sinn, oder? Es ist aber so, dass chmod -R sehr wohl _unterhalb_ des Startverzeichnisses Dateien _und_ Verzeichnisse anpackt. Dein Denkfehler war, dass chmod die Wildcard *.html selbst auflöst (also rekursiv auf alle gefundenen Dateien + Verzeichnisse anwendet). Nun klarer? Jan
Jan Trippler wrote:
On Son, 22 Sep 2002 at 12:06 (+0200), Markus Kolb wrote:
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o)
Ich sehe, Du hast Rekursion verstanden ;-)
Die man-Page ist schon richtig. Du kannst einen chmod -R nur für ein Verzeichnis starten, Rekursion für eine Datei macht ja wenig Sinn, oder? Es ist aber so, dass chmod -R sehr wohl _unterhalb_ des Startverzeichnisses Dateien _und_ Verzeichnisse anpackt. Dein Denkfehler war, dass chmod die Wildcard *.html selbst auflöst (also rekursiv auf alle gefundenen Dateien + Verzeichnisse anwendet).
Wieso ist die manpage richtig? Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben. Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt. Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut. Das Problem war auch nicht die Wildcard, sondern dass chmod eben nicht bestimmte Dateien und Verzeichnisse in der Rekursion ändert, sondern nur alle. Also eine rekursive Änderung aller Rechte macht. Es müsste also heissen: change _all_ files and directories recursively Wenn das nicht falsch bzw. lasch dokumentiert wäre, dann hätte ich gar nicht angenommen, dass chmod soetwas kann, wie ich es brauchte und hätte gleich einen anderen Weg versucht.
On Sun, 22 Sep 2002, Markus Kolb wrote:
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o)
Also zum Thema chmod -R 644 irgendeinfile das funktioniert (fuer Files, evtl. nicht fuer Links), Genau wird ./irgendeinfile geaendert. Wenn in der man-page steht: chmod [OPTION]... MODE[,MODE]... FILE dann ist FILE hier ein Parameter, sonst nix. Ob das ein File oder ein Dir (im Sinne des Filesystems) ist, spielt keine Rolle. Namen (FILE) sind Schall und Rauch ;-) Weiter unten wird dann bei -R explizit auf "files und directories" Bezug genommen. Hier wird also untersucht ob der Parameter (FILE) ein File oder Dir ist, und entsprechend mehr gemacht (nur falls FILE ein Dir ist). Sagen wir einfach so: die chmod man-page setzt beim Anwender das Wissen voraus dass ein File selbst nicht rekursiv sein kann Ich haette einen entspechenden Hinweis erwartet wenn der Parameter FILE bei chmod rekursiv gesucht wird, was ja die Aufgabe von find ist. chmod, und auch find, sind (fast) so alt wie UNIX selbst, sie erledigen also i.A. genau eine Aufgabe, und nur die. Das ist die modulare Philosophie von UNIX. Ist mit diesen Gedanken die man-page verstaendlich(er)? Achim
Die (UNIX-)Welt ist sooo einfach ... Hat eigentlich niemand mein Post vom Date: Sun, 22 Sep 2002 20:41:25 +0200 (MEST) gelesen? Da stand IMHO alles drin worueber ihr euch jetzt schon 3 Tage streitet. ;-) Achim
Hy, Am 02/09/22@19:03 schrieb Markus Kolb:
Jan Trippler wrote:
On Son, 22 Sep 2002 at 12:06 (+0200), Markus Kolb wrote:
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o)
Ich sehe, Du hast Rekursion verstanden ;-)
Die man-Page ist schon richtig. Du kannst einen chmod -R nur für ein Verzeichnis starten, Rekursion für eine Datei macht ja wenig Sinn, oder? Es ist aber so, dass chmod -R sehr wohl _unterhalb_ des Startverzeichnisses Dateien _und_ Verzeichnisse anpackt. Dein Denkfehler war, dass chmod die Wildcard *.html selbst auflöst (also rekursiv auf alle gefundenen Dateien + Verzeichnisse anwendet).
Wieso ist die manpage richtig? Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben. Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt. Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut.
Du hast vielleicht immer noch einen Dankfehler :(. In man chmod steht (bei mir) zurecht nichts von dem was Du oben schreibst. Vielleicht hilft Dir ein Beispiel: ---schnipp--- maik@syl:~ $ touch testmh maik@syl:~ $ mkdir test maik@syl:~ $ mkdir test/testmh maik@syl:~ $ cp testmh test/testmh/ maik@syl:~ $ chmod -R 700 tes* maik@syl:~ $ ls -lh test/testmh/testmh -rwx------ 1 maik maik 0 22. Sep 20:46 test/testmh/testmh maik@syl:~ $ ls -l testmh -rwx------ 1 maik maik 0 22. Sep 20:45 testmh ---schnapp--- Das hat für mich schon rekursives und, ja, das Beispiel ist schon gut gewählt;). Es würde aber zu Deiner chmod Änderung nicht passen:(. Das die bash dafür sorgt das bei anderen Beispielen, Deine Erwartungen nicht erfüllt werden, haben andere ja schon erwähnt. Man chmod muss aber IMHO auf keinem Fall geändert werden dann in meinem steht: ---schnipp--- chmod [OPTION]... MODE[,MODE]... FILE... -R, --recursive change files and directories recursively ---schnapp--- aber vor allem: ---schnipp--- The full documentation for chmod is maintained as a Tex info manual. ---schnapp--- und dort findet sich: ---schnipp--- `-R' `--recursive' Recursively change permissions of directories and their contents. ---schnapp--- HTH. -- bye maik
Maik Holtkamp wrote:
Hy,
Am 02/09/22@19:03 schrieb Markus Kolb: [...]
Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben. Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt. Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut.
Du hast vielleicht immer noch einen Dankfehler :(. In man chmod steht (bei mir) zurecht nichts von dem was Du oben schreibst. Vielleicht hilft Dir ein Beispiel:
---schnipp--- maik@syl:~ $ touch testmh maik@syl:~ $ mkdir test maik@syl:~ $ mkdir test/testmh maik@syl:~ $ cp testmh test/testmh/ maik@syl:~ $ chmod -R 700 tes* maik@syl:~ $ ls -lh test/testmh/testmh -rwx------ 1 maik maik 0 22. Sep 20:46 test/testmh/testmh maik@syl:~ $ ls -l testmh -rwx------ 1 maik maik 0 22. Sep 20:45 testmh ---schnapp---
[...]
---schnipp--- `-R' `--recursive' Recursively change permissions of directories and their contents. ---schnapp---
Ok. Habe es nun verstanden wie es gemeint ist. Aber wieso schreibt man das dann nicht auch so in die manpage rein, dass es unmissverständlich ist: "Recursively change permissions of directories and their contents." trifft aber die Funktionsweise sehr genau. Schade, dass das so nicht auch in der manpage steht.
Markus Kolb wrote:
Ok. Habe es nun verstanden wie es gemeint ist. Aber wieso schreibt man das dann nicht auch so in die manpage rein, dass es unmissverständlich ist: "Recursively change permissions of directories and their contents." trifft aber die Funktionsweise sehr genau. Schade, dass das so nicht auch in der manpage steht.
ich stimme Dir zu dass die man page dazu verwirrend ist. Ich hätte im ersten Augenblick - bevor der Denkapparat loslegt - beim lesen der man page zu -R auch geglaubt, dass alle untergeordneten files verändert werden. Aber schau mal in das SuSE Linux Handbuch S. 319: "Für einige GNU-Programme (z.B. tar) werden die Manual- Pages nicht mehr weiter gepflegt. An ihre Stelle treten als Schnellübersicht die --help-Ausgabe sowie als ausführliche Manuals die Info-Dateien." Gruss Michael
On Son, 22 Sep 2002 at 19:03 (+0200), Markus Kolb wrote:
Jan Trippler wrote: [...]
Die man-Page ist schon richtig. Du kannst einen chmod -R nur für ein Verzeichnis starten, Rekursion für eine Datei macht ja wenig Sinn, oder? Es ist aber so, dass chmod -R sehr wohl _unterhalb_ des Startverzeichnisses Dateien _und_ Verzeichnisse anpackt. Dein Denkfehler war, dass chmod die Wildcard *.html selbst auflöst (also rekursiv auf alle gefundenen Dateien + Verzeichnisse anwendet).
Wieso ist die manpage richtig? Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben. Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt.
Oh Mann :-( Wie bitte schön soll denn eine Datei _rekursiv_ behandelt werden? Wenn Du chmod für eine Datei aufrufst, wird die Datei geändert - Punkt.
Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut.
Nein, Du hast es einfach immer noch nicht kapiert! Du hast immer noch nicht kapiert, dass chmod keine Wildcards auflöst. Er kriegt Dateinamen übergeben. Wenn Du als Muster *.html angibst und es existiert im aktuellen Verzeichnis eine _Datei_ irgendwas.html und ein _Verzeichnis_ nochwas.html, dann wird chmod durch die Shell so aufgerufen: chmod -R irgendwas.html nochwas.html Also ändert chmod brav den Mode von irgendwas.html auf 644 (_nicht_ rekursiv, das geht ja bei einer Datei nicht) und _rekursiv für nochwas.html und alle darunter liegenden Dateien + Verzeichnisse! Nochmal: chmod löst keine Wildcards auf (das machen nur sehr wenige Befehle, wie find), das macht die Shell!
Das Problem war auch nicht die Wildcard, sondern dass chmod eben nicht bestimmte Dateien und Verzeichnisse in der Rekursion ändert, sondern nur alle. Also eine rekursive Änderung aller Rechte macht.
Ja, das ist richtig - und so stehts in der Manpage.
Es müsste also heissen: change _all_ files and directories recursively Wenn das nicht falsch bzw. lasch dokumentiert wäre, dann hätte ich gar nicht angenommen, dass chmod soetwas kann, wie ich es brauchte und hätte gleich einen anderen Weg versucht.
Da ist nix falsch oder lasch formuliert. Wenn Du weisst, wie unter Unix die Dateinamenersetzung funktioniert, dann ist da auch nix missverständlich dran. Wie soll denn ein Befehl wie chmod wissen, _welche_ Dateien unterhalb Deiner Kommandozeilenargumente Du geändert haben willst - dafür hat er nämlich keine Option (wie z. B. der find mit -regex), und die Kommandozeilenargumente werden, wie Dir schon mehrfach mitgeteilt wurde, bereits vorher durch die Shell geparst. Jan
Hy, Am 02/09/22@21:10 schrieb Jan Trippler:
On Son, 22 Sep 2002 at 19:03 (+0200), Markus Kolb wrote:
Jan Trippler wrote:
ein _Verzeichnis_ nochwas.html, dann wird chmod durch die Shell so aufgerufen: chmod -R irgendwas.html nochwas.html
Also ändert chmod brav den Mode von irgendwas.html auf 644 (_nicht_ rekursiv, das geht ja bei einer Datei nicht) und _rekursiv für nochwas.html und alle darunter liegenden Dateien + Verzeichnisse!
Nein, nicht bei 644. Wenn es das Verzeichnisrecht auf 644 gesetzt hat, kommt es in das Verzeichnis nicht mehr rein ;). Ändert aber nichts an der _grundsätzlichen_ Funktionsweise. -- bye maik
On Son, 22 Sep 2002 at 21:28 (+0200), Maik Holtkamp wrote:
Am 02/09/22@21:10 schrieb Jan Trippler:
chmod -R irgendwas.html nochwas.html
Also ändert chmod brav den Mode von irgendwas.html auf 644 (_nicht_ rekursiv, das geht ja bei einer Datei nicht) und _rekursiv für nochwas.html und alle darunter liegenden Dateien + Verzeichnisse!
Nein, nicht bei 644. Wenn es das Verzeichnisrecht auf 644 gesetzt hat, kommt es in das Verzeichnis nicht mehr rein ;).
Stimmt - da kommt dann sogar 'ne Fehlermeldung. Jan
* Markus Kolb schrieb am 22.Sep.2002:
Wieso ist die manpage richtig? Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben.
Nein, Du kanst genausogut eine normale Datei angeben, nur dann ist die Rekursion an dieser Stelle schon zu Ende.
Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt.
Wenn man was anderes als ein Verzeichnis angibt auch, nur das sich in diesem Fall alle Dateien auf diese eine Datei beschränkt. Wenn ich chmod -R 644 /etc/passwd sage, was soll denn noch außer /etc/passwd geändert werden?
Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR
Ob da FILE steht oder DIR oder was auch immer, es sind nur Platzhalter für Namen. Bei Linux ist auch ein Verzeichnis eine Datei. Daher ist FILE auch nicht verkehrt.
Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut.
Wie das? Wie soll chmod den * mitbekommen? Die shell interpretiert den *. chmod sieht den * gar nicht. Das liegt nicht an chmod, sondern an der shell. Allerdings kann chmod auch nichts mit dem * anfangen. Das ist bei fast allen Linuxprogrammen so. Lediglich bei find und bei Programme, die RegEx benutzen ist das anders. Bei RegEx hat der * aber auch eine andere Bedeutung. Und wenn man den * in solche Programme benutzt, sollte man ihm auch tunlichst vor der shell schützen. Das gilt im übrigen auch bei Programmen, wie bc, die irgendwas ausrechnen und den * als Multiplikationszeichen benutzen. Die shell weiß von allem dem nichts und interpretiert den ungeschützten * Wenn Du was wie chmod -R 644 *.html eingibst, muß es Dir klar sein, daß chmod den * gar nicht zu Gesicht bekommt. Wenn es im aktuellen Verzeichnis die Dateien foo.html, bar.html und baz.html gibt, so macht die shell aus obiger Zeile: chmod -R 644 bar.html baz.html foo.html chmod kann es nicht unterscheiden, ob Du die Zeile genauso eingegeben hast, oder ob Du chmod -R 644 *.html eingegeben hast und die shell das daraus gemacht hat. Es gibt keine Möglichkeit für chmod das festzustellen. Wenn einem das klar ist, und das sollte einem klar sein, dann kann die Angabe in den manpages nicht Mißverständlich sein.
Das Problem war auch nicht die Wildcard, sondern dass chmod eben nicht bestimmte Dateien und Verzeichnisse in der Rekursion ändert, sondern nur alle. Also eine rekursive Änderung aller Rechte macht.
Wie sollte chmod es anders machen?
Es müsste also heissen: change _all_ files and directories recursively Wenn das nicht falsch bzw. lasch dokumentiert wäre, dann hätte ich gar nicht angenommen, dass chmod soetwas kann, wie ich es brauchte und hätte gleich einen anderen Weg versucht.
Es ist nicht flasch oder lasch dokumentiert, es setzt nur Linuxgrundwissen voraus. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Bernd Brodesser wrote:
* Markus Kolb schrieb am 22.Sep.2002: [...] chmod kann es nicht unterscheiden, ob Du die Zeile genauso eingegeben hast, oder ob Du chmod -R 644 *.html eingegeben hast und die shell das daraus gemacht hat. Es gibt keine Möglichkeit für [...]
Es müsste also heissen: change _all_ files and directories recursively Wenn das nicht falsch bzw. lasch dokumentiert wäre, dann hätte ich gar nicht angenommen, dass chmod soetwas kann, wie ich es brauchte und hätte gleich einen anderen Weg versucht.
Es ist nicht flasch oder lasch dokumentiert, es setzt nur Linuxgrundwissen voraus.
Boaaaaah. Wann glaubt ihr mir jetzt endlich, dass ich kein Problem mit den Wildcards hatte. Es ging rein um die Rekursion. Die manpage zu chmod setzt, um genau zu sein, das Wissen voraus, wie chmod funktioniert. ;) Die manpage von ls erklärt den Parameter -R auch wunderbar. Wieso nicht die von chmod? Ich brauche aber jetzt keine Erklärungen mehr. Das artete sowieso viel zu sehr aus, weil einige immer meinen zwischen den Zeilen lesen zu müssen und dafür anderes überlesen.
* Markus Kolb schrieb am 23.Sep.2002:
Bernd Brodesser wrote:
chmod kann es nicht unterscheiden, ob Du die Zeile genauso eingegeben hast, oder ob Du chmod -R 644 *.html eingegeben hast und die shell das daraus gemacht hat. Es gibt keine Möglichkeit für
[...]
Boaaaaah. Wann glaubt ihr mir jetzt endlich, dass ich kein Problem mit den Wildcards hatte. Es ging rein um die Rekursion. Die manpage zu chmod setzt, um genau zu sein, das Wissen voraus, wie chmod funktioniert. ;)
Nein. Es geht um Wildcards. Wenn Du der Meinung bist, daß chmod -Rv 644 *.html alle html-Dateiein in allen Unterverzeichnissen verändert, und das hast Du angenommen, dann hast Du das mit den Wildcards nicht verstanden. Denn chmod bekommt, wie ich in meiner Mail ausführlich beschrieben habe, den * nicht zu Gesicht. chmod weiß nichts von dem * und wenn es z.B ein chmod -Rv 644 foo.html bar.html oder so ähnlich erhält, wieso soll chmod davon ausgehen, daß es html-Dateien verändern soll. Nochmal: Es geht nicht, es gibt keine Möglichkeit, daß wenn man im Prompt einer shell prg *.html eingibt, daß das Programm prg, wie immer es auch gestrickt sein mag, irgendwas mit allen html-Dateien unterhalb des aktuellen Verzeichnisses macht. Man kann prg nicht so schreiben, daß es allgemein funktioniert. Wenn Du das nicht verstehst, hast Du die bash nicht verstanden. Und Du hast geschrieben, daß Du angenommen hast, daß chmod das macht. Ergo hast Du die shell nicht verstanden.
Die manpage von ls erklärt den Parameter -R auch wunderbar. Wieso nicht die von chmod?
-R, --recursive change files and directories recursively Was ist daran Mißverständlich?
Ich brauche aber jetzt keine Erklärungen mehr. Das artete sowieso viel zu sehr aus, weil einige immer meinen zwischen den Zeilen lesen zu müssen und dafür anderes überlesen.
Nein, ich lesen nicht zwichen den Zeilen. Du hast geschrieben, daß Du der Annahme bist, daß chmod -Rv 644 *.html allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Allein die Annahme, daß dies Möglich sei, zeigt, daß Du die shell nicht verstanden hast. Man kann chmod nicht so schreiben, daß es möglich ist. Wenn man das verstanden hat, dann kann man die manpage auch nicht mißverstehen. Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4
Hallo Bernd, * On Tue, Sep 24, 2002 at 07:24 AM (+0200), Bernd Brodesser wrote:
Nein. Es geht um Wildcards. Wenn Du der Meinung bist, daß
chmod -Rv 644 *.html
alle html-Dateiein in allen Unterverzeichnissen verändert, und das hast Du angenommen, dann hast Du das mit den Wildcards nicht verstanden. Denn chmod bekommt, wie ich in meiner Mail ausführlich beschrieben habe, den * nicht zu Gesicht. chmod weiß nichts von dem * und wenn es z.B ein chmod -Rv 644 foo.html bar.html
oder so ähnlich erhält, wieso soll chmod davon ausgehen, daß es html-Dateien verändern soll.
Vielleicht will ja Markus Folgendes sagen bzw. fragen: - Angenommen er gibt "chmod -Rv 644 *.html" ein und im aktuellen Verzeichnis liegen drei Dateien mit der Endung "html", zum Bei- spiel: "1.html", "2.html" und 3.html". Daneben existieren Unter- verzeichnisse, die nicht auf "html" enden. - Die Shell expandiert das "*.html" entsprechend der im aktuellen Verzeichnis vorliegenden "*.html"-Dateien. - "chmod" bekommt dann z.B. dieses als Argumente übergeben: -Rv 644 1.html 2.html 3.html - "chmod" läuft nun vom aktuellen Verzeichnis aus durch alle Unter- verzeichnisse und setzte die Rechte von Dateien oder Verzeichnissen, die "1.html", "2.html" oder "3.html" heißen, auf "644". Ob ein solches Vorgehen sinnvoll ist, ist natürlich eine andere Frage (IMHO eher nein). Aber vielleicht meint ja Markus, dass das laut Man- page passieren müsste. Denn er behauptet ja, verstanden zu haben, dass das "chmod"-Programm, wie jedes andere Programm auch, das "*.html" nie zu Gesicht bekommen wird. Gruß, Steffen
Steffen Moser wrote:
Vielleicht will ja Markus Folgendes sagen bzw. fragen:
Nicht nur vielleicht, sondern genau das. *Juhu*
Ob ein solches Vorgehen sinnvoll ist, ist natürlich eine andere Frage (IMHO eher nein). Aber vielleicht meint ja Markus, dass das laut Man- page passieren müsste.
Wie ich auf das kam, habe ich in der gerade abgeschickten Mail nochmal zu verdeutlichen versucht. Es mag für Euch ein Synapsenkurzschluss sein, aber ich bin eben so darüber gestolpert. ;)
Bernd Brodesser wrote:
* Markus Kolb schrieb am 23.Sep.2002:
[...]
Boaaaaah. Wann glaubt ihr mir jetzt endlich, dass ich kein Problem mit den Wildcards hatte. Es ging rein um die Rekursion. Die manpage zu chmod setzt, um genau zu sein, das Wissen voraus, wie chmod funktioniert. ;)
Nein. Es geht um Wildcards. Wenn Du der Meinung bist, daß
chmod -Rv 644 *.html
alle html-Dateiein in allen Unterverzeichnissen verändert, und das hast Du angenommen, dann hast Du das mit den Wildcards nicht verstanden.
Allmählich glaub ich es aber... weisst Du besser als ich, was ich wissen wollte? Ich habe obiges nicht angenommen, aber ich habe es leider unbewusst so geschrieben. Aber mir ging es nicht um diesen dummen Wildcard. Ich hatte mehrere index.html in ./ und in Unterverzeichnissen. Das konnte man ja _lesen_. Aus Bequemlichkeit hatte ich *.html angegeben. Ausserdem habe ich inzwischen mehrmals, vermutlich in jeder Mail seither, geschrieben, dass es mir nur um die Rekursion geht. Aber immer wieder bekomme ich den Wildcard bzw. meine Postingeinleitung vorgehalten.
eingibt, daß das Programm prg, wie immer es auch gestrickt sein mag, irgendwas mit allen html-Dateien unterhalb des aktuellen Verzeichnisses macht. Man kann prg nicht so schreiben, daß es allgemein funktioniert.
So kann man nicht? Natürlich kann man. find zeigt, dass es geht. chmod könnte ein Mini-find schon integriert haben ... Die manpage hat mit der allgemeinen Beschreibung zu -R _bei mir_ den Eindruck erweckt, dass dem so ist. Zur Gegenüberstellung: find [path...] [expression] chmod -R [FILE] (zusammen mit: change files and directories recursively) Daher habe ich angenommen, dass chmod keine expressions beherrscht, aber sehr wohl existierende Dateien und Verzeichnisse.
Nein, ich lesen nicht zwichen den Zeilen. Du hast geschrieben, daß Du der Annahme bist, daß
chmod -Rv 644 *.html
allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen.
Das war aber nicht die Problematik. Dazu wollte ich keine Auskunft. Die Problematik war das am Ende: "Die html-Dateien in den Unterverzeichnissen bleiben unangetastet." Ich wollte auch keine anderweitigen Lösungen mit find und xargs. Das war mir bekannt. Ok, dass xargs schneller sein kann, wusste ich noch nicht. Aber sie ist wohl auch die gebräuchlichere. Ich wollte einfach das, wie sich inzwischen herausgestellt hat, Missverständnis geklärt haben. Ausserdem möchte ich nochmal Maik Holtkamp danken. Er war der einzige, der mich schnell, freundlich und ohne grosses Wirrwarr auf den richtigen Weg gebracht hat: `-R' `--recursive' Recursively change permissions of directories and their contents
* Markus Kolb schrieb am 24.Sep.2002:
Bernd Brodesser wrote:
* Markus Kolb schrieb am 23.Sep.2002:
Nein. Es geht um Wildcards. Wenn Du der Meinung bist, daß
chmod -Rv 644 *.html
alle html-Dateiein in allen Unterverzeichnissen verändert, und das hast Du angenommen, dann hast Du das mit den Wildcards nicht verstanden.
Allmählich glaub ich es aber... weisst Du besser als ich, was ich wissen wollte? Ich habe obiges nicht angenommen, aber ich habe es leider unbewusst so geschrieben.
Wenn Du was anderes willst, als Du schreibst, kann ich es wohl kaum erraten, was Du willst. Meine Glaskugel ist zur Zeit außer Betrieb.
Aber mir ging es nicht um diesen dummen Wildcard.
Ist mir schon klar. Aber das sollte man verstanden haben.
Ich hatte mehrere index.html in ./ und in Unterverzeichnissen. Das konnte man ja _lesen_. Aus Bequemlichkeit hatte ich *.html angegeben. Ausserdem habe ich inzwischen mehrmals, vermutlich in jeder Mail seither, geschrieben, dass es mir nur um die Rekursion geht. Aber immer wieder bekomme ich den Wildcard bzw. meine Postingeinleitung vorgehalten.
Weil Deine Rekursion so nicht funktionieren kann, wegen den Wildcards.
eingibt, daß das Programm prg, wie immer es auch gestrickt sein mag, irgendwas mit allen html-Dateien unterhalb des aktuellen Verzeichnisses macht. Man kann prg nicht so schreiben, daß es allgemein funktioniert.
So kann man nicht? Natürlich kann man. find zeigt, dass es geht. chmod könnte ein Mini-find schon integriert haben ...
Nein, auch bei find müssend die Wildcards vor der shell geschütze werden. Wenn Du find . -name *.html angibst, dann ersetzt schon die shell, nicht find, den * find bekommt den * nicht zu Gesicht, und kann folglich auch nicht alles mit html am Ende finden. find . -name "*.html" ist was vollkommen anderes als find . -name *.html solange es im aktuellen Verzeichnis keine Datei gibt, die auf .html endet, ist es sich gleich, aber nicht, wenn es im aktuellen Verzeichnis eine solche gibt. Besonders witzig ist es wenn nicht, durch den . im aktuellen Verzeichnis, sondern irgendwo anders gesucht wird. Immer noch ist es dann entscheidend, ob es im Verzeichnis, in dem man sich gerade zufällig befindet, eine oder mehere Dateien mit .html am Ende gibt.
Die manpage hat mit der allgemeinen Beschreibung zu -R _bei mir_ den Eindruck erweckt, dass dem so ist. Zur Gegenüberstellung: find [path...] [expression] chmod -R [FILE] (zusammen mit: change files and directories recursively) Daher habe ich angenommen, dass chmod keine expressions beherrscht, aber sehr wohl existierende Dateien und Verzeichnisse.
chmod -R verändert doch auch alle Dateien und Verzeichnisse unterhalb der angegebenen Verzeichnisse.
Nein, ich lesen nicht zwichen den Zeilen. Du hast geschrieben, daß Du der Annahme bist, daß
chmod -Rv 644 *.html
allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen.
Das war aber nicht die Problematik. Dazu wollte ich keine Auskunft.
Entschuldige vielmals, daß ich keine Gedanken lesen kann und angenommen habe, daß Du das wissen willst, was Du schreibst.
Die Problematik war das am Ende: "Die html-Dateien in den Unterverzeichnissen bleiben unangetastet." Ich wollte auch keine anderweitigen Lösungen mit find und xargs. Das war mir bekannt. Ok, dass xargs schneller sein kann, wusste ich noch nicht.
Ja, ja alles schreckliche Leute hier, die geben einfach Antworten, die man gar nicht wissen will. Einfach unverschämt, diese Leute.
Aber sie ist wohl auch die gebräuchlichere. Ich wollte einfach das, wie sich inzwischen herausgestellt hat, Missverständnis geklärt haben.
Und deshalb streust Du die ganze Zeit neue? Ich weiß selber, daß es nicht immer leicht ist, sich so auszudrücken, daß man verstanden wird. Du tust es nicht, beschwertst Dich aber vom hohen Roß herab, über andere, die sich vielleicht auch nicht so glücklich ausdrücken und über die Schreiber der manpages.
Ausserdem möchte ich nochmal Maik Holtkamp danken. Er war der einzige, der mich schnell, freundlich und ohne grosses Wirrwarr auf den richtigen Weg gebracht hat: `-R' `--recursive' Recursively change permissions of directories and their contents
Was soll das nun schon wieder? Maik hat Dich weitergeholfen. Das ist gut. Ein Dankeschön an ihm ist auch nett, aber was soll denn dieser Seitenhieb auf andere? Sie haben es gewagt, nicht zu verstehen, was Du willst. Daher sprichst Du ihen die Kompetenz ab. Du drückst Dich sehr mißverständlich aus, erwartest aber, daß jeder Dich versteht und beschwerst Dich gleichzeitig bitterlich, daß manpages mißverständlich geschrieben sind. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
Bernd Brodesser wrote:
* Markus Kolb schrieb am 24.Sep.2002:
So kann man nicht? Natürlich kann man. find zeigt, dass es geht. chmod könnte ein Mini-find schon integriert haben ...
Nein, auch bei find müssend die Wildcards vor der shell geschütze
Man sieht, Du hast noch immer nicht verstanden worum es mir ging. Andere dafür schon.
* Markus Kolb schrieb am 26.Sep.2002:
Bernd Brodesser wrote:
* Markus Kolb schrieb am 24.Sep.2002:
So kann man nicht? Natürlich kann man. find zeigt, dass es geht. chmod könnte ein Mini-find schon integriert haben ...
Nein, auch bei find müssend die Wildcards vor der shell geschütze
Man sieht, Du hast noch immer nicht verstanden worum es mir ging. Andere dafür schon.
Doch, habe ich schon verstanden. Dir ging es darum, daß andere sich gefälligst Mühe zu machen haben, Du es aber nicht nötig hast, obwohl es Dein Problem ist. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
Bernd Brodesser wrote:
Man sieht, Du hast noch immer nicht verstanden worum es mir ging. Andere dafür schon.
Doch, habe ich schon verstanden. Dir ging es darum, daß andere sich gefälligst Mühe zu machen haben, Du es aber nicht nötig hast, obwohl es Dein Problem ist.
Hast Du Fieber? Würde mal einen Arzt aufsuchen. Im Anfangsstadium kann der vielleicht noch etwas ausrichten. *Plonk*
On Fri, 27 Sep 2002 at 23:14 (+0200), Markus Kolb wrote:
Bernd Brodesser wrote: [...]
*Plonk*
LOL! Wenn Du meinst ... Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "Feature freeze means, that everyone has a bad feeling when he changes something, almost nothing more :)" -- Stephan Kulow
Bernd Brodesser wrote:
* Markus Kolb schrieb am 24.Sep.2002:
Allmählich glaub ich es aber... weisst Du besser als ich, was ich wissen wollte? Ich habe obiges nicht angenommen, aber ich habe es leider unbewusst so geschrieben.
Wenn Du was anderes willst, als Du schreibst, kann ich es wohl kaum erraten, was Du willst. Meine Glaskugel ist zur Zeit außer Betrieb.
Nein, Du drehst mir ja die Wörter im Mund um. Das was ich wollte habe ich doch auch geschrieben. Sogar eine eindeutig markierte Frage war dabei. Wenn Du den ganzen Thread vor dem Druck auf den Reply-Button gelesen hättest, dann wäre es klar gewesen.
Aber mir ging es nicht um diesen dummen Wildcard.
Ist mir schon klar. Aber das sollte man verstanden haben.
Wieso reitest Du dann darauf herum, und kommst nicht zur eigentlichen Sache. (Bewusst kein ?; will keine Antwort mehr)
Ich hatte mehrere index.html in ./ und in Unterverzeichnissen. Das konnte man ja _lesen_. Aus Bequemlichkeit hatte ich *.html angegeben. Ausserdem habe ich inzwischen mehrmals, vermutlich in jeder Mail seither, geschrieben, dass es mir nur um die Rekursion geht. Aber immer wieder bekomme ich den Wildcard bzw. meine Postingeinleitung vorgehalten.
Weil Deine Rekursion so nicht funktionieren kann, wegen den Wildcards.
Was bist denn Du für ein Troll?
Falls Du es doch noch verstehen willst, lese:
Date: Tue, 24 Sep 2002 09:05:11 +0200
From: Steffen Moser
Hallo Markus, * Markus Kolb schrieb am 22.Sep.2002:
Das sollte man vielleicht mit in einem zusätzlichen Satz in die manpage von chmod bei der Erklärung von -R aufnehmen. Da steht nämlich eindeutig da: change files and directories recursively und oben: chmod [OPTION]... MODE[,MODE]... FILE Es ist also nichts von einer Einschränkung bei -R von FILE auf Verzeichnisse zu lesen. Den Satz change files and directories recursively versteht man erst wie er gemeint ist, wenn man weiss, wie er gemeint ist ;o)
Wie sollten normale files Rekursiv verändert werden können? Ergibt doch überhaupt keinen Sinn. Es müssen doch Verzeichnisse sein. Verzeichnisse sind aber auch files, genau wie Named Pipes, Gerätedateien usw. Ein rekursives Suchen hat aber nur bei Verzeichnisse einen Sinn. Was Dir offensichtlich nicht klar war, ist die Tatsache, daß Wildcards, wie etwa *, nicht vom jeweiligen Programm, sondern bereits von der shell ersetzt wird. Dieser Mechanismus ist wichtig zu verstehen und wird auch in man bash und bei den anderen shells beschrieben. Das jeweilige Programm sieht von dem * nichts, solange er nicht maskiert ist. Und wenn er das ist, kann das jeweilige Programm meist nichts damit anfangen. Dies wird nicht in jede man erwähnt. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Hallo Markus, On Saturday 21 September 2002 21:35, Markus Kolb wrote:
ein # chmod -Rv 644 *.html sollte doch normal allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Bei mir tut sich unter SuSE 7.2 nichts in den Unterverzeichnissen.
# chmod -Rv 644 *.html mode of `index.html' changed to 0644 (rw-r--r--)
Die html-Dateien in den Unterverzeichnissen bleiben unangetastet.
die Lösung hat Achim Dir bereits geschrieben, ich reiche noch was zur Ursache nach: Das *.html, auf welches Du chmod losgelassen hast, wird von der Shell expandiert, bevor chmod es zu sehen bekommt. chmod verhält sich also zum Beispiel so, als hätte es folgendes gesehen: # chmod -Rv 644 datei1.html datei2.html ... Die Expansion wird dabei natürlich nur auf das aktuelle Verzeichnis angewandt, so wie # ls *.html nur die .html-Dateien im aktuellen Verzeichnis anzeigt. Auch hier wird der Ausdruck *.html von der Shell expandiert und danach erst an ls weitergereicht. Alle Klarheiten beseitigt? ;-) Übrigens: Wenn es sehr viele Dateien sind, kostet das find ... -exec unter Umständen deutlich mehr Zeit als ein # find . -type f -name "*.html" -print0 | xargs -0 chmod -v 644 -> man xargs Schöne Grüße, Stephan -- /* Stephan Hakuli -=-=-=- http://www.hakuli.de/stephan Encryption with GnuPG/GPG is strongly encouraged, my public key is available on my website or on common public keyservers. # find /usr/src/linux-2.2.20 -name "*.[hc]"|xargs grep "can grep" */
On Sam, 21 Sep 2002 at 21:35 (+0200), Markus Kolb wrote:
Hallo,
ein # chmod -Rv 644 *.html sollte doch normal allen Dateien mit der Endung .html im Verzeichnis und in Unterverzeichnissen die Rechte -rw-r--r-- verpassen. Bei mir tut sich unter SuSE 7.2 nichts in den Unterverzeichnissen.
# chmod -Rv 644 *.html mode of `index.html' changed to 0644 (rw-r--r--)
Die html-Dateien in den Unterverzeichnissen bleiben unangetastet.
Eine funktionierende Lösung hat Dir Achim ja schon genannt. Zur Ursache: Der chmod mit der Option -R arbeitet zwar rekursiv, aber er ändert natürlich nur die Dateien, die als Argument angegeben sind. Und das ist eben nicht *.html, wenn im aktuellen Verzeichnis eine Datei mit der Endung .html existiert. Das Ausflösen der Joker (*) macht nämlich nicht chmod, sondern schon vorher die Shell. Deshalb kriegt chmod als Argument nur noch index.html zu sehen. Wenn _keine_ .html im aktuellen Verzeichnis existiert, kriegt chmod *.html als Argument und ändert gar nix. Er kann nämlich solche Muster nicht auflösen. Jan
participants (10)
-
Achim Hoffmann
-
B.Brodesser@t-online.de
-
Bernhard Walle
-
Jan.Trippler@t-online.de
-
Maik Holtkamp
-
Manfred Tremmel
-
Markus Kolb
-
Michael Lootz
-
Steffen Moser
-
Stephan Hakuli