4.3 Lecke 2
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
4 A Linux Operációs Rendszer |
Fejezet: |
4.3 Adatok Tárolási Helye |
Lecke: |
2/2 |
Bevezetés
A programok és azok konfigurációs fájljainak megismerése után ebben a leckében megtanuljuk, hogyan hajtódnak végre a parancsok processzként. Hasonlóképpen, ahogy a rendszerüzeneteket is kommentáljuk, a kernel gyűrűpuffer használatát valamint a systemd
és a hozzá tartozó napló daemon — journald
— megváltoztatta a rendszer naplózásával kapcsolatos eddigi dolgokat.
Processzek
Minden alkalommal, amikor a felhasználó kiad egy parancsot, egy program futtatásra kerül és egy vagy több processz jön létre.
A processzek hierarchikusak. Miután a kernel a boot során betöltődött a memóriába, elindul az első processz, amely további processzeket indít el, amelyek szintén további processzeket indíthatnak el. Minden processznek van egy egyedi azonosítója (PID
) és szülő processz azonosítója (PPID
). Ezek pozitív egész számok, amelyek sorrendben rendelődnek a processzekhez.
Processzek Dinamikus Feltárása: top
A top
paranccsal dinamikus listát kaphatunk az összes futó folyamatról:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Ahogy azt fent láthatjuk, a top
információt adhat a memória és a CPU használatáról, az egész rendszer és az egyes folyamatok esetén is.
A top
lehetővé teszi a felhasználói interakciót.
Alapértelmezés szerint a kimenetet az egyes folyamatok által felhasznált CPU-idő százalékos aránya alapján rendezi csökkenő sorrendbe. Ez a viselkedés az alábbi billentyűk lenyomásával módosítható a top
futásakor:
M
-
Rendezés memóriahasználat alapján.
N
-
Rendezés PID alapján.
T
-
Rendezés futási idő alapján.
P
-
Rendezés a CPU-használat százalékának alapján.
A csökkenő/növekvő sorrend között az R
lenyomásával válthatunk.
Tip
|
A |
Pillanatkép a Processzekről: ps
Egy másik nagyon hasznos parancs, amivel információkat kaphatunk a processzekről a ps
. Míg a top
dinamikus információt ad, a ps
statikus.
Opciók nélkül a ps
kimenete meglehetősen diszkrét és csak az aktuális shellhez tartozó processzekre vonatkozik:
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
Megjeleníthetjük a processz azonosítóját (PID
), a terminált, amiben a processz fut (TTY
), a processz CPU-idejét (TIME
) és a parancsot, ami elindította a processzt (CMD
).
A ps
egy hasznos kapcsolója a -f
, amely a teljes listát mutatja meg:
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
Más kapcsolókkal kombinálva a -f
megmutatja a szülő és gyerek processzek kapcsolatát:
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
A -v
kapcsolóval a ps
megmutatja a felhasznált memória arányát:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Egy másik, vizuálisabb parancs, amely megmutatja a processzek hierarchiáját, a |
Processz Információk A /proc
Mappában
Már láttuk a /proc
fájlrendszert. A /proc
-ban számozott almappák vannak a rendszer minden futó folyamatához (a szám a processz PID
-je):
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Így ebben a mappában egy adott folyamatról minden információt megtalálhatunk. Listázzuk az első processz tartalmát — azét, amelyiknek a PID
-je 1
(a kimenetet az olvashatóság érdekében rövidítettük):
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Ellenőrizhetjük például a futtatható folyamatot:
# cat /proc/1/cmdline; echo /sbin/init
Láthatjuk, hogy a processzek hierarchiáját elindító bináris fájl az /sbin/init
volt.
Note
|
A parancsok pontosvesszővel ( |
A Rendszer Terhelése
A rendszerben minden processz használhatja a rendszer erőforrásait. Az úgynevezett rendszerterhelés egyetlen numerikus mutatóba próbálja összesíteni a rendszer teljes terhelését. Az aktuális terhelést az uptime
paranccsal láthatjuk:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Az utolsó három szám jelzi a rendszer terhelését az utolsó percben (2.91
), az utolsó 5 percben (1.59
) és az utolsó 15 percben (0.39
).
Ezek a számok azt jelzik, hogy hány folyamat várt CPU erőforrásokra vagy az input/output műveletek befejezésére. Ez azt jelenti, hogy ezek a folyamatok készen állnak a futásra, ha megkapják a szükséges erőforrásokat.
Rendszernaplózás és Rendszerüzenetek
Amint a kernel és a folyamatok elkezdenek futni és egymással kommunikálni, sok információ keletkezik. A legtöbb fájlba íródik — ezeket a fájlokat logfájloknak, vagy még egyszerűbben, lognak hívjuk.
Naplózás nélkül a szerveren történt események keresése sok fejfájást okozna a rendszergazdáknak, ezért fontos, hogy szabványosított és központosított módon kövessék nyomon a rendszereseményeket. Ezenkívül a logok meghatározóak és sokatmondóak a hibaelhárítási és biztonsági kérdések esetén, valamint megbízható adatforrások a rendszer statisztikáinak megértéséhez és a trendek előrejelzéséhez.
Naplózás a syslog Daemon Segítségével
A rendszerüzeneteket hagyományosan a standard naplózó eszköz — syslog — vagy bármely leszármazottja — syslog-ng vagy rsyslog kezeli. A naplózó daemon összegyűjti az üzeneteket a szolgáltatásokból és a programokból és logfájlokban tárolja, általában a /var/log
alatt. Néhány szolgáltatás azonban saját maga gondoskodik a logolásról (például az Apache HTTPD webszerver). A Linux kernel hasonló módon egy memóriában lévő gyűrűpuffert használ a naplóüzenetek tárolásához.
Logfájlok a /var/log
-ban
Mivel a logok állandóan változó adatok, általában a /var/log
mappában találhatók.
Ha megnézzük a /var/log
mappát, láthatjuk, hogy a logok neve --bizonyos mértékben — magától értetődik. Néhány példa:
/var/log/auth.log
-
Az autentikációról tárol információt.
/var/log/kern.log
-
A kernelről tárol információt.
/var/log/syslog
-
A rendszerről tárol információt.
/var/log/messages
-
A rendszerről és az alkalmazásokról tárol információt.
Note
|
A naplófájlok pontos neve és tartalma Linux disztribúciónként eltérhet. |
Naplófájlok Elérése
A logfájlok átnézése során rootnak kell lennünk (ha nincs olvasási jogunk) és használjunk olyan lapozót, mint a less
;
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Használhatjuk akár a tail
parancsot az -f
kapcsolóval és így legfrissebb üzeneteket olvashatjuk és az új sorok automatikusan megjelennek a fájlban:
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
Az output a következő formátumban jelenik meg:
-
Időbélyeg
-
A hoszt neve, ahonnan az üzenet jött
-
A program/szolgáltatás neve, ami az üzenetet generálta
-
Az üzenetet generáló program PID-je
-
Az esemény leírása
A legtöbb logfájl egyszerű szövegfájl; néhány azonban tartalmazhat bináris adatokat, mint a /var/log/wtmp
— a sikeres bejelentkezéshez szükséges adatokat tárolja. A file
paranccsal megnézhetjük, mi is a helyzet:
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Ezeket a fájlokat általában speciális parancsokkal olvashatjuk. A last
a /var/log/wtmp
-ban levő adatok megjelenítésére használható:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
A |
Logrotáció
A logfájlok néhány hét vagy hónap alatt sokat növekedhetnek és elfoglalhatják a szabad lemezterületet. Ennek megoldására a logrotate
használatos. A logrotáció vagy forgatás olyan műveleteket tartalmaz, mint a naplófájlok átnevezése, archiválása és/vagy tömörítése, esetleg elküldése e-mailként a rendszergazdának és ha elöregednek, törlése. A rotált logfájlok elnevezése többféle (például dátum hozzáadása utótagként); mindennapos megoldás még egy egyszerű egész szám hozzáadása az utótaghoz:
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Észrevehetjük, hogy az error.log.2.gz
már gzippel tömörítve lett (a .gz
utótag miatt).
A Kernel Gyűrűpuffer
A kernel gyűrűpuffere egy fix méretű adatstruktúra, amely rögzíti a kernel boot üzeneteit és bármilyen live kernel üzenetet. Ennek a puffernek a feladata — nagyon fontos — a boot során megjelenő összes kernelüzenet naplózása — amikor a syslog
még nem elérhető. A dmesg
parancs kiírja a kernelpuffer tartalmát (amelyet a /var/log/dmesg
tárol). A gyűrűpuffer kiterjesztése miatt ezt a parancsot általában a grep
szűrővel kombinálják vagy egy olyan lapozóval, mint a less
. Boot üzenetek keresése például:
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
Ahogy a kernel gyűrűpuffere az új üzenetekkel folyamatosan növekszik, a régebbiek eltűnnek. |
A Rendszernapló: systemd-journald
2015-től a systemd a legtöbb nagy Linux disztribúcióban de facto rendszer- és szolgáltatáskezelőként váltotta fel a SysV Init-et. Ennek eredményeként a journal daemon — journald — vált a standard szabványos naplózó komponenssé és a legtöbb szempontból felváltotta a syslogot. Az adatokat már nem egyszerű szövegként, hanem bináris formátumban tároljuk — emiatt a journalctl
segédprogram szükséges a logok olvasásához. A journald kompatibilis és integrálható a sysloggal.
A journalctl
az a segédprogram, amely a systemd journal adatbázisának olvasására és lekérdezésére szolgál. Ha kapcsolók nélkül hívjuk meg, a teljes naplót kiírja:
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
Ha a -k
vagy a --dmesg
kapcsolókkal hívjuk meg, ugyanazt kapjuk, mint a dmesg
parancs esetén:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
További érdekes kapcsolók a journalctl
esetén:
-b
,--boot
-
Boot információk.
-u
-
Egy meghatározott egységről ad üzeneteket. Egy egység nagyjából bármely, systemd által kezelt erőforrás lehet. Például a
journalctl -u apache2.service
segítségével információkat kaphatunk azapache2
webszerverről. -f
-
A legfrissebb naplóüzeneket írja ki és folyamatosan megjeleníti az új bejegyzéseket — hasonlít a
tail -f
parancshoz.
Gyakorló Feladatok
-
Nézzük meg az alábbi
top
kimenetét és válaszoljuk meg az alábbi kérdéseket:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Melyik folyamatokat indította el a
carol
nevű felhasználó? -
A
/proc
melyik virtuális mappáját kell megnéznünk, hogy adatokat kapjunk atop
mappáról? -
Melyik processz futott először? Honnan tudhatjuk?
-
Töltsük ki az alábbi táblázatot úgy, hogy megadjuk, hogy a
top
kimenet melyik részén találhatók meg a következő információk:Információ … Összefoglaló Terület Feladat Terület Memória
Swap
PID
CPU-idő
Parancsok
-
-
Melyik paranccsal olvashatjuk a következő bináris logokat?
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
A
grep
paranccsal kombinálva melyik parancsokra van szükségünk, hogy megtudjuk az alábbi információkat a Linux rendszerünkről?-
Mikor volt utoljára újraindítva a rendszer (
wtmp
) -
Melyik merevlemezek vannak telepítve (
kern.log
) -
Mikor történt az utolsó bejelentkezés (
auth.log
)
-
-
Melyik az a két parancs, amivel megjeleníthetjük a kernel gyűrűpuffert?
-
Hova tartoznak az alábbi naplóüzenetek:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
Van
journalctl
lekérdezési információ az alábbiakról?Unit Parancs ssh
networking
rsyslog
cron
Gondolkodtató Feladatok
-
A fenti, gyakorló feladatokban található
top
kimenete alapján válaszoljuk meg az alábbi kérdéseket:-
Melyik két paranccsal tudjuk killelni az apache webszervert?
-
Hogyan lehet a fizikai memóriáról és a swapről progress barok segítségével megjeleníteni az információt az összefoglaló területen?
-
Rendezzük a processzeket memóriahasználat alapján:
-
Most, hogy már progress bar-ral jelenítjük meg a memóriáról az információkat és a processzek memóriahasználat alapján vannak sorbarendezve, mentsük el ezt a beállítást, hogy ez legyen a
top
parancs default beállítása: -
Melyik fájlok tárolják a
top
konfigurációs beállításait? Hol laknak? Hogyan ellenőrizhetjük, léteznek-e?
-
-
Tudjunk meg többet a Bash
exec
parancsáról! Próbáljuk meg megnézni a funkcionalitását egy Bash munkamenet elindításával! Keressük meg aps
segítségével a Bash processzt, futtassuk azexec /bin/sh
parancsot és keressük meg a processzt ugyanazzal a PID-del! -
Az alábbi lépések segítségével ismerjük meg a kerneleseményeket és az udev dinamikus eszközkezelését:
-
Csatlakoztassunk egy USB-meghajtót a számítógéphez! Futtassuk a
dmesg
parancsot és nézzük meg az utolsó sorokat! Melyik a legújabb sor? -
Az előző parancs kimenetét szem előtt tartva futtassuk le az
ls /dev/sd*
parancsot és nézzük meg az USB-eszközt a listán. Mi a kimenet? -
Távolítsuk el az USB-meghajtót és futtassuk újra a
dmesg
parancsot. Hogy néz ki a legfrissebb sor? -
Futtassuk a
ls /dev/sd*
parancsot ismét és győződjünk meg róla, hogy az eszköz eltűnt a listáról. Mi a kimenet?
-
Összefoglalás
Az adattárolással kapcsolatban az alábbi témákat érintettük a leckében: processzmenedzsment, rendszernaplózás és üzenetküldés.
A processzmenedzsmenttel kapcsolatban az alábbiakat tanultuk meg:
-
A programok processzeket generálnak és a processzek hierarchiában léteznek.
-
Minden processznek van egy egyedi azonosítója (
PID
) és szülőprocessz azonosítója (PPID
). -
A
top
egy nagyon hasznos parancs a rendszer futó folyamatainak dinamikus és interaktív felfedezéséhez. -
A
ps
segítségével egy pillanatképet kapunk a rendszer éppen futó folyamatairól. -
A
/proc
mappában mappák vannak a rendszer minden futó folyamatához, a PID-jükről elnevezve. -
A rendszerterhelés fogalmát — ami nagyon hasznos a CPU kihasználtságának/túlterhelésének ellenőrzéséhez.
A rendszernaplózásról az alábbiakat kell megjegyeznünk:
-
A log egy olyan fájl, ahol a rendszer eseményeit rögzítjük. A logok felbecsülhetetlen értékűek a hibaelhárítás során.
-
A naplózást hagyományosan olyan alkalmazások bonyolítják, mint a syslog, syslog-ng vagy rsyslog. Ennek ellenére néhány program a saját naplózási daemonját használja.
-
Mivel a logok változnak, a
/var
mappában tároljuk őket és — időnként — a nevük segíthet meghatározni a tartalmukat (kern.log
,auth.log
, stb.) -
A legtöbb log egyszerű szövegfájl és bármelyik szövegszerkesztővel olvasható, ha megvannak a megfelelő jogosultságaink. Néhány logfájl azonban bináris és az olvasásukhoz speciális parancsok kellenek.
-
A tárhellyel kapcsolatos problémák elkerülése érdekében a logrotációt a logrotate segédprogram végzi.
-
A kernel egy kör alakú adatstruktúrát használ — gyűrűpuffer --, ahol a boot üzenetek megmaradnak (a régi üzenetek idővel eltűnnek).
-
A rendszer- és szolgáltatáskezelő systemd gyakorlatilag minden disztribúcióban lecserélte a System V-t és a journald lett a standard naplózóeszköz.
-
A systemd naplójának elolvasásához a
journalctl
segédprogram szükséges.
A leckében az alábbi parancsokat használtuk:
cat
-
Fájlok tartalmának összefűzése/kiíratása.
dmesg
-
A kernel gyűrűpuffer kiíratása.
echo
-
Szöveg vagy új sor megjelenítése.
file
-
Fájltípus meghatározása.
grep
-
Mintának megfelelő sorok kiíratása.
last
-
Az utoljára bejelentkezett felhasználók listázása.
less
-
A fájl tartalmának oldalankénti megjelenítése.
ls
-
Mappa tartalmának kilistázása.
journalctl
-
A
systemd
naplójának lekérdezése. tail
-
Egy fájl utolsó sorainak megjelenítése.
Válaszok a Gyakorló Feladatokra
-
Válaszoljunk az alábbi kérdésekre az alábbi
top
alapján:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Melyik folyamatokat indította el a
carol
nevű felhasználó?Válasz: Csak egyet:
top
. -
A
/proc
melyik virtuális mappáját kell megnéznünk, hogy adatokat kapjunk atop
mappáról?Válasz:
/proc/887
-
Melyik processz futott először? Honnan tudhatjuk?
Válasz:
systemd
. Azért, mert ennek aPID
-je #1. -
Töltsük ki az alábbi táblázatot úgy, hogy megadjuk, hogy a
top
kimenet melyik részén találhatók meg a következő információk:Információ … Összefoglaló Terület Feladat Terület Memória
Igen
Igen
Swap
Igen
Nem
PID
Nem
Igen
CPU-idő
Igen
Igen
Parancsok
Nem
Igen
-
-
Melyik paranccsal olvashatjuk a következő bináris logokat?
-
/var/log/wtmp
Válasz:
last
-
/var/log/btmp
Válasz:
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Válasz:
journalctl
-
-
A
grep
paranccsal kombinálva melyik parancsokra van szükségünk, hogy megtudjuk az alábbi információkat a Linux rendszerünkről?-
Mikor volt utoljára újraindítva a rendszer (
wtmp
)Válasz:
last
-
Melyik merevlemezek vannak telepítve (
kern.log
)Válasz:
less /var/log/kern.log
-
Mikor történt az utolsó bejelentkezés (
auth.log
)Válasz:
less /var/log/auth.log
-
-
Melyik az a két parancs, amivel megjeleníthetjük a kernel gyűrűpuffert?
dmesg
ésjournalctl -k
(alsojournalctl --dmesg
). -
Hova tartoznak az alábbi naplóüzenetek:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
Van
journalctl
lekérdezési információ az alábbiakról?:Unit Parancs ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Válaszok a Gondolkodtató Feladatokra
-
A fenti, gyakorló feladatokban található
top
kimenete alapján válaszoljuk meg az alábbi kérdéseket:-
Melyik két paranccsal tudjuk killelni az apache webszervert?
Először
k
; majd adjuk meg akill
értéket. -
Hogyan lehet a fizikai memóriáról és a swapről progress bar-ok segítségével megjeleníteni az információt az összefoglaló területen?
Az
m
egyszeri vagy kétszeri lenyomásával. -
Rendezzük a processzeket memóriahasználat alapján:
M
-
Most, hogy már progress bar-ral jelenítjük meg a memóriáról az információkat és a processzek memóriahasználat alapján vannak sorbarendezve, mentsük el ezt a beállítást, hogy ez legyen a
top
parancs default beállítása:W
-
Melyik fájlok tárolják a
top
konfigurációs beállításait? Hol laknak? Hogyan ellenőrizhetjük, léteznek-e?A fájl a
~/.config/procps/toprc
és a felhasználó home mappájában laknak (~
). Mivel ez egy rejtett fájl (egy olyan mappában van, aminek a neve ponttal kezdődik), a létezését azls -a
segítségével ellenőrizhetjük (összes fájl listázása). A fájlt a kbd:[Shift+W] lenyomásával generálhatjuk atop
-ban.
-
-
Tudjunk meg többet a Bash
exec
parancsáról! Próbáljuk meg megnézni a funkcionalitását egy Bash munkamenet elindításával! Keressük meg aps
segítségével a Bash processzt, futtassuk azexec /bin/sh
parancsot és keressük meg a processzt ugyanazzal a PID-del!Az
exec
egy folyamatot egy másik paranccsal helyettesít. Az alábbi példában láthatjuk, hogy a Bash processz helyébe a/bin/sh
lép (ahelyett, hogy a/bin/sh
gyerekprocesszé válna):$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Az alábbi lépések segítségével ismerjük meg a kerneleseményeket és az udev dinamikus eszközkezelését:
-
Csatlakoztassunk egy USB-meghajtót a számítógéphez! Futtassuk a
dmesg
parancsot és nézzük meg az utolsó sorokat! Melyik a legújabb sor?Valami hasonlót kell látnunk:
[ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI removable disk
. -
Az előző parancs kimenetét szem előtt tartva futassuk le az
ls /dev/sd*
parancsot és nézzük meg az USB-eszközt a listán. Mi a kimenet?A számítógéphez csatlakoztatott eszközök számától függően, valami hasonlót kell kapnunk:
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. A mi esetünkben látnunk kell az USB-meghajtónkat (/dev/sdb
) és a két partícióját (/dev/sdb1
és/dev/sdb2
). -
Távolítsuk el az USB-meghajtót és futtassuk újra a
dmesg
parancsot. Hogy néz ki a legfrissebb sor?Valami hasonlót kell látnunk:
[ 2458.881695] usb 1-9: USB disconnect, device number 6
. -
Futtassuk a
ls /dev/sd*
parancsot ismét és győződjünk meg róla, hogy az eszköz eltűnt a listáról. Mi a kimenet?Esetünkben:
/dev/sda /dev/sda1
.
-