Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

chmod -R others=user?

0 views
Skip to first unread message

Ulli Horlacher

unread,
Nov 6, 2022, 7:48:37 PM11/6/22
to
Ich brauch ein rekursives chmod, das fuer group und others r und x so
setzt wie es der user hat.

Kann man sich das mit chmod und find zurechtbasteln oder muss man sich das
aufwaendig programieren?



--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart E-Mail: horl...@tik.uni-stuttgart.de
Allmandring 30a Tel: ++49-711-68565868
70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Axel Reichert

unread,
Nov 7, 2022, 1:53:17 AM11/7/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de> writes:

> Ich brauch ein rekursives chmod, das fuer group und others r und x so
> setzt wie es der user hat.

Die Frage ist, was mit w passieren soll. Ein

chmod -R go=u *

kopiert ja alles. Danach koennte man go+w und go-w fuer vorher gemerkte
Listen auffuehren.

Soll w fuer g und o einfach gar nicht angeruehrt werden? Vermutlich geht
das mit einer Reihe von

find . -perm ... -exec chmod ...

die die verschiedenen Faelle durchkurbeln.

Tschoe!

Axel

Ulli Horlacher

unread,
Nov 7, 2022, 2:50:36 AM11/7/22
to
Axel Reichert <ma...@axel-reichert.de> wrote:
> Ulli Horlacher <fram...@rus.uni-stuttgart.de> writes:
>
>> Ich brauch ein rekursives chmod, das fuer group und others r und x so
>> setzt wie es der user hat.
>
> Die Frage ist, was mit w passieren soll. Ein
>
> chmod -R go=u *
>
> kopiert ja alles. Danach koennte man go+w und go-w fuer vorher gemerkte
> Listen auffuehren.
>
> Soll w fuer g und o einfach gar nicht angeruehrt werden?

Genau so. Ich will nur r und x kopieren, der Rest soll so bleiben.

Thomas Dorner

unread,
Nov 7, 2022, 2:08:02 PM11/7/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de> writes:

> Axel Reichert <ma...@axel-reichert.de> wrote:
>> Ulli Horlacher <fram...@rus.uni-stuttgart.de> writes:
>>
>>> Ich brauch ein rekursives chmod, das fuer group und others r und x so
>>> setzt wie es der user hat.
>>
>> Die Frage ist, was mit w passieren soll. Ein
>>
>> chmod -R go=u *
>>
>> kopiert ja alles. Danach koennte man go+w und go-w fuer vorher gemerkte
>> Listen auffuehren.
>>
>> Soll w fuer g und o einfach gar nicht angeruehrt werden?
>
> Genau so. Ich will nur r und x kopieren, der Rest soll so bleiben.

Hmm, "chmod -R go+rX" ist keine Option? (Gibt es Dateien ohne Leserecht
für den Benutzer oder Execute bei Gruppe, aber nicht Benutzer?)

Viele Grüße, Thomas
--
Adresse gilt nur kurzzeitig!

Ulli Horlacher

unread,
Nov 7, 2022, 4:55:31 PM11/7/22
to
Thomas Dorner <de.comp.os.unix.s...@spamgourmet.com> wrote:

>> Genau so. Ich will nur r und x kopieren, der Rest soll so bleiben.
>
> Hmm, "chmod -R go+rX" ist keine Option?


Ahh... Option X hatte ich uebersehen!
Das loest mein Problem.

Helmut Waitzmann

unread,
Nov 7, 2022, 5:26:09 PM11/7/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de>:
> Ich brauch ein rekursives chmod, das fuer group und others r und x so
> setzt wie es der user hat.

Mit «chmod» aus den coreutils unter Debian 10:

( umask -- u=,go=rx && chmod -R -- =u )

Das Umask «go=rx» beschränkt die Wirksamkeit des «chmod» für
group und others auf read und execute.

Kurze Erklärung:  Wenn vor einem der Operatoren «=», «-» oder «+»
keine der Kategorien «u» (user), «g» (group), «o» (others) oder
«a» (all) steht, wendet «chmod» den Operator nur auf die Bits an,
die für die betreffende Kategorie im Umask nicht gesetzt sind.

