Portál AbcLinuxu, 10. května 2025 07:00
Pokud jich máš hodně tak určitě jde napsat skript aby to sám přepisoval i v /etc/passwd atd....
Právě proto se ptám, jestli na to už neexistuje hotová utilikta. Potřebuji en block zvednout všem uživalům ID, aby se dal udělat dualboot staršího systému dohromady s Fedorou (16 nebo 17).
Pokud nepoužíváte jeden FS pro oba systémy není třeba s tím hejbat.....No, pochopitelně, že používám (/home), to dá rozum!
Pokud chcete nějakou část mít přístupnou z obou systémů a jsou to stejné OS pouze jiné verze tak bych vzal ty /etc/passwd z toho nového a nakopíroval do starého (případně si poznačil ID uživatelů a přepsal ručně) a pak nabotoval do toho starého a přepsal pomocí chown -R domácí adresáře těch uživatelů na starém OS.Jenomže já ty uživatele mám ve starém
Jestli je uživatelů 5-10 tak bych to udělal ručně - nepředpokládám že u PC s dualbotem bude 200 uživatelů.I tak je to otrava... no nic, jdu na to psát skript :-/
chown --from=CURRENT_OWNER:CURRENT_GROUP -L -R OWNER:GROUP /*se mě změní na celém systému jen ten jeden uživatel? Jeden důvod pro změnu ID mám a to je synchronizace ID na strojích. Třeba původně v podstatě osobní systémy, kde uživatel dostane vždy implicitní ID (nekde 1000 nekde 500) se chtějí provázat přes NFS server a pak je třeba stejné ID u uživatele na serveru i na jednotlivých strojích.
find
s testy -uid
resp. -gid
a chown
, soubory v /etc/
můžete upravit nějakým skriptem.
Viz man usermod
:
-u, --uid UID
The new numerical value of the user's ID.
This value must be unique, unless the -o option is used. The value must be non-negative. Values between 0 and 999 are typically reserved for system accounts.
The user's mailbox, and any files which the user owns and which are located in the user's home directory will have the file user ID changed automatically.
The ownership of files outside of the user's home directory must be fixed manually.
/
, v tomto priklade predpokladam, ze user name files ani na remote FS ani inde ako v PATH
, co prehladavam):
0) uistim sa, ze range old UIDs a new UIDs sa nekrizuju; viem teda s istotou povedat, ze dany file ma/nema zmenene UID
1) urobim si log pred zmenou UID
find /full/path/to/location -xdev -uid 1000 -exec ls -la {} \; | tee 1000.log
2)
find /full/path/to/location -xdev -uid 1000 | xargs chown $NEWID
Pri vela suboroch je citit rozdiel medzi -exec
a xargs
- xargs je citelne rychlejsi. Pri ZFS duplom, tak to ide po prvom find-e ako po masle (doslova).
Ak je ten range dost velky, je mozne urobit wrapper, ktory by ti toto rozforkoval, taky shellovy pseudocode:
#!/bin/sh
for myuid in `cat all_uids`; do
nohup change_uid $myuid &
done
-exec chown {} +
což nakrmí chown fíce parametry také...
Ale xargs se hodí pokud chcete jet paralelně, nastavíte třeba že spustíte 8 instancí a find je krmí... Nicméně tady u diskových operací se to nevyužije.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.