Jump to content
GSForum - Segélyvonal

Linux Bash scriptelés


tomykav
 Share

Recommended Posts

tomykav

Hali!

 

Lenne egy kérdésem Bash Script-tel kapcsolatban. Meg kellene néznem egy távoli gépen, hogy nyitva van-e a 139-es portja (nem hackerkedés, hanem felügyelet céljából). Én írtam rá egy kis gagyi programocskát, de nem lett az igazi:

 

#!/bin/bash

if [ `nmap $1 | grep "netbios-ssn" | sed 's/\ /_/g'` == "139/tcp__open__netbios-ssn" ]; then

      echo "A 139-es port nyitva";

      exit 0;

else

      echo "A 139-es port zárva";

      exit 2;

fi

 

Mûködik, de valami komolyabb kellene, de más módszer nem jut eszembe. Tudnátok segíteni?

Link to comment
Share on other sites

Greene

Na most gondban vagyok. Egyrészt ilyen mélységekig sose mentem bele a scriptelésbe. Másrészt vajon ez a téma inkább linux, vagy inkább programozás? :hmm:

 

Egyelõre marad itt, majd beszélek tzolival. :)

Link to comment
Share on other sites

tomykav

Én is sokat gondolkodtam, hogy hol tegyem fel a kérdést. De ha nem jó helyen van, akkor tedd át. Köszi

Link to comment
Share on other sites

aty

Minek erre script?! Ráadásul amit írtál végignézi az összes portot és rettenetes lassú.

nmap -p 139 hostnev - Sokkal egyszerûbb megoldás.

Esetleg

nmap -p 139 hostnev | grep open

Ebben az esetben ha nincs kimenet akkor zárva van, ha van akkor open.

Link to comment
Share on other sites

tomykav

A script azért kell, mert nem én nézem a kimenetet, hanem egy Nagios nevû felügyeleti rendszer. A scriptet minden ellenõrzéskor lefuttatja, és a script által generált visszatérési értéket feldolgozza a rendszer. Majd pedig értesítést küld az illetékeseknek, ha a port nincs nyitva. Tehát azért van szükségem a scriptre, hogy visszatérési értéket adjon át, mert a felügyeleti rendszer csak azzal tud valamit is kezdeni.

 

Egyébként a tippet köszönöm, majd kipróbálom.

Link to comment
Share on other sites

aty

Nah akkor valahogy így:

#!/bin/bash
if [ "`nmap -p 80 $1 | grep open`" != "$NULL" ]; then
     echo "A 139-es port nyitva";
     exit 0;
else
     echo "A 139-es port zárva";
     exit 2;
fi

 