Im Beispiel wird im Umask jeglicher Zugriff für user und der
Schreibzugriff für group und other verboten, während der Lese‐
und Ausführzugriff für group und other erlaubt wird.  => «chmod»
beschränkt sich bei Änderungen an den Zugriffsrechten auf den
Lese‐ und Ausführzugriff bei group und other.  Da der Operator
der Kopieroperator mit user als Quelle ist, beschränkt sich das
Kopieren auf den Lese‐ und Ausführzugriff für group und others. 
Der Schreibzugriff für group und others und jeglicher Zugriff für
user bleibt unverändert.

Helmut Waitzmann

unread,
Nov 7, 2022, 6:28:37 PM11/7/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de>:
> Thomas Dorner <de.comp.os.unix.s...@spamgourmet.com>
> wrote:
>>> Genau so. Ich will nur r und x kopieren, der Rest soll so bleiben.
>>>
>>
>> Hmm, "chmod -R go+rX" ist keine Option?
>>
>
>
> Ahh... Option X hatte ich uebersehen!
>
> Das loest mein Problem.
>

Wenn das dein Problem löst, hast du es zu Anfang falsch
beschrieben:  Hier wird «r» nicht kopiert, sondern angeschaltet,
egal, ob es bei «user» an‐ oder abgeschaltet ist.  Im Gegensatz
dazu hast du zu Anfang das Kopieren verlangt.

Helmut Waitzmann

unread,
Nov 7, 2022, 6:34:43 PM11/7/22
to
Helmut Waitzmann <nn.th...@xoxy.net>:
> Ulli Horlacher <fram...@rus.uni-stuttgart.de>:
>> Ich brauch ein rekursives chmod, das fuer group und others r
>> und x so setzt wie es der user hat.
>
> Mit «chmod» aus den coreutils unter Debian 10:
>

Übrigens nicht nur bei den coreutils:  Dieses Verhalten wird von
POSIX verlangt.

Marc Haber

unread,
Nov 8, 2022, 4:09:26 AM11/8/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:
>Thomas Dorner <de.comp.os.unix.s...@spamgourmet.com> wrote:
>
>>> Genau so. Ich will nur r und x kopieren, der Rest soll so bleiben.
>>
>> Hmm, "chmod -R go+rX" ist keine Option?
>
>
>Ahh... Option X hatte ich uebersehen!

Die war mir auch völlig unbekannt. Wie praktisch.

Grüße
Marc
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834

Thomas Dorner

unread,
Nov 8, 2022, 2:08:02 PM11/8/22
to
Helmut Waitzmann <nn.th...@xoxy.net> writes:

> Ulli Horlacher <fram...@rus.uni-stuttgart.de>:
>> Ahh... Option X hatte ich uebersehen! Das loest mein Problem.
>
> Wenn das dein Problem löst, hast du es zu Anfang falsch beschrieben: 
> Hier wird «r» nicht kopiert, sondern angeschaltet, egal, ob es bei
> «user» an‐ oder abgeschaltet ist.

Für 'r' und 'x' ja, aber für 'X' nicht.

Jan Novak

unread,
Nov 9, 2022, 3:35:13 AM11/9/22
to
Am 07.11.22 um 22:38 schrieb Helmut Waitzmann:
> Mit «chmod» aus den coreutils unter Debian 10:
>
>   ( umask -- u=,go=rx && chmod -R -- =u )
>
> Das Umask «go=rx» beschränkt die Wirksamkeit des «chmod» für
> group und others auf read und execute.
>
> Kurze Erklärung:  Wenn vor einem der Operatoren «=», «-» oder «+»
> keine der Kategorien «u» (user), «g» (group), «o» (others) oder
> «a» (all) steht, wendet «chmod» den Operator nur auf die Bits an,
> die für die betreffende Kategorie im Umask nicht gesetzt sind.
>

Das "=" soll die Rechte ja setzen, egal wie sie sind oder waren.
Das scheint aber nicht immer zu klappen.

Wenn ich zum Beispiel

chmod -R ug=rwX *

setze, dann wird das x (nicht X) Flag einer Datei "nicht" entfernt,
sofern es vorhanden war. Ich hatte das so verstanden, dass mit eine rwX
die Rechte "660" auf eine Datei gesetzt werden.

Jan


Helmut Waitzmann

