tomeges tartalommodositas
Pirity Tamas Gabor
ptg at apaczai.elte.hu
2012. Aug. 17., P, 10:38:38 CEST
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 at hp03:~$ grep verbose .config/mc/ini
verbose=0
ptg at hp03:~$ echo -e "%s/verbose=0/verbose=1/\nwq" | ed .config/mc/ini
2969
2969
ptg at hp03:~$ grep verbose .config/mc/ini
verbose=1
ptg at 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
További információk a(z) Techinfo levelezőlistáról