On Wed, Aug 15, 2012 at 03:59:16PM +0200, Pirity Tamas Gabor wrote:
> On Tue, Aug 14, 2012 at 08:51:56AM +0200, Fodor Zsolt wrote:
> > Üdv Mindenkinek!
> > 
> > Néhány konfigurációs fájlban kellene módosítanom kb. 700 felhasználónál.
> > Szerkezetileg
> > tulajdonság = érték
> > valamint 
> > tulajdonság <tab> érték
> > kinézetűek.
> > 
> > Mindegyikben ugyanazt ugyanarra kell cserélnem.
> > Az operációs rendszer linux (Debian).
> > 
> > Mi a legegyszerűbb megoldás?
> 
> Azt nem tudom, mi a legegyszerűbb, én ilyesmit csinálnék:
> 
> getent passwd |

Lemaradt a lényeg, csak félre akartam tenni a levelet és elment.
Ha nem oldódott még meg, akkor az én megoldásom ilyesmi lenne:

Szóval először is keresnék egy olyan parancsot, ami interaktivitás nélkül
módosít jól egy fájlt.

ptg@hp03:~$ grep verbose .config/mc/ini 
verbose=0
ptg@hp03:~$ echo -e "%s/verbose=0/verbose=1/\nwq" | ed .config/mc/ini 
2969
2969
ptg@hp03:~$ grep verbose .config/mc/ini 
verbose=1
ptg@hp03:~$ 

Én vim-et vagy ed-et jobban szeretem ilyenkor, mert ott "helyben" tudok
módosítani egy fájlt, a sed-del trükközni kell, az inkább adatfolyamokon
módosít (bár rémlik, h az újabb sed-eknek van olyan kapcsolójuk is, ami
lehetővé teszi fájlok helybenszerkesztését.

A %s/akarmi/valami/ jelenti azt, hogy az összes sorban az akarmit cserélje
valamire. A \n hogy lesz még egy parancs, a wq pedig a mentés-kilépés.


Ha ez megvan, akkor jöhet a getent (feltételezve, hogy a userek mappáiban
ugyanott helyezkednek el a módosítandó fájlok és ugyanaz a nevük -- különben
vajmi kevés esély van automatizálni a dolgot):

getent passwd |
awk -F: '{print $1, $6} |
while read login dir
do
  cd $dir
  echo -e "%s/verbose=0/verbose=1/\nwq" | ed .config/mc/ini # vagy más
  # esetleg: chown $login .config/mc/*
done

Ha nem minden usernél kell, akkor a getent passwd és az awk között
vagy akár az awk-ban vagy akár utána lehet szűrni, awkon kívül grep-pel.
Nálam pl. hogy csak a diákokra vonatkozzon az egész, így menne:

getent passwd |
awk -F: '{print $1, $6} |
grep /home/diakok/ |
while read login dir
do
  cd $dir
  echo -e "%s/verbose=0/verbose=1/\nwq" | ed .config/mc/ini # vagy más
done


-- 
PTG
Debian Lenny
_______________________________________________
Techinfo mailing list
Techinfo@lista.sulinet.hu
Fel- és leiratkozás: http://lista.sulinet.hu/mailman/listinfo/techinfo
Illemtan: http://www.szag.hu/illemtan.html
Ügyfélszolgálat FAQ: http://www.kozhaloportal.hu/gyik/altalanos/

Reply via email to