Kopieren Sie die Besitzerberechtigungen einer Datei in Gruppenberechtigungen

25

Wie kann ich die Benutzer- / Besitzerberechtigungen einer Datei in ihre Gruppenberechtigungen kopieren?

Zum Beispiel, wenn die Berechtigungen 755 sind, möchte ich, dass sie 775 werden.

Klarstellung: 755 -> 775 123 -> 113 abc -> aac

Bonus, wenn ich das rekursiv für alle Dateien in einem Verzeichnis machen kann.

(Das heißt, für jede Datei werden die Ownder-Berechtigungen in die Gruppenberechtigungen kopiert. Jede Datei verfügt möglicherweise über andere Berechtigungen.)

Annan
quelle
Ich bin nicht sicher zu verstehen. Sie möchten die Berechtigung für Verzeichnis / Dateien ändern, damit die Gruppenberechtigung dem Eigentümer entspricht? Wenn ja, dann spielen Sie einfach mit chmod herum. Wenn Sie möchten, kann ich Ihnen in meiner Antwort ein ausführlicheres Beispiel zeigen.
Anarko_Bizounours
In Ihrer Antwort werden alle Dateien auf 775 geändert. Was passiert, wenn eine der Dateien ursprünglich die Berechtigung 123 hat? Dann muss es auf 113 und nicht auf 775 geändert werden. Die Erlaubnis, die ich in der Frage (755) verwendet habe, ist nur ein Beispiel, die tatsächliche Erlaubnis kann alles sein. Ich möchte das programmatisch machen.
Annan
Die Zahl nach chmod ist nur eine numerische Erlaubnis. Wenn du ein ls -l machst und 452 als Erlaubnis bekommst, dann gehe einfach zu chmod 442 / you_directory /. Alles wird (ziemlich gut) auf der Wikipedia-Seite erklärt, auf die ich mit meiner Antwort verlinkt habe.
Anarko_Bizounours
Dies scheint eine doppelte Frage von serverfault.com/questions/241082/…
ShoeLace

Antworten:

54

Mit können Sie g=ufestlegen, dass die Gruppenberechtigungen den Benutzerberechtigungen entsprechen

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

und rekursiv

chmod -R g=u *

oder für einige Dateispezifikationen

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

Die chmod-Manpage ist dein Freund.

user9517 unterstützt GoFundMonica
quelle
guter Weg, es zu tun! Ich habe diesen Trick jedes Mal vergessen xD
Anarko_Bizounours
Noch nie von diesem Trick gehört! Nützliche.
Skinp
Dieser g=uTrick ersparte mir Stunden langwierigen Managements. Es geht ein +1 ;-)
Edurne Pascual
Ich hatte eine Reihe von Dateien von meinem Benutzer, die ich mit allen Benutzern teilen wollte. Das habe ich auch getanchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith
2

Wie bereits erwähnt, kann das Ändern von Dateiberechtigungen gefährlich sein. Mit großer Kraft geht große Verantwortung einher, und all diese Schizas. Das ist meine Antwort:

Datei / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Anwendungsbeispiel:

find . -exec otog {} \;

Verwendet stat , um numerische Berechtigungen abzurufen , und chmod , um Berechtigungen zu ändern.

PS: Eine bessere Vorgehensweise finden Sie in Iains Antwort!

Annan
quelle
1
Sollte es nicht $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1} sein?
Minaev
Ja, dein Recht. Es hat seltsamerweise auch auf meine Weise funktioniert.
Annan
Jemand, bitte erklären Sie die Ablehnung?
Annan
Nicht ich, aber ich würde es gerne ausgleichen. Dies ist eine gute Lösung, die funktioniert.
Minaev
1
Ich würde sagen, es ist sicherer, gefährliche Befehle in Skripten zu verwenden als manuell. In gut getesteten Skripten ist das :). Auf der anderen Seite chmodist es kein wirklich, wirklich gefährlicher Befehl. Im Vergleich zu rm, ich meine, oder zu rsync --deleteanderen.
Minaev
1

Zunächst müssen Sie Ihr Recht auflisten.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

Um das Ergebnis in numerische Erlaubnis zu übersetzen, benutze dies: R = 4, W = 2, X = 1.

Also in dieser 2 Datei sind die Erlaubnisse 755.

Nachdem Sie Ihr Recht erhalten haben, müssen Sie den Befehl chmod verwenden, um das Recht wie gewünscht zu ändern:

chmod 775 /your_directory/

Dieser Befehl ändert nur das Recht für das Verzeichnis, nicht jedoch für die darin enthaltene Datei.

Wenn Sie auch die rechte Innenseite ändern möchten, führen Sie den folgenden Befehl aus:

chmod 775 /your_directory/ -fR

Das -fR erzwingt die Rekursivität. (Verwenden Sie es nur, wenn Sie sicher sind, welches Recht Sie anwenden möchten und welche Datei sich im Verzeichnis befindet.)

Wenn Sie nur das Recht für Datei1 ändern möchten, gehen Sie wie folgt vor:

chmod 775 /your_directory/file1

Und so zerbröckeln die Kekse!

/! \ Seien Sie vorsichtig, ein Missbrauch dieses Befehls kann alle Ihre Betriebssystemberechtigungen zerstören und zu Fehlfunktionen führen. /! \

ps: schau dort nach mehr informationen über chmod.

Hoffe das wird dir helfen.

Anarko_Bizounours
quelle
Ich habe die Frage etwas präzisiert. Die Dateien haben möglicherweise nicht die gleichen Eigentümerberechtigungen. Wenn also chmod verwendet werden soll, muss es eine Möglichkeit geben, die Eigentümerberechtigungen zu extrahieren, bevor sie an chmod übergeben werden.
Annan
Es ist schwierig, aber der Befehl ls -l muss Ihnen die Erlaubnis geben, aber es wird in dieser Form sein -rw-rw-r--. Das Problem ist, dass Sie KEIN Skript verwenden dürfen, um mit chmod zu arbeiten! Sie müssen zuerst die gesamte Berechtigung für die Datei erhalten. Dann chmod, um das gute Recht für die Gruppe zu haben. Ich bearbeite meine Antwort, um ein Beispiel zu zeigen.
Anarko_Bizounours