2.1 Lecke 2
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
2 Hogyan Igazodjunk El Linux Rendszerekben? |
Fejezet: |
2.1 Paranccsor Alapok |
Lecke: |
2/2 |
Bevezetés
Minden shell státuszinformációkat menedzsel a shell munkamanet során. Ez a futásidejű információ a munkamenet során változhat és befolyásolhatja a shell viselkedését. Ezeket az adatokat a programok is használják a rendszerkonfiguráció meghatározásának szempontjából. A legtöbb ilyen adat úgynevezett változókban kerül tárolásra, amelyeket ebben a leckében fogunk tárgyalni.
Változók
A változók tárolóhelyek az olyan adatoknak, mint szöveg vagy számok. Ha egyszer beállításra kerül, a változó értéke később is elérhető. Minden változónak van egy neve, amellyel elérhető akkor is, ha a tartalma megváltozott. A változó a legtöbb programozási nyelvben nagyon elterjedt eszköz.
A legtöbb Linux shellben két típusú változót különböztetünk meg:
- Lokális változók
-
Ezek a változók csak az aktuális shell processz számára elérhetők. Ha létrehozunk egy lokális változót és utána elindítunk egy másik programot ebből a shellből, a változó nem lesz elérhető a program számára. Mivel a gyerekprocesszek nem öröklik őket, ezeket a változókat lokális változóknak nevezzük.
- Környezeti változók
-
Ezek a változók egy bizonyos shell munkamenetben és az abból leszármazó gyerekprocesszekben is elérhetőek. Ezeket a változók konfigurációs adatokat adhatnak át már futó parancsok számára. Mivel ezek a programok elérhetik ezeket a változókat, környezeti változóknak nevezzük őket. Ezen változók többsége nagybetűs (pl.
PATH
,DATE
,USER
). Az alapértelmezett környezeti változók információt szolgáltatnak a felhasználó home mappájáról vagy a terminál típusáról. Időnként az összes környezeti változó készletét nevezzük környezetnek.
Note
|
A változók nem állandóak. Amikor a shell, amiben beállítottuk őket, bezáródik, minden változó elvész a tartalmával együtt. A legtöbb shellhez olyan konfigurációs fájl tartozik, amelyek olyan változókat tartalmaznak, amelyek egy új shell indításakor kerülnek beállításra. Azokat a változókat, amelyeket állandósítani akarunk, hozzá kell adnunk az egyik ilyen konfigurációs fájlhoz. |
Változók Kezelése
Rendszeradminisztrátorként létre kell hoznunk, módosítanunk vagy eltávolítanunk mind lokális, mind környezeti változókat.
Lokális Változók Kezelése
Lokális változót a =
(egyenlőségjel) operátorral hozhatunk létre. Egy egyszerű egyenlőség létrehozza a lokális változót:
$ greeting=hello
Note
|
Ne tegyünk szóközt a |
Bármely változót megjeleníthetjük az echo
paranccsal. A parancs általában az argumentum-szekcióban jeleníti meg a szöveget:
$ echo greeting greeting
A változó értékének eléréséhez a $
(dollárjel) használatára van szükség a változó neve előtt.
$ echo $greeting hello
Ahogy láthatjuk, a változót létrehoztuk. Most nyissunk meg egy másik shellt és próbáljuk meg kiíratni a létrehozott változó tartalmát.
$ echo $greeting
Semmi sem jelenik meg. Ez jól illusztrálja, hogy a változók mindig csak egy bizonyos shellben léteznek.
Ahhoz, hogy ellenőrizzük, hogy egy változó valóban lokális változó-e, indítsunk el egy új processzt és nézzük meg, hogy eléri-e a változót. Ezt megtehetjük azzal, hogy elindítunk egy új shellt és lefuttatjuk benne az echo
parancsot. Mivel az új shell új processzként fut, nem fogja örökölni a lokális változókat a szülő processztől:
$ echo $greeting world hello world $ bash -c 'echo $greeting world' world
Note
|
A fenti példában mindenképp aposztrófokat használjunk. |
Egy változót az unset
paranccsal távolíthatunk el:
$ echo $greeting hey $ unset greeting $ echo $greeting
Note
|
Az |
Globális Változók Kezelése
Ahhoz, hogy a változó elérhető legyen a gyerekprocesszek számára, környezeti változóvá kell alakítanunk lokális változóról. Ezt az export
paranccsal tehetjük meg. Amikor ezt meghívjuk a változó nevével, a változó hozzáadásra kerül a shell környezetéhez:
$ greeting=hello $ export greeting
Note
|
Ismételten ügyelnünk kell arra, hogy ne használjuk a |
A környezeti változó létrehozásának egy egyszerűbb módja a fenti módszerek kombinálása, a változó értékének megadása argumentumként a parancs számára.
$ export greeting=hey
Nézzük meg újra, hogy a változó elérhető-e a gyerekprocesszekben:
$ export greeting=hey $ echo $greeting world hey world $ bash -c 'echo $greeting world' hey world
A környezeti változók felhasználásának egy másik módja a parancsok előtt történő felhasználásuk. Tesztelhetjük ezt a TZ
környezeti változóval, ami az időzónát tartalmazza. Ezt a változót a date
parancs használja annak meghatározására, hogy melyik időzóna idejét jelenítse meg:
$ TZ=EST date Thu 31 Jan 10:07:35 EST 2019 $ TZ=GMT date Thu 31 Jan 15:07:35 GMT 2019
Az összes környezeti változót az env
paranccsal jeleníthetjük meg.
A PATH
változó
A PATH
változó az egyik legfontosabb környezeti változó egy Linux rendszerben. Olyan mappák listáját tárolja, kettősponttal elválasztva, amelyek olyan futtatható programokat tartalmaznak, amelyek a Linux shellből parancsként használhatóak.
$ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Egy új mappa hozzáadásához a kettőspontot (:
) kell használnunk.
$ PATH=$PATH:new_directory
Íme egy példa:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ PATH=$PATH:/home/user/bin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin
Ahogy láthatjuk, a $PATH
segítségével fűzhetünk hozzá új értéket a PATH
-hoz. Ez a változó a parancs végrehajtása során oldódik fel és ellenőrzi, hogy megmarad-e a változó eredeti tartalma. Természetesen a hozzáfűzés során más változókat is használhatunk:
$ mybin=/opt/bin $ PATH=$PATH:$mybin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin:/opt/bin
A PATH
változót figyelmesen kell használnunk, mivel elengedhetetlen a parancssorban való munkavégzéshez. Nézzük a következő PATH
változót:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Ahhoz, hogy megtudjuk, a shell hogyan hív meg egy bizonyos parancsot, a which
parancsot kell lefuttatnunk, argumentumként a parancs nevét megadva. Megnézhetjük például, hogy a nano
hol van tárolva:
$ which nano /usr/bin/nano
Láthatjuk, hogy a futtatható nano
fájl a /usr/bin
mappában található. Távolítsuk el a mappát a változóból és nézzük meg, hogy működik-e még a parancs:
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games
Nézzük meg a nano
parancsot ismét:
$ which nano which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games)
Láthatjuk, hogy a parancs nem található, így nem is kerül futtatásra. A hibaüzenet azt is megmagyarázza, hogy miért nem található a parancs és hol kereste azt.
Írjuk vissza a mappákat és futtassuk újra a parancsot.
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ which nano /usr/bin/nano
A parancsunk ismét működik.
Tip
|
Az elemek sorrendje a |
Gyakorló Feladatok
-
Hozzunk létre egy
number
nevű lokális változót! -
Hozzunk létre egy
ORDER
nevű környezeti változót a fenti két módszer használatával! -
Írassuk ki a változók nevét és az értéküket is!
-
Mi az előzőleg létrehozott változók hatóköre?
Gondolkodtató Feladatok
-
Hozzunk létre egy
nr_files
lokális változót és fűzzük hozzá a/etc/passwd
fájl sorainak számát! Tipp: Nézzük meg awc
parancsot és a parancsbehelyettesítést és ne feledkezzünk meg az idézőjelekről! -
Hozzuk létre az
ME
környezeti változót! Adjuk hozzá azUSER
változó értékét! -
Fűzzük hozzá a
HOME
változó értékét azME
-hez, legyen a:
a delimiter! Írassuk ki azME
változó tartalmát! -
Hozzunk létre egy
today
nevű változót, majd a fenti dátum példa felhasználásával adjuk hozzá a dátumot az egyik időzónához! -
Hozzunk létre egy másik változót,
today1
néven és adjuk hozzá a rendszer által használt dátumot!
Összefoglalás
Ebben a leckében megtanultuk:
-
A változók típusait
-
Hogyan hozzunk létre változókat
-
Hogyan dolgozzunk változókkal
A gyakorlatok során használt parancsok:
env
-
Kiírja az aktuális környezetet.
echo
-
Kiír egy szöveget.
export
-
A lokális változókat elérhetővé teszi a gyerekprocesszeknek.
unset
-
Eltávolít egy változót.
Válaszok a Gyakorló Feladatokra
-
Hozzunk létre egy
number
nevű lokális változót!$ number=5
-
Hozzunk létre egy
ORDER
nevű környezeti változót a fenti két módszer használatával!$ export ORDER=desc
-
Írassuk ki a változók nevét és az értéküket is!
$ echo number number $ echo ORDER ORDER $ echo $number 5 $ echo $ORDER desc
-
Mi az előzőleg létrehozott változók hatóköre?
-
A
number
helyi változó hatáköre csak az aktuális shell. -
Az
ORDER
környezeti változó hatóköre az aktuális shell és az általa generált összes subshell.
-
Válaszok a Gondolkodtató Feladatokra
-
Hozzunk létre egy
nr_files
lokális változót és fűzzük hozzá a/etc/passwd
fájl sorainak számát! Tipp: Nézzük meg awc
parancsot és a parancsbehelyettesítést és ne feledkezzünk meg az idézőjelekről!$ nr_files=`wc -l /etc/passwd`
-
Hozzuk létre az
ME
környezeti változót! Adjuk hozzá azUSER
változó értékét!$ export ME=$USER
-
Fűzzük hozzá a
HOME
változó értékét azME
-hez, legyen a:
a delimiter! Írassuk ki azME
változó tartalmát!$ ME=$ME:$HOME $ echo $ME user:/home/user
-
Hozzunk létre egy
today
nevű változót, majd a fenti dátum példa felhasználásával adjuk hozzá a dátumot az egyik időzónához!Az alábbi példa a GMT és az EST időzónákat használja példaként, de bármelyik másik megfelelő.
$ today=$(TZ=GMT date) $ echo $today Thu 31 Jan 15:07:35 GMT 2019
or
$ today=$(TZ=EST date) $ echo $today Thu 31 Jan 10:07:35 EST 2019
-
Hozzunk létre egy másik változót,
today1
néven és adjuk hozzá a rendszer által használt dátumot!Feltételezve, hogy a GMT-ben vagyunk:
$ today1=$(date) $ echo $today1 Thu 31 Jan 10:07:35 EST 2019