2.1 Lecke 1
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
2 Hogyan Igazodjunk El Linux Rendszerekben? |
Fejezet: |
2.1 Paranccsor Alapok |
Lecke: |
1/2 |
Bevezetés
A modern Linux disztribúciók sokféle grafikus felülettel érhetőek el, de egy rendszeradminisztrátornak mindig tudnia kell, hogy dolgozzon a parancssorral, azaz a shellel. A shell egy olyan program, amely írásos kommunikációt tesz lehetővé az operációs rendszer és a felhasználó között. Általában egy szöveges program, amely beolvassa a felhasználó által megadott szöveget és ezt parancsként dolgozza fel a rendszer.
Több különféle shell létezik Linux alatt, íme néhány példa:
-
Bourne-again shell (Bash)
-
C shell (csh vagy tcsh, a továbbfejlesztett csh)
-
Korn shell (ksh)
-
Z shell (zsh)
Linux alatt a legnépszerűbb a Bash shell, a példákban és a gyakorlatokban is ezt használjuk.
Interaktív shell használata során a felhasználó az úgynevezett promptnak tudja kiadni a parancsokat. Az egyes disztribúciók esetén eltérhetnek egymástól a promptok, de általában az alábbi struktúrát követik:
username@hostname current_directory shell_type
Ubuntu vagy Debian/GNU Linux alatt a prompt valószínűleg így néz ki az átlagos felhasználó számára:
carol@mycomputer:~$
A root felhasználó promptja:
root@mycomputer:~#
CentOS vagy Red Hat Linux alatt a promptot ilyennek látja az átlagos felhasználó:
[dave@mycomputer ~]$
A root pedig ilyennek:
[root@mycomputer ~]#
Nézzük meg a struktúra összes komponensét:
username
-
A felhasználó neve, aki a shellt futtatja
hostname
-
A számítógép neve, amin a shell fut. Létezik egy
hostname
parancs is, amellyel megnézhetjük vagy beállíthatjuk a hosztnevet. current_directory
-
A mappa, ahol a shell éppen van. A
~
azt jelenti, hogy a shell az aktuális felhasználó home mappájában van. shell_type
-
A
$
jelzi, hogy a shellt átlagos felhasználó futtatja.A
#
jelzi, hogy a shellt aroot
futtatja.
Mivel nincs szükségünk különleges jogosultságokra, a példákban egy általános promptot fogunk használni. A rövidség érdekében a $
jelzi a promptot.
Parancssori Struktúra
A legtöbb parancs a parancssorban ugyanazt az alapvető struktúrát követi:
command [option(s)/parameter(s)...] [argument(s)...]
Adjuk ki az alábbi parancsot:
$ ls -l /home
Nézzük meg a struktúra összes komponensét:
- Parancs
-
A program, amit a felhasználó futtatni fog – példánkban az
ls
. - Opció(k)/Paraméter(ek)
-
A “kapcsoló” valamilyen módon megváltoztatja a parancs viselkedését, mint például a fenti példában a
-l
. A kapcsolók megadhatók hosszabb vagy rövidebb formában is. Például, a-l
ugyanaz, mint a--format=long
.A kapcsolók a rövid formában kombinálhatóak, a betűk megadhatók együtt. A következő parancsok mindegyike ugyanazt az eredményt éri el:
$ ls -al $ ls -a -l $ ls --all --format=long
- Argumentum(ok)
-
A program által megkövetelt kiegészítő adatok, mint fájlnév vagy elérési út, például a fenti példában a
/home
.
Ennek a struktúrának az egyetlen kötelező része a parancs. Általában a többi elem nem kötelező, de a programok kérhetnek további kapcsolókat, paramétereket vagy argumentumokat.
Note
|
A legtöbb parancs rövid áttekintést jelenít meg a parancsról, ha a |
Parancsok Működésének Típusai
A shell két parancstípust támogat:
Belső (internal):
Ezek a parancsok a shell részei és nem különálló programok. Körülbelül 30 ilyen parancs van. A fő céljuk a parancsok shellen belüli futtatása. (pl.: cd
, set
, export
).
- Külső (external)
-
Ezek a parancsok külön fájlokban találhatók, amelyek általában bináris programok vagy szkriptek. Ha egy olyan parancsot futtatunk, ami nem a shell része, a shell a
PATH
változót használja a paranccsal azonos nevű végrehajtható fájl keresésére. A disztribúció csomagkezelőjével telepített programok mellett a felhasználók saját külső parancsokat is létrehozhatnak.
A type
parancs megmondja, hogy milyen típusú az adott parancs:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Idézőjelezés
Linux felhasználóként fájlokat vagy változókat kell létrehoznunk vagy szerkesztenünk különböző módokon. Ez egyszerű, ha rövid fájlnevekkel vagy egyszerű értékekkel dolgozunk, de sokkal komplikáltabb, ha például szóközöket, speciális karaktereket vagy változókat tartalmaz. A shellben van egy idézőjelezés (quoting) nevű funkció, ennek a segítségével egységbezárhatjuk a különféle adatokat különféle idézőjelekkel (" ", ' '). Bashben háromféle idézőjelet használunk:
-
Idézőjelek
-
Aposztrófok
-
Feloldójelek
Az idézőjelek miatt a következő példák nem ugyanúgy viselkednek:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
A sor |
Idézőjelek
Az idézőjelek azt jelzik a shellnek, hogy az idézőjelek közötti szöveget ("...") átlagos karakterként kezeljék. Minden speciális karakter elveszíti a jelentését, kivéve a $
(dollárjel), a \
(backslash) és a `
(backquote). Ez azt jelenti, hogy a változók, a parancshelyettesítés és az aritmetikai funkciók továbbra is használhatók.
Például a $USER
változóra nincs hatással az idézőjel:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
A szóköz karakter viszont elveszíti az elválasztó szerepét:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Ahogy az első példában láthattuk, a touch
parancs két egyedi fájlt hoz létre, a parancs a két sztringet különálló argumentumként értelmezi. A második példában a parancs mindkét sztringet egy argumentumként értelmezi, így egy fájlt hoz létre. A legjobb gyakorlat, ha nem használunk szóközt a fájlnevekben. Ehelyett aláhúzás (_
) vagy pont (.
) használható.
Aposztrófok
Az aposztrófok esetén nem jelennek meg a fent megismert kivételek. Visszavonják a karakterek különleges jelentését. Vegyük az első példát fentről:
$ echo I am $USER I am tom
Amikor aposztrófokat használunk, más eredményt kapunk:
$ echo 'I am $USER' I am $USER
A parancs pontosan a sztringet jeleníti meg, anélkül, hogy behelyettesítené a változó értékét.
Feloldójelek
Feloldójeleket használunk a karakterek speciális jelentésének eltávolítására Bashben. Térjünk vissza a $USER
környezeti változóhoz:
$ echo $USER carol
Láthatjuk, hogy alapértelmezés szerint a változó tartalma jelenik meg a terminálban. Azonban, ha a dollárjel elé egy backslash karaktert (\
) helyezünk, akkor azzal semmissé tesszük a dollárjel speciális jelentését. Ez nem engedi a Bashnek, hogy kiírja a változó értékét, azaz azt, hogy melyik felhasználó futtatja a parancsot, hanem konkrétan a változó nevét jeleníti meg:
$ echo \$USER $USER
Ha visszaemlékszünk, hasonló eredményeket kaptunk az aposztróf használatával is, amikor szó szerint az aposztrófok közötti tartalmat írattuk ki. A feloldójel azonban máshogy működik, mivel arra utasítja a Basht, hogy hagyja figyelmen kívül a karakter speciális jelentését.
Gyakorló Feladatok
-
Határozzuk meg, hogy az alábbi sorokban mi a parancs, az opció(k)/paraméter(ek) és az argumentum(ok):
-
Példa:
cat -n /etc/passwd
Parancs:
cat
Kapcsoló:
-n
Argumentum:
/etc/passwd
-
ls -l /etc
Parancs:
Opció:
Argumentum:
-
ls -l -a
Parancs:
Opció:
Argumentum:
-
cd /home/user
Parancs:
Opció:
Argumentum:
-
-
Határozzuk meg, hogy milyen típusúak az alábbi parancsok:
Példa:
pwd
Shell belső parancs
mv
Külső parancs
cd
cat
exit
-
Értelmezzük az alábbi, idézőjeles parancsokat:
Példa:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Gondolkodtató Feladatok
-
Egy parancs és a zárójel kifejtés (brace expansion) segítségével hozzunk létre Bashben (nézzük meg a manual Bashra vonatkozó oldalait) 5 sorszámozott fájlt, amelyeknek a prefixe
game
(game1
,game2
, …)! -
Töröljük az előbb létrehozott 5 fájlt egy paranccsal, egy másik speciális karakter segítségével (nézzük át a Pathname Expansion szakaszt a Bash kézikönyvében)!
-
Van megoldás arra, hogy két parancs interakcióba lépjen egymással? Melyek azok?
Összefoglalás
Ebben a leckében megtanultuk:
-
A Linux shell fogalmait
-
Mi az a Bash shell
-
A parancssor felépítése
-
Bevezetés az idézésekbe
A gyakorlatok során használt parancsok:
bash
-
A legnépszerűbb shell Linux számítógépeken.
echo
-
Szöveg kiíratása a terminálra.
ls
-
Egy mappa tartalmának kilistázása.
type
-
Megmutatja, hogy milyen módon fut le az adott parancs.
touch
-
Létrehoz egy üres fájlt vagy frissíti egy már létező fájl módosításának dátumát.
hostname
-
Megmutatja vagy megváltoztatja a rendszer hosztnevét.
Válaszok a Gyakorló Feladatokra
-
Határozzuk meg, hogy az alábbi sorokban mi a parancs, az opció(k)/paraméter(ek) és az argumentum(ok):
-
ls -l /etc
Parancs:
ls
Opció:
-l
Argumentum:
/etc
-
ls -l -a
Parancs:
ls
Opció:
-l -a
Argumentum:
-
cd /home/user
Parancs:
cd
Opció:
Argumentum:
/home/user
-
-
Határozzuk meg, hogy milyen típusúak az alábbi parancsok:
cd
Shell belső parancs
cat
Külső parancs
exit
Shell belső parancs
-
Értelmezzük az alábbi, idézőjeles parancsokat:
touch "$USER"
tom
touch 'touch'
Létrehoz egy
touch
nevű fájlt
Válaszok a Gondolkodtató Feladatokra
-
Egy parancs és a zárójel kifejtés (brace expansion) segítségével hozzunk létre Bashben (nézzük meg a manual Bashra vonatkozó oldalait) 5 sorszámozott fájlt, amelyeknek a prefixe
game
(game1
,game2
, …).A tartományokkal kifejezehetjük az 1 és 5 közötti számokat egy parancson belül:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Töröljük az előbb létrehozott 5 fájlt egy paranccsal, egy másik speciális karakter segítségével (nézzük át a Pathname Expansion szakaszt a Bash kézikönyvében)!
Tekintve, hogy az összes fájl a
game
szóval kezdődik és egy karakterrel végződik (egy szám 1 és 5 között, ebben az esetben), a?
használható speciális karakterként a fájlnév utolsó karaktereként:$ rm game?
-
Van megoldás arra, hogy két parancs interakcióba lépjen egymással? Melyek azok?
Igen, egy parancs tud, például ha adatot írunk egy fájlba, amelyet aztán egy másik parancs dolgoz fel. A Linux össze tudja gyűjteni egy parancs kimenetét és fel tudja azt használni egy másik parancs bemeneteként. Ez a piping, azaz a csővezetékezés, amelyről egy későbbi leckében fogunk tanulni.