Frage Kopieren Sie die Besitzerberechtigungen einer Datei in Gruppenberechtigungen


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.

Klärung: 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 Berechtigungen des Eigentümers in die Gruppenberechtigungen kopiert. Jede Datei hat möglicherweise andere Berechtigungen.)


23
2018-06-27 10:08


Ursprung


Ich bin mir nicht sicher, ob ich das verstehe. Sie möchten die Berechtigung für das Verzeichnis / die Dateien ändern, damit die Gruppenberechtigung dem Eigentümer entspricht? Wenn ja, dann spielen Sie einfach mit chmod herum. Ich kann Ihnen ein expliziteres Beispiel in meiner Antwort zeigen, wenn Sie wollen. - 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 Nummer nach chmod ist nur eine kommerzielle Genehmigung. Wenn du ein ls -l machst und 452 als Erlaubnis erhältst, dann nur zu chmod 442 / du_directory /. Alles wird (ziemlich gut) in der Wikipedia-Seite erklärt, die ich mit meiner Antwort verbunden habe. - Anarko_Bizounours
Dies scheint eine doppelte Frage zu sein serverfault.com/questions/241082/ ... - ShoeLace


Antworten:


Sie können verwenden g=u um die Gruppe perms so zu machen wie der Benutzer perms

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 eine Dateispezifikation

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

das chmod manpage ist dein Freund.


49
2018-06-27 11:29



Gute Möglichkeit, es zu tun! Ich habe diesen Trick jedes Mal xD vergessen - Anarko_Bizounours
Nie von diesem Trick gehört! Nützliches. - skinp
Das g=u Trick rettete mir nur Stunden langweiliger Verwaltung. Da geht ein +1 ;-) - Edurne Pascual
Ich hatte eine Reihe von Dateien im Besitz von meinem Benutzer, die ich mit allen Benutzern teilen wollte. so tat ich chmod -R ag=u ${path_to_directory} - Trevor Boyd Smith


Wie die Leute gesagt haben, kann das Ändern von Dateiberechtigungen gefährlich sein. Mit großer Macht kommt große Verantwortung und all das Shizas. 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

Beispielverwendung:

find . -exec otog {} \;

Verwendet stat um numerische Berechtigungen zu erhalten, verwendet chmod Berechtigungen ändern

PS: Bitte sehen Sie Iains Antwort für einen besseren Weg, dies zu tun!


2
2018-06-27 10:13



Sollte es nicht $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1} sein? - minaev
Ja, dein Recht. Es hat sich merkwürdig auch auf meine Art bewährt. - Annan
Jemand bitte den Downvote erklären? - Annan
Nicht ich, aber ich möchte es kompensieren. Dies ist eine gute Lösung, die funktioniert. - minaev
Ich würde sagen, dass es sicherer ist, gefährliche Befehle in Skripten zu verwenden als manuell. In gut getesteten Skripten ist das :). Auf der anderen Seite, chmod ist weit davon entfernt, ein wirklich, wirklich gefährlicher Befehl zu sein. Verglichen mit rm, Ich meine, oder rsync --delete oder einige andere. - minaev


Zuallererst 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, verwenden Sie: R = 4, W = 2, X = 1.

Also auf dieser 2 Datei ist die Erlaubnis 755.

Nachdem Sie Ihr Recht erhalten haben, müssen Sie den Befehl chmod verwenden, um das Recht so zu ändern, wie Sie es möchten:

chmod 775 /your_directory/

Dieser Befehl ändert nur die Rechte für das Verzeichnis, aber nicht für die Datei im Inneren.

Wenn Sie das Recht auch innen ändern möchten, dann tun Sie diesen Befehl:

chmod 775 /your_directory/ -fR

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

Wenn Sie nur das Recht auf Datei1 ändern möchten, dann:

chmod 775 /your_directory/file1

Und so bröckeln die Kekse!

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

PS: schau Dort um mehr über chmod zu erfahren.

Hoffe das wird dir helfen.


1



Ich habe die Frage etwas geklärt. Die Dateien haben möglicherweise nicht die gleichen Besitzerberechtigungen. Wenn also chmod verwendet werden soll, muss es eine Möglichkeit geben, die Besitzerberechtigungen 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 -rw-rw-r-- sein. Das Problem ist, dass Sie kein Skript verwenden dürfen, um mit chmod zu arbeiten! Sie müssen zuerst alle Berechtigungen aus der Datei entfernen. Dann chmod, um das gute Recht für die Gruppe zu haben. Ich bearbeite meine Antwort, um ein Beispiel zu zeigen. - Anarko_Bizounours