unread,
Nov 9, 2022, 4:48:10 PM11/9/22
to
Jan Novak <rep...@gmail.com>:
> Am 07.11.22 um 22:38 schrieb Helmut Waitzmann:
>> Mit «chmod» aus den coreutils unter Debian 10:
>>
>>
>>   ( umask -- u=,go=rx && chmod -R -- =u )
>>
>> Das Umask «go=rx» beschränkt die Wirksamkeit des «chmod» für
>> group und others auf read und execute.
>>
>> Kurze Erklärung:  Wenn vor einem der Operatoren «=», «-» oder «+»
>> keine der Kategorien «u» (user), «g» (group), «o» (others) oder
>> «a» (all) steht, wendet «chmod» den Operator nur auf die Bits an,
>> die für die betreffende Kategorie im Umask nicht gesetzt sind.
>>
>
> Das "=" soll die Rechte ja setzen, egal wie sie sind oder waren.
> Das scheint aber nicht immer zu klappen.
>
> Wenn ich zum Beispiel
>
>
> chmod -R ug=rwX *
>
> setze, dann wird das x (nicht X) Flag einer Datei "nicht"
> entfernt, sofern es vorhanden war.

Ja, das Verhalten entspricht der Beschreibung von «X» (s. u.).


> Ich hatte das so verstanden, dass mit eine rwX die Rechte "660"
> auf eine Datei gesetzt werden.

Um «660» zu erreichen, funktioniert der Zugriffsrechte‐Parameter
«ug=rw,o=».


Das «X» im Zugriffsrechte‐Parameter des «chmod»‐Kommandos hat (im
Gegensatz zu «r», «w» und «x») keine direkte Entsprechung im
«chmod»‐Systemaufruf.  Es ist vielmehr eine Berechnungsanweisung
für «x»:  «X» hat im Zugriffsrechte‐Parameter dieselbe Wirkung
wie «x», wenn wenigstens eine der folgenden Bedingungen erfüllt
ist:

Bei der Datei, deren Zugriffsrechte bearbeitet werden sollen,
handelt es sich um ein Verzeichnis.

Die Datei, deren Zugriffsrechte bearbeitet werden sollen, gewährt
bislang das «x»‐Zugriffsrecht einer oder mehreren der
Zugreifer‐Kategorien «user», «group» oder «other».

Ist keine dieser beiden Bedingungen erfüllt, hat «X» keine
Wirkung.

Helmut Waitzmann

unread,
Nov 9, 2022, 4:48:11 PM11/9/22
to
Helmut Waitzmann <nn.th...@xoxy.net>:
> Ulli Horlacher <fram...@rus.uni-stuttgart.de>:
>> Ich brauch ein rekursives chmod, das fuer group und others r
>> und x so setzt wie es der user hat.
>
> Mit «chmod» aus den coreutils unter Debian 10:
>
>
> ( umask -- u=,go=rx && chmod -R -- =u )
>
> Das Umask «go=rx» beschränkt die Wirksamkeit des «chmod» für
> group und others auf read und execute.
>
> Kurze Erklärung:  Wenn vor einem der Operatoren «=», «-» oder «+»
> keine der Kategorien «u» (user), «g» (group), «o» (others) oder
> «a» (all) steht, wendet «chmod» den Operator nur auf die Bits an,
> die für die betreffende Kategorie im Umask nicht gesetzt sind.

Ich muss mich korrigieren:  Für den Operator «=» trifft das (im
POSIX‐Standard, siehe
<https://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13>)
nicht zu.  Aber man kann es so machen:

( umask -- u=,go=rx && chmod -R -- go-rx,+u )


> Im Beispiel wird im Umask jeglicher Zugriff für user und der
> Schreibzugriff für group und other verboten, während der Lese‐
> und Ausführzugriff für group und other erlaubt wird.  => «chmod»
> beschränkt sich bei Änderungen an den Zugriffsrechten auf den
> Lese‐ und Ausführzugriff bei group und other.  Da der Operator
> der Kopieroperator mit user als Quelle ist, beschränkt sich das
> Kopieren auf den Lese‐ und Ausführzugriff für group und others. 


Anstelle des vorstehenden letzten Satzes muss es heißen:


Da die Zugriffrechte «r» und «x» für «g» und «o» zunächst
entfernt und anschließend nur dann hinzugefügt werden, wenn «u»
sie hat, kopiert das «chmod»‐Kommando in der Summe den Zustand
des Lese‐ und des Ausführzugriffsrechts von «u» auf «g» und «o».
0 new messages