Szukam polecenia systemu Linux, które może zmienić własność wszystkich plików należących do danego użytkownika, najlepiej w katalogu docelowym, na innego określonego użytkownika.
Moje polecenie marzeń wyglądałoby mniej więcej tak ...
chuser -R --olduser tom --newuser jerry
lub
chuser -R --olduser 1066 --newuser 1492
To jest mój scenariusz ... Mam plik kopii zapasowej (.tgz) z zachowanymi informacjami o użytkownikach i grupach. Został pobrany z serwera WWW z Apache i MySQL. Pliki w kopii zapasowej pochodzą z całego systemu i zawierają pliki kilku różnych użytkowników i kilku kont typu systemowego. Kluczowe jest, aby po przywróceniu na nowym serwerze ustawienia nie zostały utracone. Problem polega na tym, że użytkownicy na komputerze przywracają pliki, aby nie pasowały do tych z pliku kopii zapasowej. Na przykład obie maszyny miały użytkownika MySQL, ale mają różne identyfikatory użytkowników i istnieje kilka identyfikatorów użytkowników na obu komputerach należących do różnych użytkowników. Oznacza to, że nie ma sposobu na zsynchronizowanie użytkowników na nowym komputerze z użytkownikami na starym komputerze.
Mogę znaleźć wszystkie pliki użytkowników za pomocą polecenia find w ten sposób ...
find /decompressed-backup-dir -uid 1050
lub
find /decompressed-backup-dir -user tom
Jeśli, jak podejrzewam, nie ma sposobu, aby zrobić to, co chcę za pomocą jednego polecenia, to może istnieje sposób na przekazanie wyników polecenia find do innego polecenia, aby obsłużyć zmianę własności?
Mógłbym to zrobić za pomocą skryptu PHP, ale w kopii zapasowej są 4 GB i dziesiątki tysięcy plików, więc nie chcę używać PHP ani Perla, ale byłbym zadowolony ze skryptu powłoki, który mógłby to obsłużyć.
źródło
-uid
użyłem-user
Myślę, że flaga --from na komendzie chown jest prawdopodobnie najłatwiejszym sposobem.
źródło
brew install coreutils
igchown
.Dodając do odpowiedzi przez SiteKickr ,
chgrp
nie ma--from
argumentu, ale można osiągnąć to samo zchown
pomijając użytkownika.Przykład:
źródło
Możesz użyć
find
, jak napisał ktoś inny, do zrobieniachown
.Jednak nie musisz tego robić, ponieważ
tar
zajmie się Tobą.Na przykład, jeśli utworzysz plik,
tar
wmachine A
którymtom
znajduje się użytkownik,uid 500
a następnieuntar
plik, wmachine B
którymtom
znajduje się użytkownikuid 505
,tar
zrobi właściwą rzecz i utworzy pliki należące douid 505
.źródło
Odpowiedź ustawia zarówno użytkowników i grup:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
ale jeśli chcesz zmienić TYLKO grupę plików, która należy do jakiegoś użytkownika, nie możesz używać
chown
(o ile wiem), ale zamiast tego użyjchgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
i aby zmienić TYLKO grupę plików, która należy do jakiejś grupy, musisz użyć np .:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Żeby dodać wiedzę.
źródło
newuser
część. Strona podręcznika mówi: „Jeśli podano dwukropek i grupę, ale pominięto właściciela, zmieniana jest tylko grupa plików; w tym przypadkuchown
pełni tę samą funkcję, cochgrp
”.Jeśli chcesz rekurencyjnie odwzorować stare / nowe identyfikatory własności, które dotyczą tego samego
/etc/passwd
użytkownika ,(co może się zdarzyć po wprowadzeniu LDAP na serwerze i
/etc/passwd
zduplikowaniu wpisów dla każdego użytkownika i grupy),możesz użyć tego skryptu, który napisałem: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Sam tworzy mapowanie. Interfejs programu znajduje się niestety w kodzie. Dodaj kilka instrukcji debugowania, jeśli chcesz sprawdzić, jak to działa. Ale to właściwie uwielbiany chown z mapowaniem utworzonym z duplikatów w
/etc/passwd
. Jeśli byłoby to kiedykolwiek przydatne dla kogoś, byłoby naprawdę fajnie. :)źródło
Możesz użyć
chown - R /directory/file
To polecenie zmieni uprawnienia dla wszystkich wystąpień katalogu
chown - R /directory
źródło