Hogyan tudom megcsinálni az alábbi linuxos feladatokat?
Az alábbi parancsot használtuk egyszer:
sudo find / -type f -exec file ’{}’ \; | grep ’Shell script’ | wc -l
Kérdések:
1. Mi történik, (és miért), ha az idézőjeleket elhagyjuk az exec file ’{}’ parancsban?
2. Mi történik, (és miért), ha a \-t hagyjuk el
3. Mi történik, (és miért), ha a grep parancsban hagyjuk el az idézőjeleket?
Ennél az a baj, hogy a parancssor már rögtön azt írja, hogy hiányzik az exec argumentuma, így nem tudom lefuttatni
Adott a következő parancsfájl:
#!/bin/bash
a=`df --output=pcent /$1 | grep '[0-9]' | sed 's/%//'`
b=`expr $a \< $2`
echo $b
exit $b
#
Kérdések:
1. Írja le szövegesen, mit csinál a parancsfájl
2. Futtassa le, az eredményről képet kérek.
Segítség hozzá:
A parancsfájlt két paraméterrel meghívni, az első egy directory/diszk, a második egy 0 és 100 közötti szám.
A 2. feladatnál már alapból a kérdést sem értem, mi az hogy a parancsfájlt két paraméterrel kell meghívni.
Az elsőhöz:
"hiányzik az exec argumentuma"
Jó lenne tudni, mi a pontos üzenet. Önmagában a 'file' parancs mit csinál?
Először csak ezt futtasd le:
find / -type f -exec file '{}' \;
Ennek ki kell írnia egy rakás sort. (Javaslom egy olyan mappában futtatni, hol pár szkript van, és akkor a find utáni / helyett csak egy pontot tegyél, gyorsabban lefut.) Nézd meg, hogy mi szerepel szkriptek soraiban. Nálam ez:
POSIX shell script, ASCII text executable
vagy
Bourne-Again shell script, ASCII text executable
Vagyis a shell script kisbetűvel van!!
Ha ez működ, akkor:
find / -type f -exec file '{}' \; | grep 'shell script'
Ez már csak a szkripteket listázza ki. Ha ez is működ, akkor a végére írhatod a maradékot, ami számot ír majd ki.
Másodikhoz:
Biztos írtál már be olyat, hogy egy program neve és utána a paraméterek. Pl. a
grep 'shell script'
is ilyen volt. A grep után jön az ő paramétere, amivel dolgozik. Na most a te szkripted is át tud venni paramétereket a parancssorból, ezek a $1 és $2 helyére kerülnek majd futtatáskor. Például ha egy xyz nevű fájlba írod a megadott sorokat (a két # között), és futtathatóvá is teszed, akkor pl. így hívhatod meg:
xyz home 100
A helyzet ugyanaz mint fentebb. Először próbáld ki a parancssorban, mit csinál ez:
df --output=pcent /home
Elvileg kiír egy fejléc sort, alá pedig a /home foglaltságát százalékban.
Most próbáld ki ezt:
df --output=pcent /home | grep '[0-9]'
Ez azt a sort szűri ki, ahol számok szerepelnek, vagyis maga a százalék érték, de még ott lesz a százalékjel mögötte.
df --output=pcent /home | grep '[0-9]' | sed 's/%//'
A sed a végén leszedi a százalékjelet, tehát marad egy szám.
Ezt a számot fogja (karakteresen) az 'a' változóba tenni.
Az expr tuképpen egy kifejezést értékel ki, vagyis hogy ez a szám kisebb-e, mint a második paraméter. Ha igen, akkor 1-et ad vissza, ha nem, akkor 0-t. Kipróba:
expr `df --output=pcent /home | grep '[0-9]' | sed 's/%//'` \< 100
Ennek az eredményét a 'b' változóba teszi, kiírja, és ez lesz a szkript exit kódja is, tehát a shellnek is ezt adja vissza. (Használható pl. feltételként is a szkripted.)
Kieg: Ez a jel ` (nálam legalábbis) az alt+7 leütésére jön elő. Ha ilyen idézőjelek között van egy parancs, akkor azt lefuttatja és a kimenetét behelyettesíti az egész kifejezés helyére. Tehát a= és ide berakja a df+grep+sed futásának eredményét.
#1-3.
Köszi, holnap meglesem őket, aztán ha elakadok, akkor írok ide még. Ez volt a teljes feladatkiírás, amit kaptunk. Egyébként írtam privátban.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!