Portál AbcLinuxu, 10. května 2025 03:05

Dotaz: BASH - smyčka se dvěmi proměnnými

30.1.2013 13:51 Tjunikov
BASH - smyčka se dvěmi proměnnými
Přečteno: 308×
Odpovědět | Admin
Hezký den, omlouvám se předem za zřejmě banální dotaz, ale už několik dní přeinstalovávám server a hlava mi už nebere. Mám prosbu, zda by mi někdo zběhlý v bashi nemohl poradit s jednoduchým skriptíkem. Potřebuji hromadně změnit UID v domovských adresářích. Příkaz by vypadal takto:

chown -R $UID:513 /home/$USER

Proměnné UID a USER by se nacházely ve dvou samostatných text. souborech seřazeny pochopitelně tak, aby pořadí UID v jednom souboru odpovídalo pořadí USER v druhém - aby se to správně ve smyčce přiřazovalo.

S jednou proměnnou nemám problém, ale s dvěma nevím a už nemám sílu hledat. Prosím, prosím - už jsem skoro ve finále, ještě tohle musím dodělat (změnila se mi UID uživateů - 370 ks)

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Tarmaq avatar 30.1.2013 14:18 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Odpovědět | | Sbalit | Link | Blokovat | Admin
paste users uids | awk '{system("chown -R "$2":513 /home/"$1)}'
(users je cesta k souboru s uzivateli, uids je cesta k souboru s UID)
Don't panic!
30.1.2013 14:24 Tjunikov
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Sice vůbec nechápu jak, ale funguje to naprosto perfektně :-D Opravdu moc děkuji - snad už to zítra všechno poběží, nebo mě sežerou :-) Tj.
30.1.2013 15:56 NN
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Jenom rada do budoucna "kdyz nevim co to dela, tak to zasadne nepoustim" ..
rADOn avatar 30.1.2013 17:23 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Kazisvete, ted jsi nam zkazil oblibeny rm -rf vtip :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
30.1.2013 14:34 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Odpovědět | | Sbalit | Link | Blokovat | Admin

Jen poznámka: pokud je teď už databáze v pořádku, nebylo by jednodušší nekomplikovat si zbytečně život a použít rovnou

  while read name; do chown -R $name:513 /home/$name; done <users

Mimochodem, usermod by se o to podle manuálové stránky měl postarat automaticky.

30.1.2013 15:29 Tjunikov
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
On je momentální stav tento:

Server Samba PDC s ověřováním přes LDAP, uživatelé se přihlašují jak z Linux tak Windows PC.

Po havárii disku a několika marných pokusech nová instalace serveru. Mám zálohy LDAP v ldif, ale zaboha tam nejdou dostat zpět. Takže jsem se rozhodl vytvořit uživatele znovu s tímto postupem:

Uložím uživatelská jména do souboru výčtem z /home (ls /home > users), skriptem je přes smbldap-useradd vytvořím účty a nastavím jednotné heslo, z ldap vyexportuji jména a uid -> vytvořím z toho dva soubory a výše uvedeným skriptem změním UID /home adresářů, která teď pochopitelně nesedí (home jsou na diskovém poli netknuté) Přijde mi to momentálně nejrychlejší, protože už jsem v časové tísni a já nejsem zase takový guru - ale určitě existuje i jiné řešení. Děkuji za další nápad, ale už asi zůstanu u toho prvního. Jistě by šlo asi vyexportovat z LDAP záloh jména i uid a nové uživatele vytvářet s nastavením starého uid, ale už se mi nechce si s tím moc hrát - aspoň ten LDAP strom "vyčistím", už v tom byl stejně bordel. :-)
30.1.2013 15:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
První část mého komentáře upozorňovala jen na to, že si nemusíte komplikovat život dvěma soubory, protože příkazu chown můžete místo UID dát jako argument i jméno, on si to přeloží sám.
31.1.2013 05:44 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Michal neříkal, že máte nastavovat novým uživatelům staré uid, abyste nemusel měnit home.

Naopak, navrhl způsob, jak starým home adresářům uživatelů nastavit nové uid bez rizika chyby, že se vám ta číselná uid která máte v odděleném souboru od jmen nějak pomotají. Tedy totéž, o co usilujete, akorát bez práce.
31.1.2013 05:46 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
V podstatě se jedná o paste users uids | awk '{system("chown -R "$1":513 /home/"$1)}' máte pak jistotu, že všem uživatelům opravdu patří soubory v jejich home a soubor uids tam je jen pro zmatení nepřítele :)
31.1.2013 05:50 Tjunikov
Rozbalit Rozbalit vše Re: BASH - smyčka se dvěmi proměnnými
Aha, díky. Jak jsem říkal, nejsem žádný guru a z bashe znám jen základy - proto jsem to hned nepochopil. Díky - vyzkouším to u těch dalších userů, zatím jsem zavedl jen účty učitelů, studenty si nechám na víkend. Ještě jednou všem moc děkuji. Tj.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.