Jó kis küzdelem volt addig, amíg kiderült hogy az utasítás köré a `-on kívûl kell egy idézõjel is ebben az esetben:)

Link to comment
Share on other sites

tomykav

Nagyon szépen köszönöm a fáradozásaidat! Tényleg hatékonyabbnak tûnik az enyémnél!

Link to comment
Share on other sites

aty

Jah -p 139 kell bocs.

Http szerverekkel teszteltem, azért volt 80.

Link to comment
Share on other sites

  • 1 month later...
Kovács Dávid ( Davs )

Hy!

Kerestem ezt a topicot, mert biztos, hogy létezett, de nem találtam :pislog:

Nah mindegy, akkor felteszem ide a jókora "kérdéscsomagomat" ;) A múlt héten ( vagy azelõtt ) voltam MO-n, és vettem egy könyvet: Pere László : Linux felhasználói ismeretek. Ebbõl tanulgattam a Linux alatti Bash scriptelés alapjait, de pár dolog nem világos:

:nyíl: az export mire való ?

:nyíl: a local mire való ?

:nyíl: A for ciklus nem vili. PHP alatt pl. for($i=0;i<15;$i++). Ez világos. De itt ezt a fajtát kell használni: for v in k; do

 

mag

 

done

 

Ezt elmagyarázná nekem valaki? Fõleg a v és a k kapcsolatát.

Link to comment
Share on other sites

tomykav

A v és a k kapcsolatát egy példán mutatnám meg:

pl.:

for i in "a b c d e"; do
echo $i;
done

Az i változó felveszi az idézõjelbe tett adatokat. Tehát ennek a kimenete a b c d e lesz.

A "k" helyére lehet betenni parancsokat is az altgr+7 (``) idézõjelek közé. Mondjuk van egy matrix.dat állományod a következõ tartalommal:

1 2 3
4 5 6
7 8 9

akkor a mátrix elemeit fogja felvenni az i változó a következõ kódban:

for i in `cat matrix.dat`; do
echo $i;
done

Remélem érthetõ volt. Egyébként C szintaxissal is lehet ciklust írni bash-ben, de nem szoktam használni, és nem tudom, hogyan mûködik.

Link to comment
Share on other sites

Kovács Dávid ( Davs )

Hy!

Úgy ahogy átjott. Hoppá nem megy az ALT + szám! Nem tudok ékezetes betut írni! Bocs, valamit kitalálok. Csak már végre Linux alól nyomom :D

Link to comment
Share on other sites

  • 1 year later...
szakos

Helló!

 

Abszolút kezdõ vagyok linuxban, de ahova járok suliba elég komolyan veszik ezt!

Kaptunk egy feladatot, amit be kell hamarosan adnunk, de igazából nem tudom, hogy kezdjek hozzá!

Odáig megy, hogy w vagy who am i parancsokat kell használni, de nem nagyon értem, hogyan!

Ha esetleg tudna segíteni, annak elõre is köszi!

 

Ákos

 

Itt a feladat:

 

p l (process list)

A paraméterben megadott felhasználó processzeirõl ír ki információkat.

Ha nem adunk meg felhasználót, akkor a script-et futtató felhasználóról

adunk adatokat. Amit ki kell írni: process ID, CPU-idõ százalékban és a

parancs neve. Az adatokat a CPU-idõ szerinti növekvõ sorrendben kell

kilistázni. Egy külön kapcsolóval a programot interaktívvá lehet tenni, vagyis

x másodpercenként újra megvizsgálja a processzeket és kiírja, mindezt

addig teszi, míg le nem nyomjuk a Ctrl+C-t.

 

//Program része kell legyen a paraméterek lekezelése és a

//segítségkérés (pl. „-?” kapcsolóval). Rossz használat esetén szintén egy rövid

//használati segédlet jelenjen meg.

Link to comment
Share on other sites

Greene

Ez a kód 5 másodpercenként lefuttatja a hátultesztelős ciklust, amiből CTRL+C-vel léphetsz ki

 

#!/bin/bash

while :
do
    clear
    parancs1
    parancs2
    ...
    sleep 5
done

 

 

Ez pedig -t és -r opciókat vár

while getopts t:r: MYOPTION
do
    case MYOPTION in
        t)    RESTAURANTTYPE=$OPTARG;;
        r)     RATING=$$OPTARG;;
        \?)     echo "Sorry no such option, please try again"
            exit 1
;;
            
done

 

Sajnos Bashben nem használtam még argumentumokat, csak Perlben és PHP-ban.

Kiindulásnak ez jó lesz. Linux alatt a "ps" parancs opcióit nézd meg ("man ps").

 

Esetleg jó ötlet lehet egyszerűbb parancsokat megnézni a /bin könyvtárban vagy a /sbin-ben, mert sok parancs nem más mint egy bash script, ami mindenféle opciókat vár.

Továbbá nézd meg a "top" parancsot, mert az azt tudja amit te szeretnél, csak komolyabb

Link to comment
Share on other sites

szakos

Köszi a segítséget!

Link to comment
Share on other sites

  • 6 months later...
diebold

Sziasztok.

Kéne egy kis help.

Na szóval olyan bash filet akarnék írni ami:

Akárhány bemenettel meghívható( de csak fileokkal, különben hibát dob ki és exit 1-el ki is lép ), de minimum egy fileval meg legyen hívva kül szintén kilép exit 1-el. A lényege a filenak (ami nem megy), hogy a bemeneten kapott fileokat egyesével megnyitva azok sorai elé sorrol sorra generál egy random számot ( a $RANDOM parancsal ), majd már csak sorbarendezve véletlen sorronkénti rendezést csinál a sorokon.

Lefordítva a fileok tartalmát soraik szerint random összekeveri.

Na ha valaki kisegítene akkor nagyon boldog lennék.

Csak az kéne ami egyesével minden sor elé generál egy véletlen számot.

 

Elõre is köszike

Link to comment
Share on other sites

  • 10 months later...
Aglaia

Sziasztok!

 

Van itt még valaki? Kellene egy kis segítség, mivel nem régen kezdtem el linux-szal foglalkozni.

 

Szóval írtam egy scriptet, amit idõzítve szeretnék futtatni. Az ndsrepair parancsot tartalmazza csak. A problémám az, hogy ha kézzel adom ki a parancsot egy terminálban, akkor szépen lefut, ha viszont a scriptet indítom, akkor csak az elsõ sort írja ki, a DS száma már a végérõl hiányzik.

 

Tudna valaki hozzászólni ehhez? Mi lehet a gond?

Link to comment
Share on other sites

Gereby

Futtasd cronnal.

Link to comment
Share on other sites

  • 1 year later...
Black_Adder

Sziasztok. Egy kis segítséget krnék pár feladatban. Ezek házik voltak, de a beadási határidelyük már lejárt, csak nem tudtam megcsinálni.

Ha valaki tudna egy gazdagon commentelt megoldással szolgálni valamelyik feladat(ok)ra, az nagyon nagy segítség lenne:

 

Felh. kezelés:

1.)

Készítsen egy Bash scriptet, ami fogad egy felhasználó és hozzárendelt könyvtár listát CSV formátumban, létrehozza a felhasználókat és a könyvtárakat és beállítja a jogosultságokat úgy, hogy minden felhasználó be tudjon lépni, olvasni és írni is tudjon a hozzárendelt összes könyvtárban, de ne tudjon belépni egyéb könyvtárakba, amikhez nem volt hozzárendelve. Egy felhasználó több könyvtárhoz és is lehet rendelve és egy könyvtárhoz is több felhasználó lehet rendelve. Posix ACL-eket nem használhat, viszont szükség esetén létrehozhat új csoportokat. Ha a rendszeren meglévõ felhasználót talál, azt ne módosítsa, hagyja ki teljesen! Feltételezhet angol locale beállítást. A bemenetet a következõ formátumban kapja meg:

konyvtar1:usernev1

konyvtar1:usernev2

konyvtar2:usernev2

 

2.)

Készítsen egy Bash scriptet, ami paraméterként egy CSV fájl teljes elérési útját várja, majd létrehozza az ebben definiált felhasználókat és hozzáadja a megadott csoportokhoz! A CSV fájl szerkezete:

login,password,description,groups

testusr1,pass$wo4ed,Teszt felhasznalo 1,wheel;csoport1

testusr2,pass$wo4ed,Teszt felhasznalo 2,csoport2

A scriptnek gondoskodnia kell arról, hogy az esetlegesen nem létezõ csoportokat létrehozza. Viszont ha a rendszeren már meglévõ felhasználót talál, akkor azt ne módosítsa! Feltételezhet angol nyelvû locale beállítást, továbbá azt, hogy a felhasználók és csoportok nevében nem lesz , ; illetve whitespace karakter.

Vegyen hozzá a CSV fájlhoz még két sort, az egyikben saját magát adva meg!

 

Konfiguráció kezelés:

1.)

Készítsen olyan Bash scriptet, ami paraméterként megkapja egy CSV fájl elérési útját, majd a CSV fájlban felsorolt (<hostnév>,<usernév>,<jelszó>) gépeket sorban lekérdezi wbemclivel, majd egy HTML jelentést készít a felsorolt gépek következõ tulajdonságairól:

Processzor adatai (típus, órajel, család, stepping)

Alaplap adatai (típus, szériaszám)

Operációs rendszer adatai (név, verzió, hosztnév)

Memória mérete

A HTML oldal címe computer inventory legyen.

 

2.)

Készítsen egy olyan bash scritptet, amit egy paraméterként megkapott távoli számítógéprõl lekérdezi az ott futó folyamatokat.

A paraméterezés a következõ legyen (–u és –p sorrendje felcserélhetõ, valamint ne legyen kötelezõ õket megadni):

wbemps –u <username> –p <password> <hostname>

A kimenet a következõ formátumú legyen:

USERID PID DESCRIPTION

500 2968 sshd

 

Elõre is köszönök minden segítséget:

B

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...