Jegyzetben a 8-9.-10. fejezet (97.-től 125. oldalig). http://stegerjozsef.web.elte.hu/teaching/szamalap.pdf
Egyéb források:
Linux parancsok: http://www.letix.hu/
Terminálban használható szövegszekesztőből több is létezik, melyek közül az egyik leghatékonyabb és legelterjettebb a Vim
, de mivel használata hosszú gyakorlást igényel, így mi nem ezt használjuk az órán.
Egy egyszerű szövegszerkesztő az mcedit
. Indítása egyszerűen az 'mcedit'
paranccsal történik.
mcedit FÁJLNÉV
paranccsal.A linuxban többféle ablakos szövegszerkesztő van alapértelmezésben telepítve. Az egyik legelterjettebb a gedit
nevű program.
Mindenki índítsa el a gedit nevű programot:
gedit
Hasonlóan működik, mint a Windowsban a jegyzettömb.
A linuxban lehetőség van a programok párhuzamos kezelésére, akár 1 terminál ablakon belül is. Az épp futó alkalmazást háttérbe lehet küldeni, és az így visszakapott promt után más parancsok is kiadhatók.
Példa:
Mindenki indítsa a gnuplotot: gnuplot
Ezátán adjuk ki a CRTL+Z
billenytű kombinációval felfügesztés parancsát, majd bg
beütésével háttérbe küldhető a program.
gnuplot
'CTRL+z'
bg
A jobs
paranccsal ellenőrizhető, milyen futó programok vannak. (Ezek relatív számok, csak az adott terminában érvényesek!)
Minden program melett van egy szám (ID), amivel hivatkozható a program:
Program kilövése: kill %ID
paranccsal
kill %2
Program előrehozása: fg %ID
paranccsal
fg %1
A kill
parancs a programok számára küld üzenetet/utasítást. Ez lehet többek közöt az azonnali kilépés (ez a default).
Működése:
kill PID
pl.: kill 3213
Megj.: PID=Process IDentifier, azaz egy futó program egyértelmű azonosíthatóságát meghatározó szám (Ált.: 1-32768-ig.)
A PID-et a ps
vagy a top
használatával tudod megállapítani többek között.
?
: 1 darab "akarámit" helyettesít"sinusa?atok.dat"
# ez lehet "sinusadatok.dat"
*
: Akármilyen hosszú szövegrészt helyettesít (lehet a semmi is!)"sin*.dat"
# Minden fájl aminek ".dat" a vége, és "sin" az eleje
$
: Segítségével változó neve és értéke között tudunk különbséget tenni. Ha $valtozo
-t írunk, az a változónk értékét fogja visszaadni.cica=10;echo $cica
---> Eredménye: 10\
: Bourne Again Shell escape-karaktere. Többek között ezzel a jellel lehet elérni, hogy az azt követő speciális karakter elveszítse módosító hatását.cica=1;echo \$cica
---> Eredménye: $cica$
-t a változók jelzésének tekintseecho '$cica'
---> Eredménye: $cicaecho "Ez egy szöveg"
---> Eredménye: Ez egy szövegFájlokat a find
paranccsal lehet keresni.
find ~ -name "*.jpg"
# az összes jpg kiterjesztésű kép keresése a home-ban
find ~ -iname "*.DAT"
# kis és nagybetű különbség nincs
find / -perm 777
#777-es joggal rendelkező állomány keresése a gyökérben
find ~/latex -size +1024M
#1024 Mb-nál nagyobb fájlok keresése a /latex mappában
Szöveget keresni a grep
parancs segítségével lehet.
Alapértelmezésben nem azonos a kis/NAGY betű.
grep equation ./latex/latex.tex
# "equation" szó keresése a latex.tex-ben
grep equation *
# "equation" szó keresése minden fájlban a mappán belül
grep -i EquAtion * # Kis/NAGY betű nem számít
grep -n equation * # kiírja a sor számát
grep -l equation * # Fájlnevet ad vissza
Lehetőség van a kimenetet a terminál ablak heylett pl. fájlba irányítani:
ls -l > file_lista.txt
Létrejött a file_lista.txt
(ha létezett már a fájl, akkor ezzel felülírodott)
Megjegyzés: Fájlból bemenetet csinálni a "<"
jel tud.
Hozzáírni a >>
paranccsal lehet egy meglevő fájlhoz:
echo "Kiscica,ezt hozzáírom a fájlhoz" >> file_lista.txt
tail file_lista.txt
passwd
: Jelszó csere. Ekkor kéri a régi jelszót, majd 2-szer az újat a rendszer! Ezeken a gépeken nem használható!file akarmi.tex
: megvizsgálja az akarmi.tex típusátuniq
: Több sorból álló szövegben az ismétlődő sorokkal kezd valamittree
: kiírja a könyvtárstruktúrátdu
: Az aktuális könyvtár fájljainak méretét adja megdf
: Szabad terület számítása, partíciónkénttouch file
: létrehoz egy "file nevű" üres állománytcut
: Bemenetként (stdin), vagy paraméterként megadott fájl minden sorának egy megadott részét vágja ki
tr
: karakterek lecserélése, változtatása adott karaktersorban
echo vegyes | tr a-z A-Z
: a vegyes szóban a kis betűket nagyra cseréli.echo egyesek | tr -d e
: az egyesek szóból kitörli az e betűketdiff -u file1 file2 > eredmeny
: Összehasonlítja a fájlok tartalmát, a különbséget pedig az "eredmeny"-be írjatar
: Ki-be tömörítőtar -czvf file.tar.gz /eleresi/ut/amit/mentunk
: az elérési útvonal alatt levő adat gzip-be tömörítésetar -xzvf file.tar.gz
: Kitömöríti a gz-t, majd a tar-t, és egy /file könyvtárba teszilogin
: Bejelentkezéslogout
: Kijelentkezéswho
: Bejelentkezett felhasználók kiíratásaps
: Futó folyamatok kiírásakillall command
: az összes fehasználó (amihez van jogunk) által futtatott "command" nevű folyamat leállítása shutdown -P now
: Kikapcsolás (-P=Poweroff), azonnal (percben lehet megadni az időt)Irodalom (angol és magyar nyelven):
Bash programozás:
A parancsértelmező által ismert parancsok fűzhetőek össze egy "programba" vagy más néven shell script-be.
#!/bin/bash
chmod +x programnev
bash programnev.sh
(./programnev.sh)
Más interpreterekhez:
python akarmi.py #python script
octave valami.m #octave script
Hozzunk létre egy hello.sh fájlt, és írjuk bele:
gedit hello.sh &
#!/bin/bash echo Hello World!
Mentés után futtassuk le:
(chmod u+x hello.sh)
bash ./hello.sh
Változók: Lehetséges változókat eltárolni és később hivatkozni rájuk: $izé
az izé nevű változó.
szam=20
echo $szam
Egész számok generálása a seq
paranccsal lehetséges (pl. 10-től 100-ig)
seq ELSŐ NÖVEKMÉNY UTOLSÓ
seq 10 2 100 # 10-től kettesével 100-ig megy
seq 100 -5 10 # 100-tól 10-ig 5-ösével
Próbáljuk ki:
a=2
b=5
echo $a*$b
let
parancs: Ez a parancs képes aritmetikai műveleteket végezni: ("b++" jelentése, a b-t 1-gyel megnöveli)a=1234; let "a=a+1"; echo "$a"
a=2; b=5; let c=$a*$b; echo $c
let 'b = a' "(a += 3) + $((a = 1)), b++"
A következő 3 példához használjuk a test.sh -t állományt:
gedit test.sh &
chmod u+x test.sh
A következő 3 példát másoljuk bele (külön-külön), mentsük el a fájlt, majd teszteljük le szkripteket a következő parancs kiadásával:
bash test.sh
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo a szamlalo erteke: $COUNTER
let COUNTER=COUNTER+1
done
COUNTER változót 1-gyel növeli addig, amíg el nem éri a 10-et.
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo a szamlalo erteke: $COUNTER
let COUNTER-=1 # COUNTER-=1 jelentése: COUNTER=COUNTER-1
done
COUNTER változót 20-as kezdőértékről 1-gyel csökkenti, amíg el nem éri a 10-et.
Szintatktika: for "Változó megadás" "Állítás" "Utasítás"
#!/bin/bash
for i in `seq 1 10`;do
echo $i
done
Az i változó felveszi 1-től 10-ig az értékeket, majd ki is írja a képernyőre
";"
vagy "&&"
jel váltja fel:¶SZAM=0; while [ $SZAM -lt 10 ]; do echo érték: $SZAM ;let SZAM=SZAM+1;done
COUNT=20; until [ $COUNT -lt 10 ]; do echo érték:$COUNT; let COUNT-=1;done
for i in `seq 1 10`;do echo $i; done
for i in `seq 2 5 100`;do echo $i; done
for i in $(ls);do echo fájlok: $i; done
Jegyzetben az 4. fejezet (53-től 67. oldalig). http://stegerjozsef.web.elte.hu/teaching/szamalap.pdf
Az awk (vagy gawk, azaz GnuAWK) egy olyan programozási nyelv, amit szöveges állományok feldolgozására terveztek. Egy tipikus awk programot (szkript) egy interpreter olvas be és hajt végre. A szkript végrehajtása során a feldolgozott szöveges állomány(ok)at (tartalmának változatlanul hagyásával) másféle kimenetté formálja át. A bemeneti adatok változatlanul hagyása biztosítja, hogy ugyanazon adatokra (például szövegfájlok) többféle awk program is futtatható egymás után, vagyis ugyanazon fájl(ok)ból többféle adat is kinyerhető legyen.
Töltsük le a két fájlt:
wget itl7.elte.hu/~iracz/Oktatas/SzA/millenium.dat
wget itl7.elte.hu/~iracz/Oktatas/SzA/millenium_new.dat
Nézzük is meg őket:
more millenium.dat
more millenium_new.dat
Mi az eltérés köztük?
A BEGIN
előfeldolgozó a lényegi programot megelőzően fut le. Itt lehet megadni például a bemeneti fájl szerkezetét (pl. mi az oszlopelválasztó karakter).
Az END
utófeldolgozó a lényegi program után fut le. Itt adható meg, hogy pl. mentse el egy fájlban adott stílusban az eredményt a szkript.
awk '{print $8,$3,$4,$5}' millenium.dat | sort > adat.dat
more adat.dat
gnuplot
splot "adat.dat" u 2:3:4 lw 5
plot "adat.dat" u 1:2 w p ps 7