Linux parancsok Az al´abbiakban n´eh´any Linux parancsra l´atunk p´eld´akat, feladatokat.
F´ ajlm˝ uveletek 1. Hozzunk l´etre egy linux munka nev˝ u k¨onyvt´arat! mkdir linux munka 2. L´epj¨ unk be a linux munka k¨onyvt´arba, ´es hozzunk l´etre egy sz¨oveges f´ajlt a cat paranccsal! cd linux munka gedit orak.txt Digitalis kepfeldolgozas hetfo 16-17 Digitalis kepfeldolgozas hetfo 11-12 Digitalis kepfeldolgozas hetfo 12-13 Adatbazis alapu rendszerek szerda 10-12 Adatbazis alapu rendszerek szerda 12-14 Assembly programozas csutortok 8-9 Assembly programozas csutortok 9-10 Operacios rendszerek csutortok 13-14 Operacios rendszerek pentek 11-13 Operacios rendszerek szombat 8-10 3. N´ezz¨ uk meg a less programmal az orak.txt tartalm´at! less orak.txt 4. T¨olts¨ uk le a honlapr´ol a fajlok.tar.gz a´llom´anyt a linux munka k¨onyvt´arba, majd csomagoljuk ki! tar xvfz fajlok.tar.gz 5. List´azzuk ki a f´ajlokat! 1
2 • f´ajlok list´az´asa: ls • f´ajlok ´es tulajdons´agok list´az´asa: ls -l • f´ajlok ´es k¨onyvt´arak rekurz´ıv list´az´asa: ls -R vagy ls -lR 6. N´ezz¨ uk meg a f´ajlok t´ıpus´at! file * cd linux munka file * 7. Hozzunk l´etre egy masolatok k¨onyvt´arat a linux munka k¨onyvt´aron bel¨ ul! mkdir masolatok M´asoljunk a´t minden f´ajlt ´es k¨onyvt´arat a masolatok k¨onyvt´arba! cp * masolatok (nem tud k¨onyvt´arat m´asolni) cp -r kepek masolatok (a -r kapcsol´o a k¨onyvt´arak tartalm´at is rekurz´ıvan m´asolja) 8. T¨or¨olj¨ uk a masolatok k¨onyvt´arban l´ev˝o f´ajlokat! • rm masolatok/* (a f´ajlokat let¨orli, de a k¨onyvt´arakat nem) • rm -r masolatok/* (mindent let¨or¨ol, a k¨onyvt´arakat is) • rm -rf masolatok/* (mindent let¨or¨ol, a k¨onyvt´arakat is) 9. Hozzunk l´etre egy (soft) linket a kepek k¨onyvt´arr´ol, legyen a neve kepek2: ln -s kepek kepek2 ls -l 10. Arch´ıv´aljuk a kepek k¨onyvt´arat egy kepek.tar.gz f´ajlba: tar cvfz kepek.tar.gz N´ezz¨ uk meg a f´ajl tartam´at! tar tvfz kepek.tar.gz L´epj¨ unk be a masolatok k¨onyvt´arba ´es nyissuk ki ide az t¨om¨or´ıtett f´ajlt: cd masolatok tar xvfz ../kepek.tar.gz
3 11. Ments¨ uk el egy f´ajlba a /usr/bin/ k¨onyvt´arban tal´alhat´o f´ajlok list´aj´at tulajdons´agaikkal egy¨ utt! • ls -l /usr/bin/ | tee fajl lista.txt • ls -l /usr/bin/ > tee fajl lista.txt 12. K´erdezz¨ uk le az aktu´alis k¨onyvt´arat (az el´er´esi u ´ttal egy¨ utt): pwd 13. Keress¨ uk ki a .jpg f´ajlokat a jelenlegi k¨onyvt´arakb´ol: find . -name *.jpg 14. Hasonl´ıtsuk ¨ossze az orak.txt ´es az orak2.txt f´ajlokat! • cmp orak.txt orak2.txt • diff orak.txt orak2.txt
K¨ onyvt´ arszerkezet Ebben a r´eszben a´ttekintj¨ uk a Linux rendszerek fontosabb k¨onyvt´arait. • / : a gy¨ok´er k¨onyvt´ar • /bin: a linux rendszer parancsainak gy˝ ujtem´enye • /dev: az egyes hardver eszk¨oz¨ok egy-egy f´ajlhoz vannak rendelve, ezek tal´alhat´ok itt • /home: a felhaszn´al´ok k¨onyvt´arai • /mnt: u ´j f´ajlrendszer (pl. CD, pendrive, part´ıci´ok) csatlakoz´opontja • /media: u ´j f´ajlrendszer (pl. CD, pendrive, part´ıci´ok) csatlakoz´opontja • /root: a rendszergazada” felhaszn´al´o home-ja ” • /tmp: ide ker¨ ulnek ment´esre az ideiglenes f´ajlok • /boot: a rendszert¨olt˝o illetve a bet¨olthet˝o rendszerek k¨onyvt´ara • /etc: sokf´ele f´ajl • /lib: statikus ´es dinamikus library-k helye (m´ashol is van)
4 • /opt: egyes programok f´ajljai ide telep¨ ulnek, nincs k¨ ul¨on funkci´oja • /usr: a felhaszn´al´ok a´ltal haszn´alhat´o ´es a telep´ıtett programok f´ajljainak k¨onyvt´ara • /sys: a rendszer k¨onyvt´ara
Felhaszn´ al´ ok, csoportok, tulajdonosok Linux rendszerekben elk¨ ul¨on¨ ul a rendszergazdai ´es a hagyom´anyos felhaszn´al´oi szerepk¨or. A rendszergazda felhaszn´al´o neve egys´egesen root ´es a mindehez joga van. A hagyom´anyos felhaszn´al´oknak a joga korl´atozott, bizonyos programokat nem is futtathatnak, illetve bizonyos a´llom´anyokat nem is l´atnak. A Linux rendszer telep´ıt´esekor meg kell adni egy rendszergazdai jelsz´ot. Hagyom´anyos felhaszn´al´o l´etrehoz´asakor meg kell adni a felhaszn´al´oi nevet, a teljes nevet, majd egy k¨ ul¨on jelsz´ot. A rendszer ind´ıt´asakor a´ltal´aban csak a hagyom´anyos felhaszn´al´oi bel´ep´eseket l´atjuk. Ennek az az oka, hogy a mindennapi munk´at hagyom´anyos felhaszn´al´ok´ent el tudjuk v´egezni. Rendszergazdai szerepk¨or a hardver be´all´ıt´asokhoz, telep´ıt´eskehez, illetve a programok telep´ıt´es´ehez sz¨ uks´eges. Minden f´ajl eset´eben h´arom jogk¨ort kell meg´allap´ıtani. Els˝o a tulajdonosi jogk¨or, vagyis az´e, aki a f´ajlt l´etrehozta. A m´asodik jogk¨or a csoport jogk¨ore, vagyis ha egy felhaszn´al´o nem tulajdonosa egy f´ajlnak, de ugyannabba csoportba tartozik, akkor bizonyos m˝ uveleteket ˝o is elv´egezhet a f´ajlokon. A harmadik jogk¨or a mindenki m´as” jogk¨ore, vagyis korl´atozhatjuk vagy el´erhet˝ov´e ” tehetj¨ uk a f´ajlokat m´asok sz´am´ara. Mindegyik jogk¨orh¨oz h´arom-h´arom m˝ uveletre adhatunk jogokat: az ´ır´asra (w), az olvas´asra (r) ´es a futtat´asra (x). Ha tekintj¨ uk pl. az otos.txt f´ajlt, akkor az ls -l otos.csv utas´ıt´as az al´abbi sort adja vissza: -rw-rw-r--.
1 gabor gabor 172641 m´ arc 27 20.33 otos.csv
Az els˝o vonal azt jelzi, hogy nem k¨onyvt´arr´ol, hanem f´ajlr´ol van sz´o (k¨onyvt´ar eset´en d bet˝ u ´allna ott, link eset´en pedig l). A k¨ovetkez˝o h´arom poz´ıci´o a tulajdonos jogait mutatja ez rw-, vagyis a tulajdonos olvashatja ´es ´ırhatja a f´ajlt, de nem lehet futtatni. A k¨ovetkez˝o h´arom karakter a csoport jogait mutatja, ez ugyanaz, mint a tulajdonos´e, az utols´o h´arom pedig a mindenki m´as”-ra vonatkoz´o jogokat jel¨oli, vagyis b´arki sz´am´ara olvashat´o ” a f´ajl, de nem ´ırhat´o ´es nem futtathat´o. A f´ajlhoz tartoz´o jogokat csak a
5 tulajdonos vagy a rendszergazda ´all´ıthatja ´at. A jogok ´at´all´ıt´asa a chmod parancssal t¨ort´enik: • chmod +x valami.sh : mindenkinek (tulajdonos, csoport, mindenki) adunk futtat´asi jogot a shell scripthez. • chmod u+w szoveg.txt : a tulajdonosnak adunk ´ır´asi jogot a f´ajlra • chmod g+x valami.sh : csak a csoportnak adunk futtat´asi jogot • chmod o-r szoveg.txt : a t¨obbiek” nem l´athatj´ak a f´ajlt (levett¨ uk ” az olvas´asi jogot) A jogokat egy h´aromjegy˝ u sz´ammal is megadhatjuk a k¨ovetkez˝ok´eppen: a h´aromjegy˝ u sz´am els˝o sz´amjegye a tulajdonosra, a m´asodik a csoportra, a harmadik pedig a t¨obbiekre” vonatkozik. Az olvas´asi joghoz a 4-es, az ´ır´asi ” joghoz a 2-es, a futtat´asi joghoz pedig a 3-as sz´am tartozik. ´Igy ha valakinek (mondjuk a tulajdonosnak) minden jogot meg szeretn´enk adni a f´ajlhoz, akkor a 7-es sz´amot kell megadni az els˝o sz´amjegynek. Ha mindenkinek minden jogot szeretn´enk megadni a f´ajlhoz, akkor a chmod 777 valami.txt utas´ıt´ast kell haszn´alni. A rendszergazda meg tudja v´altoztatni a f´ajl vagy k¨onyvt´ar tulajdonos´at a chown parancssal. 1. Adjunk ´ır´asi jogot a t¨obbieknek” a kepek k¨onyvt´arban l´ev˝o k´epekhez: ” chmod -R o+w kepek (a -R kapcsol´o a rekurz´ıv jogkioszt´ashoz kell) 2. Vegy¨ uk le a t¨obbiek” olvas´asi jog´at az otos.csv f´ajlr´ol: ” chmod -R o-r kepek A felhaszn´al´o bizonyos nyilv´anos adatainak ki´ırat´asa a finger parancssal t¨ort´enik. • finger gnemeth • finger hxxxxxx • finger (a bejelentkezett felhaszn´al´okat list´azza ki) Hasonl´o, de kevesebb inform´aci´ot ny´ ujt´o parancsa a who. • who -u (ki´ırja, hogy ki mikor jelentkezett be utolj´ara) • who --count (ki´ırja, hogy h´any felhaszn´al´o van bejelentkezve) Ha k´erd´eses lenne, hogy egy g´epn´el milyen felhaszn´al´on´evvel van valaki bejelentkezve, akkor hasznos parancs a whoami.
6
K¨ ornyezeti v´ altoz´ ok A k¨ornyezeti v´altoz´ok a rendszer ´altal nyilv´antartott v´altoz´ok (´altal´aban sztringek). Ilyen pl. a PATH amely a fontosabb programok el´er´esi u ´tvonal´at tartalmazza, vagy pedig az LD LIBRARY PATH, amely az osztott k¨onyvt´arf´ajloknak (shared libs) illetve a statikus k¨onyvt´arf´ajloknak (libs) el´er´esi u ´tvonalait tartalmazza. Az el´er´esi u ´tvonalakat a ‘:’ karakter v´alaszja el egym´ast´ol. A k¨ornyezeti v´altoz´ok ´ert´ek´et ideiglenes (az adott termin´al ablakban) az export parancssal tudjuk megv´altoztani. A k¨ornyezeti v´altoz´ok kor´abbi ´ert´ek´ere a ‘$’ karakterrel tudunk hivatkozni, pl. $PATH . Tov´abbi hasznos k¨ornyezeti v´altoz´ok: • HOME • PWD • USER • USERNAME • HOSTNAME
Bash programoz´ as V´ altoz´ ok • A=15 echo $A • A=’alma’ echo $A
Felt´ eteles vez´ erl´ es # !/bin/bash
# !/bin/bash
if utas´ıt´as; then utas´ıt´asblokk; fi
if utas´ıt´as then utas´ıt´asblokk; fi
7
8 P´elda: Melyik f´ajl tartalmaz t¨obb sort, az orak.txt vagy az orak2.txt? #!
/bin/bash
SOR1=$(wc --lines orak.txt | cut -d " " -f 1) SOR2=$(wc --lines orak2.txt | cut -d " " -f 1) echo $SOR1 echo $SOR2 if [ $SOR1 -lt $SOR2 ] then echo "Az orak2.txt elif [ $SOR1 -gt $SOR2 then echo "Az orak1.txt else echo "mindket fajl fi
tobb sort tartalmaz, mint az orak.txt" ] tobb sort tartalmaz, mint az orak2.txt" ugyanannyi sort tartalmaz"
Ciklusvez´ erl´ es T¨obbf´ele ciklusvez´erl´es l´etezik, most a for-ciklusra n´ez¨ unk p´eld´at. P´elda: H´any f´ajl van az egyes k¨onyvt´arakban? #!
/bin/bash
# Hany fajl van az egyes konyvtarakban for dir in $(ls -l | grep ^d | cut -d " " -f 12 ) do darab=`ls -l $dir | wc --lines`; echo $dir": "$darab; done
P´ eld´ ak 1. Az otos.csv f´ajl alapj´an hat´arozzuk meg, hogy melyik sz´amot h´anyszor h´ uzt´ak ki.
9 Megold´as: #!
/bin/bash
# lotto statisztika: # # # #
melyik szamot hanyszor huztak
az otos.csv fajlban A 12-16. oszlopokban vannak a lottoszamok a .csv fajlokban a ’;’ karakter valasztja el egymastol az oszlopokat
# a szamok tomb inicializalasa for j in {1..90} do szamok[$j]=0; done echo "kiertekeles folyamatban ..."; for i in $(cat otos.csv | cut -d ";" -f 12-16) do for j in {1..5} do szam=‘echo $i | tr -d "\r\n" | cut -d ";" -f $j‘; szamok[$szam]=$((szamok[$szam]+1)); done done for j in {1..90} do echo $j": "${szamok[$j]}; done
2. M´odos´ıtsuk a lott´o statisztik´at u ´gy, hogy a script csak a 5 leggyakoribb sz´amot ´ırja ki. Megjegyezz¨ uk, hogy t¨obb sz´am eset´eben is el˝ofordulhat, hogy a gyakoris´aga ugyanakkora.
10 Megold´as: #!
/bin/bash
# lotto statisztika: # # # #
melyik szamot hanyszor huztak
az otos.csv fajlban A 12-16. oszlopokban vannak a lottoszamok a .csv fajlokban a ’;’ karakter valasztja el egymastol az oszlopokat
# a szamok tomb inicializalasa for j in {1..90} do szamok[$j]=0; done echo "kiertekeles folyamatban ..."; for i in $(cat otos.csv | cut -d ";" -f 12-16) do for j in {1..5} do szam=‘echo $i | tr -d "\r\n" | cut -d ";" -f $j‘; szamok[$szam]=$((szamok[$szam]+1)); done done for k in {1..5} do max=0; for j in {1..90} do if [ $max -lt ${szamok[$j]} ] then max=${szamok[$j]}; fi done str=""; for j in {1..90} do if [ $max -eq ${szamok[$j]} ] then str=$str", "$j; szamok[$j]=0; fi done echo $k": "$str; done
11 3. List´azzuk ki egy megadott k¨onyvt´aron (´es alk¨onyvt´arain) bel¨ ul azokat a f´ajlokat, amelyek a m´ ult h´onapban v´altoztak. u linux eset´en): Megold´as (magyar nyelv˝ #!
/bin/bash
honap=(jan feb m´ arc ´ apr m´ aj j´ un j´ ul aug szep okt nov dec) most=date +"%m"‘; elozo=$((most-1)); for i in $(find $1) do str=ls -l $i‘; if [ $(echo $str | cut -d " " -f 6 ) == ${honap[$((elozo-1))]} ] then f=$(echo $str | cut -d " " -f 9); echo $f; fi done
4. Melyek a bejelentkezett felhaszn´al´o legr´egebben ind´ıtott processzei? Megold´as: #!
/bin/bash
lista=‘ps -ef | grep ^$USER | tr " " "+"‘; min=date +"%H:M"‘; for i in $lista do str=$(echo $i | tr "+" " "); start time=$(echo $str | cut -d " " -f 5); if [[ $min > $start time ]] then min=$start time; fi done for i in $lista do str=$(echo $i | tr "+" " "); start time=$(echo $str | cut -d " " -f 5); if [[ $min == $start time ]] then echo $str | cut -d " " -f 8 fi done