Szkriptek: Python, Perl, Bash, ...

futtathatók listázása

A script listázza ki abszolút elérési útvonallal a PATH‐on található file‐ok közül azokat, amelyeket a paraméterben megadott felhasználó futtathat akár tulajdonos jogán, akár a csoportjogán, akár mindenkimás jogán.

valami tipp esetleg?

nekem eddig ez jutott eszembe:


MyPATH=`echo $PATH | tr ":" " "`
paramgroup=`id -g $1`
GROUP=`ls -la $i | awk '{ print $4 }'`

for i in $MyPATH
do
if [ `ls -la $i | awk '{ print $3 }'` == $1 || `id -g $1` = `ls -la $i | awk '{ print $4 }'`];
then
echo "egyezik $ 1-el" ;
else
echo "nem egyezik $ 1-el"
fi
done

exit 0

ez az if lenne a lényeg de nem jó, és nem tom hogy hogy kellene jól megcsinálni

if [ `ls -la $i | awk '{ print $3 }'` == $1 || `id -g $1` = `ls -la $i | awk '{ print $4 }'`];

relatív útvonal, jogok

Első kérdésem, hogy hogy tudom egy fájlnak kinyerni az akt könyvtártól szamított relatív útvonalát

Második: honnan tudom meg, hogy egy paraméterben megadott felhasználó egy a PATH-ban levő fájlt futtathat akár tulajdonosjogán, akár a csoportjogán, akár mindenkimás jogán.

Bash-ben!

bash array

Ez miért nem jön össze nekem?


    for data_line in  `cat $tmp_file`
    do

       line=$(echo $data_line | tr ';' ' ')
       array=($line)
       echo ${array[@]}

       echo $data_line

    done

Mindig ezt kapom : Syntax error: "(" unexpected (expecting "done")

fsync és szkriptek

Ha jól értettem a ext4-es problémát, akkor a fájlrendszer fejlesztője szerint illene fsync-et vagy fdatasync-et hívogatni fájlok írása után a felhasználói programokban.

PHP-ben pl. nincs f*sync és (az strace szerint) nem is hív ilyesmit mondjuk lezárásnál. Perl-hez lehet fsync-et varázsolni egy CPAN-os modul segítségével, de alapesetben ott sincs ilyen függvény, és ez sem sync-el mondjuk close után. Egy bash-ben kiadott

echo x >filepath

után max. egy sync parancsot adhatok ki, ami azért elég durva.

Ezek szerint szkriptnyelvekben majdnem esélytelen a biztonságos fájlkezelés?

Azonos sorok törlése nem rendezett szöveges fáljban

Milyen megoldást lehetne kiatálni, a következő problémára:

Van egy kb. 100 ezer soros text file:

1:
alma
körte
barack

2:
szilva
narancs
narancs

3:
banán
egres
egres
egres

...
...

Azokat a sorokat szeretném kicserélni, ahol több van belőlük, és azt szeretném, hogy csak 1 maradjon.
Fontos a szöveget nem rendezhetem, a sorrendnek maradnia kell.
alap esetben minden szó csak egyszer fordulhat elő, kivéve az említett esetekben.

shell script - hibacsatorna figyelese

Irtam egy fajl atnevezo szkriptet, amit szeretnek finomhangolni ugy, hogy a csak a "-a utvonal" parametert fogadja el, vagy csak siman az "utvonal"-at vegye figyelembe; ha valamilyen masik opcioval akarnak inditani, irja ki, hogy ez nem fog menni, probald ezt-meg-ezt. A "-a utvonal" meg van oldva, viszont a sima "utvonal"-lal bajban vagyok, ugyanis ezt ugye nem lehet osszehasonlitani egy elore definialt sztringgel. Viszont - mivel ls-t is hasznalok a szkriptben - arra gondoltam, hogy akkor ls hibacsatornajat figyelve megtudhatom, hogy most utvonalat irtak-e be, vagy valami mast. Viszont nem tudom, hogy egy ideiglenes fajlba iras hasznalata nelkul hogy lehetne megoldani a dolgot? Vagy irjam ki fajlba a hibacsatorna uzenetet, aztan ha kiirta, hogy ez igy nem lesz jo, toroljem a fajlt?

írási jogok listázása

sziasztok

a problémám, ki kellene listázni azokat a fájlokat, amikre mindenkinek van írási joga, viszont a spec-ben van egy ilyen kikötés hogy:
"Azokat a file‐okat ne írja ki, amelyek az írási jog ellenére mégse írhatóak."

ezet hogy tom meg állapítani, vagy ezek milyen fájlok?
meg azt hogy tudom megnézni hogy mindenkinek van-e? ( -ugo=w ?)

ezt a parancsot használom:

find $1 -perm -u=w -type f

még van egy olyan kikötés hogy a megadott könyvtártól számított relatív utvonall írja ki a fájl nevét, van erre vmi jó módszer vagy cuttal vágdossam szét find kimeneteit?

Több soros előfordulás keresése, és plusz sor beszúrása kötött segédeszközökkel

Sziasztok!

Init szkriptben kéne megkeressek egy több soros előfordulást, és közé kellene beszúrnom még egy plusz sort. Sajnos a sed az nem használható önmagában erre, mert az ugyebár egyszerre csak 1 sort tud feldolgozni (javítsatok ki ha tévednék).

Nekem meg ilyesmi patternt kéne megkeresnem:


iptables -N OUTS -d $NET_ADDR -j ACCEPT
}
}

Majd pedig az iptables kezdetű sor után, a két utolsó kapcsos zárójel elé, be kéne szúrnom még egy plusz sort.

A másik probléma az, hogy ezt OpenWRT-t futtató routereken kéne megtegyem. Pulsz csomag feltelepítése kizárt (egyéb okokból), a rendelkezésre álló előre feltelepített parancsok az alábbiak:

sh
grep
sed
awk

Tehát ezek valamelyikével, vagy ezek kombinációjával kéne megoldani. Az AWK mintha tudna több sorral is dolgozni valamilyen trükkös módon, de nekem nem sikerült megtalálnom sehol sem, hogy hogyan.

Tudna valaki segíteni?

file-ok szétválogatása dátum alapján

Sziasztok!

Van egy nagyobb mennyiségű (több mint 100.000 db) file-om. Mindegyikben megtalálható a következő tag : 2009-02-18T18:01:10.

Szeretném, ha azokat a file-okat, amelyeknél ez a dátum értéke nagyobb mint 2009-02-19T00:00:00 átmozgatná egy másik mappába.
Ebben kérném segítségeteket. Sajnos nem vagyok egy script guru, és elég sürgős is lenne.
Köszönöm a segítséget előre is.
Del