Kdyby ten nový školní rok byl častěji, pak bych nemusel znovu přemýšlet nad tím jak to udělat, třeba bych si to pamatoval. Takhle mám po ruce pár skriptů, určitou představu o tom jak si to celé usnadnit, ale přesto mi to vždy chvíli zabere - ale aspoň se u toho učím nové. ;-)
Awk je pro mě něco jako zlo, je to takové divné, i když mi je jasné, že by mi to mohlo leccos ulehčit a tak jsem ho dnes znovu vyzkoušel. Počáteční stav je přitom takový, že mám hromadu uživatelů, o které vím jejich jméno a příjmení. První co jsem chtěl vytvořit byla hromada přihlašovacích jmen. Počáteční soubor přitom obsahuje:
Jan Novák
Petr Novák
.....
Skript awk, který mi přidá uživatelská jména v nějakém (hypotetickém) tvaru
Jan Novák uzivatel2001
Petr Novák uzivatel2002
.....
může vypadat takto:
#!/usr/bin/awk -f
BEGIN{
x=2001
}
{
printf("%s %s %s\n",$1, $2, "uzivatel"(x++))
}
Skript (pojmenujeme-li ho třeba skript1) se pak volá třeba takto
cat trida1A.txt | skript1 > trida1A_s_uzivatelskym_jmenem.txt
Tím se vytvoří seznam uživatelů i s jejich přihlašovacím jménem, další co mě čekalo bylo přidání hesla. A to byl pravda trochu oříšek. Hned z počátku mě opět lákalo použití nějakého makra ve Vimu, které by to jistě zvládlo, ale nakonec jsem vytrval a donutil k tomu awk. Pomohla mi tato stránka.
Skript by mohl vypadat třeba takto:
#!/usr/bin/awk -f
{
"pwgen -0 -A 5 1" | getline heslo
printf("%s %s %s %s\n",$1, $2, $3, heslo)
close("pwgen -0 -A 5 1")
}
pwgen je program, který generuje heslo. Problém ovšem nastal s tím, že volání nějakého externího programu vrací nejen jeho výstup, ale na prvním místě také jeho stav (0 v případě, že je vše v pořádku). Tomu jsem pomohl voláním funkce getline, která přečte další řádek obsahující vlastní heslo.
Další zádrhel nastal, že se externí program volal pouze jednou, je to zajímavé, ale od toho mi pomohl v manuálu zmiňovaná funkce close. No a výsledek? Soubor nyní obsahuje
Jméno Příjmení uživatelské_jméno heslo
Jistě by se tyto 2 skripty daly spojit dohromady, rozdělené jsou jednoduše proto, že mě to hned zpočátku nenapadlo. ;-) Dál to proženu opět přes awk, no anebo půjdu starou cestou a použiji makra Vimu, však dnes už toho awk bylo dost.
Třeba vám to také pomůže.
Update
Tak nakonec jsem použil awk snad na vše. Při odstraňování starých uživatelů jsem však narazil na zajímavý problém - spolu s jejich odstranění z LDAP a smazáním jejich adresářů mi repquota začala zobrazovat nějaké uživatele #123456 spolu s obsazeným místem na disku.
Problém byl v tom, že jsem nesmazal všechny soubory odstraněných uživatelů a tak na disku stále zůstaly soubory, které jim patřily (zpravidla se jednalo o profily Windows Vista, které si přidávají .V2 nakonec za jméno uživatele). Soubory, které patří danému uživateli se najdou snadno pomocí příkazu:
find /home -xdev -user 123456
oprava nastavené quoty je pak trochu složitější. Pozor, následující postup odstraní přednastavené kvóty uživatelů!
Nejdřív bylo nutné kvóty vypnout
quotaoff /home
pak zkontrolovat kvóty uživatelů
quotacheck -m /home
a dál už může kvóty opět zapnout
quotaon /home
Opětovné nastavení se provede pro každého uživatele zvlášť takto
quotatool -u <uživatelské_jméno> -bq 200MB -l 220MB /home
kde 200MB představuje tzv. soft limit a 220MB je hard limit. Samozřejmě pro hromadné nastavení uživatelů jsem opět použil awk, posloužil mi výborně! ;-)