103.1 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
103 GNU és Unix parancsok |
Fejezet: |
103.1 Munka a parancssorban |
Lecke: |
1/2 |
Bevezetés
A Linux adminisztráció és a Bash shell világába újonnan belépők gyakran elveszettnek érzik magukat a GUI felület megnyugtató kényelme nélkül. Hozzászoktak ahhoz, hogy a jobb egérgombbal kattintva hozzáférnek a grafikus fájlkezelő segédprogramok által elérhetővé tett vizuális jelzésekhez és kontextuális információkhoz. Ezért fontos, hogy gyorsan megtanuljuk és elsajátítsuk a parancssori eszközök viszonylag kis készletét, amelyeken keresztül azonnal hozzáférhetünk a régi GUI által kínált összes adathoz — és még annál is többhöz.
Rendszerinformációk megszerzése
Miközben a parancssor villogó téglalapját nézzük, az első kérdésünk valószínűleg az lesz, hogy “Hol vagyok?”. Pontosabban: “Hol vagyok most a Linux fájlrendszerében, és ha mondjuk létrehoznék egy új fájlt, hol lenne az?”. Amit itt keresünk, az a present work directory (aktuális mappa), és a pwd
parancs megmondja, amit tudni akarunk:
$ pwd /home/frank
Tegyük fel, hogy Frank jelenleg be van jelentkezve a rendszerbe, és a home mappájában van: /home/frank/
. Ha Frank a touch
paranccsal létrehoz egy üres fájlt anélkül, hogy más helyet adna meg a fájlrendszerben, a fájl a /home/frank/
mappában jön létre. A mappa tartalmának listázása az ls
segítségével megmutatja nekünk az új fájlt:
$ touch newfile $ ls newfile
A fájlrendszerben lévő pozíciónkon kívül gyakran szükségünk lesz a Linux rendszerre vonatkozó információkra is. Ilyen lehet például a disztribúció pontos kiadási száma vagy az éppen betöltött Linux kernel verziója. Az uname
eszköz az, amire itt szükségünk lesz. Különösen a -a
(“all”) kapcsolóval használt uname
.
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Itt az uname
azt mutatja, hogy Frank gépére a Linux kernel 4.18.0 verziója van telepítve, és Ubuntu 18.04-et futtat 64 bites (x86_64
) CPU-n.
Parancsinformációk megszerzése
Gyakran találkozunk olyan dokumentációval, amely olyan Linux-parancsokról szól, amelyeket még nem ismerünk. Maga a parancssor mindenféle hasznos információt kínál arról, hogy mit csinálnak a parancsok, és hogyan lehet őket hatékonyan használni. Talán a leghasznosabb információkat a man
rendszer számos fájljában találjuk.
A Linux fejlesztők általában man
fájlokat írnak, és ezeket az általuk készített segédprogramokkal együtt terjesztik. A man
fájlok erősen strukturált dokumentumok, amelyek tartalma intuitív módon, szabványos szakaszcímekkel van felosztva. Ha beírjuk a man
parancsot, majd a parancs nevét, akkor a parancs nevét, egy rövid használati összefoglalót, egy részletesebb leírást, valamint néhány fontos történelmi és licencelési hátteret tartalmazó információt kapunk. Íme egy példa:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
A man
csak akkor működik, ha pontos parancsnevet adunk meg neki. Ha azonban nem vagyunk biztosak a keresett parancs nevében, akkor az apropos
paranccsal kereshetünk a man
lapnevek és leírások között. Feltételezve például, hogy nem emlékszünk arra, hogy az uname
az, ami megadja az aktuális Linux kernel verzióját, átadhatjuk a kernel
szót a apropros
parancsnak. Valószínűleg sok kimeneti sort fogunk kapni, de ezek között kell szerepelnie az alábbiaknak:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Ha nincs szükségünk egy parancs teljes dokumentációjára, a type
használatával gyorsan megkaphatjuk a parancsra vonatkozó alapvető adatokat. Ebben a példában a type
segítségével egyszerre négy különböző parancsot kérdezhetünk le. Az eredményekből kiderül, hogy a cp
(“copy”) egy program, amely a /bin/cp
állományban található, és, hogy a kill
(a futó folyamat állapotának megváltoztatása) egy shell builtin (beépülő) — ami azt jelenti, hogy valójában magának a Bash shellnek a része:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Vegyük észre, hogy a uname
amellett, hogy egy átlagos bináris parancs, mint a cp
, "hashed." is. Ez azért van, mert Frank nemrég használta a `uname
parancsot, és a rendszer hatékonyságának növelése érdekében a parancsot egy hash-táblába helyezte, hogy a következő futtatáskor könnyebben elérhető legyen. Ha a rendszerindítás után futtatná a type uname
-t, Frank azt találná, hogy a type
ismét egy szabályos bináris állományként írja le a uname
-t.
Note
|
A hash-tábla kitakarításának gyorsabb módja a |
Néha — különösen, ha automatizált szkriptekkel dolgozunk — szükségünk lesz valami egyszerűbb információforrásra egy parancsról. A which
parancs, amit az előző type
parancsunk követett le nekünk, nem ad vissza mást, mint a parancs abszolút helyét. Ez a példa mind a uname
, mind a which
parancsot megkeresi.
$ which uname which /bin/uname /usr/bin/which
Note
|
Ha a “builtin” parancsokkal kapcsolatos információkat szeretnénk megjeleníteni, használhatjuk a |
Parancselőzmények használata
Gyakran gondosan utánanézünk egy parancs megfelelő használatának, és sikeresen futtatjuk azt az opciók és argumentumok bonyolult sorával együtt. De mi történik néhány héttel később, amikor ugyanazt a parancsot kell futtatnunk ugyanazokkal az opciókkal és argumentumokkal, de nem emlékszünk a részletekre? Ahelyett, hogy a kutatást a nulláról kellene újra kezdenünk, gyakran képesek leszünk az eredeti parancsot visszaállítani a history
segítségével.
A history
beírása az utoljára használt parancsokat adja vissza, amelyek közül a legutóbbiak jelennek meg utoljára. Könnyen kereshetünk ezekben a parancsokban, ha egy adott sztringet adunk a grep
parancshoz. Ez a példa minden olyan parancsot megkeres, amely a bash_history
szöveget tartalmazza:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Itt egyetlen parancsot kapunk vissza a sorszámával együtt, ami az 1605.
És ha már a bash_history
szóba került , ez valójában egy rejtett fájl neve, amit a felhasználó home mappájában találhatunk meg. Mivel ez egy rejtett fájl (ezt a fájlnevet megelőző pont jelöli), csak akkor lesz látható, ha a mappa tartalmát az ls
használatával, a -a
argumentum segítségével listáztatjuk ki:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
Mi van a .bash_history
fájlban? Nézzük meg a sajátunkat: a legutóbbi száz és száz parancsunkat fogjuk látni. Meglepődve láthatjuk azonban azt, hogy a legutóbbi parancsaink közül néhány hiányzik. Ennek az az oka, hogy míg a dinamikus history
adatbázisba azonnal bekerülnek, addig a parancstörténet legújabb kiegészítései nem kerülnek be a .bash_history
fájlba, amíg ki nem lépünk a munkamenetből.
A history
tartalmát kihasználva sokkal gyorsabbá és hatékonyabbá tehetjük a parancssor használatát a billentyűzet felfelé és lefelé mutató kurzorbillentyűinek használatával. A felfelé billentyű többszöri lenyomásával a parancssor feltöltődik a legutóbbi parancsokkal. Amikor eljutunk ahhoz, amelyet másodszor is végre szeretnénk hajtani, az Enter lenyomásával futtathatjuk azt. Ez megkönnyíti a parancsok felidézését és ha szükséges, módosítását többször is egy shell munkamenet során.
Gyakorló feladatok
-
A
man
használatával határozzuk meg, hogyan utasítsuk azapropos
-t egy rövid parancs kiadására úgy, hogy csak egy rövid használati utasítást adjon ki, majd kilépjen! -
A
man
rendszer segítségével határozzuk meg, hogy agrep
parancshoz milyen szerzői jogi licenc van rendelve!
Gondolkodtató feladatok
-
Határozzuk meg a számítógépen használt hardverarchitektúra és Linux kernel verzióját könnyen olvasható kimeneti formátumban!
-
Írassuk ki a dinamikus
history
adatbázis és a.bash_history
fájl utolsó húsz sorát, hogy összehasonlíthassuk őket! -
Az
apropos
eszközzel azonosítsuk azt aman
oldalt, ahol megtaláljuk azt a parancsot, amivel megadhatjuk, hogy a csatlakoztatott fizikai blokkeszköz méretét megabájt vagy gigabájt helyett bájtban jelenítse meg!
Összefoglalás
Ebben a leckében megtanultuk:
-
Hogyan szerezhetünk információt a fájlrendszer helyéről és az operációs rendszer szoftvercsomagjáról.
-
Hogyan találhatunk segítséget a parancsok használatához.
-
Hogyan lehet azonosítani a fájlrendszer helyét és a parancs binárisok típusát.
-
Hogyan találhatjuk meg és használhatjuk újra a korábban végrehajtott parancsokat. A leckében a következő parancsokról volt szó:
pwd
-
Az aktuális mappa elérési útvonalát írja ki.
uname
-
Kiírja a rendszer hardverarchitektúráját, a Linux kernel verzióját, a disztribúciót és a disztribúció kiadását.
man
-
A parancsok használatát dokumentáló súgófájlok elérése.
type
-
Kiírja egy vagy több parancs fájlrendszerbeli helyét és típusát.
which
-
Egy parancs fájlrendszerbeli helyének kiírása.
history
-
A korábban már végrehajtott parancsok kiíratása vagy újrafelhasználása.
Válaszok a gyakorló feladatokra
-
A
man
használatával határozzuk meg, hogyan utasítsuk azapropos
-t egy rövid parancs kiadására úgy, hogy csak egy rövid használati utasítást adjon ki, majd kilépjen!Futtassuk a
man apropos
parancsot, majd görgessünk le az “Options” szekcióig, amíg meg nem találjuk a--usage
bekezdést! -
A
man
rendszer segítségével határozzuk meg, hogy agrep
parancshoz milyen szerzői jogi licenc van rendelve!Futtassuk a
man grep
parancsot és görgessünk le a dokumentum “Copyright” szakaszáig. Vegyük észre, hogy a program a Free Software Foundation egyik szerzői jogát használja!
Válaszok a gondolkodtató feladatokra
-
Határozzuk meg a számítógépen használt hardverarchitektúra és Linux kernel verzióját könnyen olvasható kimeneti formátumban!
Futtassuk a
man uname
parancsot, olvassuk át a “Description” szakaszt és találjuk meg azokat az argumentumokat, amelyek csak az általunk elvárt eredményeket jelenítik meg. Figyeljük meg, hogy a-v
a kernel verzióját adja meg, az-i
pedig a hardverplatformot!$ man uname $ uname -v $ uname -i
-
Írassuk ki a dinamikus
history
adatbázis és a.bash_history
fájl utolsó húsz sorát, hogy összehasonlíthassuk őket!$ history 20 $ tail -n 20 .bash_history
-
Az
apropos
eszközzel azonosítsuk azt aman
oldalt, ahol megtaláljuk azt a parancsot, amivel megadhatjuk, hogy a csatlakoztatott fizikai blokkeszköz méretét megabájt vagy gigabájt helyett bájtban jelenítse meg!Az egyik lehetőség az, hogy futtatjuk az
apropos
-t ablock
sztringgel, átolvassuk az eredményeket, megjegyezzük, hogy azlsblk
blokkos eszközöket listáz (és ezért ez lenne a legvalószínűbb eszköz a mi igényeinkhez), futtatjuk aman lsblk
-t, végiggörgetjük a “Description” részt, és megjegyezzük, hogy a-b
megjeleníti az eszköz méretét bájtban. Végül futtassuk azlsblk -b
parancsot, hogy lássuk, mi jön ki!$ apropos block $ man lsblk $ lsblk -b