Linux E X P R E S

Facebook

Začal nový školní rok

a já zas musím vytvářet uživatele


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ě! ;-)

 

Diskuze (2) Nahoru