Ich suche nach einem Linux-Befehl, der den Besitz aller Dateien, die zu einem bestimmten Benutzer gehören, vorzugsweise in einem Zielverzeichnis, zu einem anderen angegebenen Benutzer ändern kann.
Mein Traumbefehl würde ungefähr so aussehen ...
chuser -R --olduser tom --newuser jerry
oder
chuser -R --olduser 1066 --newuser 1492
Dies ist mein Szenario ... Ich habe eine Sicherungsdatei (.tgz), in der Benutzer- und Gruppeninformationen gespeichert sind. Es stammt von einem Webserver, auf dem Apache und MySQL ausgeführt werden. Die Dateien in der Sicherung stammen aus dem gesamten System und enthalten Dateien von mehreren verschiedenen Benutzern und mehreren Systemtypkonten. Es ist wichtig, dass die Einstellungen beim Wiederherstellen auf dem neuen Server nicht verloren gehen. Das Problem ist, dass die Benutzer auf dem Computer, auf dem die Dateien wiederhergestellt werden, nicht mit denen in der Sicherungsdatei übereinstimmen. Beispielsweise hatten beide Maschinen einen MySQL-Benutzer, aber sie haben unterschiedliche Benutzer-IDs, und es gab mehrere Benutzer-IDs, die auf beiden Maschinen vorhanden waren und unterschiedlichen Benutzern gehörten. Dies bedeutet, dass die Benutzer auf dem neuen Computer nicht mit denen auf dem alten Computer synchronisiert werden können.
Ich kann alle Benutzerdateien mit dem Befehl find wie folgt finden ...
find /decompressed-backup-dir -uid 1050
oder
find /decompressed-backup-dir -user tom
Wenn es, wie ich vermute, nicht möglich ist, mit einem einzelnen Befehl das zu tun, was ich will, gibt es vielleicht eine Möglichkeit, die Ergebnisse des Befehls find an einen anderen Befehl weiterzuleiten, um die Eigentümeränderung zu handhaben?
Ich könnte dies mit einem PHP-Skript tun, aber das Backup enthält 4 GB und Zehntausende von Dateien. Daher möchte ich weder PHP noch Perl verwenden, wäre aber mit einem Shell-Skript zufrieden, das damit umgehen kann.
quelle
-uid
ich verwendet-user
Ich denke, das Flag --from im Befehl chown ist wahrscheinlich der einfachste Weg.
quelle
brew install coreutils
und tungchown
.Hinzufügen zu der Antwort von SiteKickr ,
chgrp
hat nicht das--from
Argument, aber Sie können das gleiche mit erreichen,chown
indem Sie den Benutzer weglassen.Beispiel:
quelle
Sie können
find
, wie jemand anders geschrieben hat, das tunchown
.Möglicherweise müssen Sie sich jedoch nicht
tar
um alles kümmern.Zum Beispiel, wenn Sie einen
tar
aufmachine A
dem Benutzertom
istuid 500
und dannuntar
die Datei aufmachine B
dem Benutzertom
istuid 505
,tar
wird das Richtige tun und machen die Dateien im Besitzuid 505
.quelle
Die Antwort setzt sowohl Benutzer als auch Gruppe:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
aber wenn du NUR eine Gruppe von Dateien ändern willst, die zu einem bestimmten Benutzer gehört, kannst du
chown
(soweit ich weiß) nicht verwenden, sondern stattdessen Folgendes verwendenchgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
und um NUR eine Gruppe von Dateien zu ändern, die zu einer Gruppe gehören, müssen Sie zB Folgendes verwenden:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Nur um Wissen hinzuzufügen.
quelle
newuser
Teil einfach weglassen . Die Manpage sagt: "Wenn der Doppelpunkt und die Gruppe angegeben werden, der Eigentümer jedoch weggelassen wird, wird nur die Gruppe der Dateien geändert. In diesem Fall wirdchown
die gleiche Funktion ausgeführt wiechgrp
."Wenn Sie die alten / neuen Besitz-IDs, die auf denselben
/etc/passwd
Benutzer aufgelöst werden , rekursiv zuordnen müssen ,(Dies kann passieren, nachdem Sie LDAP auf dem Server eingeführt haben und
/etc/passwd
doppelte Einträge für jeden Benutzer und jede Gruppe haben.)Sie könnten dieses Skript verwenden, das ich geschrieben habe: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Es erstellt das Mapping selbstständig. Die Oberfläche des Programms befindet sich leider im Code. Fügen Sie einige Debug-Anweisungen hinzu, wenn Sie untersuchen müssen, wie dies funktioniert. Aber es ist so ziemlich ein verherrlichter Chown mit einer Zuordnung, die aus Duplikaten in erstellt wurde
/etc/passwd
. Wenn dies jemals jemandem von Nutzen sein sollte, wäre das wirklich cool. :)quelle
Sie können verwenden
chown - R /directory/file
Dieser Befehl ändert die Berechtigung für alle Instanzen des Verzeichnisses
chown - R /directory
quelle