Dokumentáció/SL9.3/Adminisztráció/Segédprogramok

Icon-fix.png A rendszer állapotának vizsgálatára számos program és mechanizmus használható; ezek közül mutatunk be néhányat az alábbiakban. Leírunk néhány gyakori, a rutinfeladatok elvégzése során használt segédprogramot is a legfontosabb paraméterekkel együtt.

Minden bemutatott parancsnál megtalálhatók a vonatkozó kimenetek példái is. Ezekben a példákban az első sor maga a parancs (a dollárjel után). A megjegyzéseket szögletes zárójel ([...]) jelöli, és ha szükséges, a hosszú sorokat megtörtük. A hosszú sorok sortöréseit visszafelé dőlt törtvonal (\) jelzi.

$ command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
    we have to break it
output line 3
[...]
output line 98
output line 99

A leírásokat rövidre szabtuk, hogy annyi segédprogramról eshessen szó, amennyiről csak lehetséges. A parancsokról további információ a kézikönyvoldalakon (man) olvasható. A legtöbb parancs kiadható a --help paraméterrel is; ennek hatására kiírja a használható paraméterek rövid listáját.

Nyitott fájlok listája: lsof

Egy adott folyamatazonosítóval (PID) rendelkező folyamathoz tartozó összes nyitott fájl listájának megtekintéséhez használja a -p paramétert. Ha például látni szeretné az aktuális parancsértelmező által használt összes fájlt, írja be a következőket:
$ lsof -p $$
COMMAND  PID USER   FD   TYPE DEVICE    SIZE     NODE NAME
zsh     4694   jj  cwd    DIR   0,18     144 25487368 /suse/jj/t (totan:/real-home/jj)
zsh     4694   jj  rtd    DIR    3,2     608        2 /
zsh     4694   jj  txt    REG    3,2  441296    20414 /bin/zsh
zsh     4694   jj  mem    REG    3,2  104484    10882 /lib/ld-2.3.3.so
zsh     4694   jj  mem    REG    3,2   11648    20610 /usr/lib/zsh/4.2.0/zsh/rlimits.so
[...]
zsh     4694   jj  mem    REG    3,2   13647    10891 /lib/libdl.so.2
zsh     4694   jj  mem    REG    3,2   88036    10894 /lib/libnsl.so.1
zsh     4694   jj  mem    REG    3,2  316410   147725 /lib/libncurses.so.5.4
zsh     4694   jj  mem    REG    3,2  170563    10909 /lib/tls/libm.so.6
zsh     4694   jj  mem    REG    3,2 1349081    10908 /lib/tls/libc.so.6
zsh     4694   jj  mem    REG    3,2      56    12410 /usr/lib/locale/de_DE.utf8/LC_TELEPHONE
[...]
zsh     4694   jj  mem    REG    3,2      59    14393 /usr/lib/locale/en_US/LC_NUMERIC
zsh     4694   jj  mem    REG    3,2  178476    14565 /usr/lib/locale/en_US/LC_CTYPE
zsh     4694   jj  mem    REG    3,2   56444    20598 /usr/lib/zsh/4.2.0/zsh/computil.so
zsh     4694   jj    0u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    1u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    2u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj   10u   CHR 136,48               50 /dev/pts/48

A speciális $$ parancsértelmező-változót használtuk, amelynek az értéke a parancsértelmező folyamatazonosítója.

Az lsof parancs paraméterek nélkül kiadva minden éppen nyitott fájlt felsorol. Mivel gyakran fájlok ezrei vannak nyitva, mindegyiket ritkán érdemes kilistázni. Az összes fájl listája azonban a keresési funkciókkal kombinálva hasznos listákat eredményez. Ilyen például az összes karakteres eszköz listája:

$ lsof | grep CHR
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
zsh        4694      jj    0u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    1u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    2u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj   10u   CHR 136,48                50 /dev/pts/48
X          6476    root  mem    CHR    1,1             38042 /dev/mem
lsof      13478      jj    0u   CHR 136,48                50 /dev/pts/48
lsof      13478      jj    2u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    1u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    2u   CHR 136,48                50 /dev/pts/48

Fájlokat használó felhasználók: fuser

Ez a parancs annak eldöntésére lehet hasznos, hogy jelenleg milyen folyamatok vagy felhasználók használnak bizonyos fájlokat. Tegyük fel például, hogy le szeretné csatolni az /mnt könyvtárhoz csatolt fájlrendszert. Az umount parancs kimenete: device is busy (az eszköz foglalt). Ekkor az fuser paranccsal meg lehet állapítani, mely folyamatok is használják pillanatnyilag az eszközt.
$ fuser -v /mnt/*

                     USER        PID ACCESS COMMAND
/mnt/notes.txt
                     jj        26597 f....  less

A less folyamat lezárását követően (amely egy másik terminálon futott), a fájlrendszer sikeresen lecsatolható.

Fájltulajdonságok: stat

A stat parancs megjeleníti a fájltulajdonságokat:
$ stat xml-doc.txt
  File: `xml-doc.txt'
  Size: 632             Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 5938009     Links: 1
Access: (0644/-rw-r--r--)  Uid: (11994/      jj)   Gid: (   50/    suse)
Access: 2004-04-27 20:08:58.000000000 +0200
Modify: 2003-06-03 15:29:34.000000000 +0200
Change: 2003-07-23 17:48:27.000000000 +0200

A --filesystem paraméter részletesen megadja annak a fájlrendszernek a tulajdonságait, amelyben a megadott fájl található:

 $ stat  . --filesystem
  File: "."
    ID: 0        Namelen: 255     Type: ext2/ext3
Blocks: Total: 19347388   Free: 17831731   Available: 16848938   Size: 4096
Inodes: Total: 9830400    Free: 9663967

Ha a z parancsértelmezőt (zsh) használja, meg kell adni az /usr/bin/stat elérési útvonalat, mivel a z parancsértelmező egy beépített stat paranccsal rendelkezik, amelynek eltérő paraméterei és másféle kimeneti formátuma van:

% type stat
stat is a shell builtin
% stat .
device  769
inode   4554808
mode    16877
nlink   12
uid     11994
gid     50
rdev    0
size    4096
atime   1091536882
mtime   1091535740
ctime   1091535740
blksize 4096
blocks  8
link


Információ SCSI-eszközökről: scsiinfo

Az scsiinfo parancs kiírja az SCSI-eszközök jellemzőit. A -l paraméter használatával minden, a rendszer által ismert SCSI-eszköz kilistázható (hasonló információkhoz juthatunk az lsscsi használatával is). Az alábbiakban az scsiinfo -i /dev/sda parancs kimenete látható, amely egy merevlemezről ad információt. A -a paraméter még több adatot tesz láthatóvá.
Inquiry command
---------------
Relative Address                   0
Wide bus 32                        0
Wide bus 16                        1
Synchronous neg.                   1
Linked Commands                    1
Command Queueing                   1
SftRe                              0
Device Type                        0
Peripheral Qualifier               0
Removable?                         0
Device Type Modifier               0
ISO Version                        0
ECMA Version                       0
ANSI Version                       3
AENC                               0
TrmIOP                             0
Response Data Format               2
Vendor:                    FUJITSU
Product:                   MAS3367NP
Revision level:            0104A0K7P43002BE
  

A fentiekben egy hibalista látható, egy merevlemez hibás blokkjainak két táblájával: az elsőt a gyártó adta meg (gyártói tábla), a második a működés közben látható hibás blokkok listája (növekedési tábla). Ha a növekedési tábla bejegyzéseinek száma emelkedik, érdemes lecserélni a merevlemezt.

Folyamatok: top

A top parancs (a "table of processes", folyamattábla kifejezés) megjelenít egy folyamatlistát, amely két másodpercenként frissül. A program lezárásához nyomja meg a Q gombot. A -n 1 paraméter a folyamatlista egyetlen megjelenése után lezárja a programot. Az alábbiakban egy példa a top -n 1 parancs kimenetére:
top - 14:19:53 up 62 days,  3:35, 14 users,  load average: 0.01, 0.02, 0.00
Tasks: 102 total,   7 running,  93 sleeping,   0 stopped,   2 zombie
Cpu(s):   0.3% user,   0.1% system,   0.0% nice,  99.6% idle
Mem:    514736k total,   497232k used,    17504k free,    56024k buffers
Swap:  1794736k total,   104544k used,  1690192k free,   235872k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  Command
 1426 root      15   0  116m  41m  18m S  1.0  8.2  82:30.34 X
20836 jj        15   0   820  820  612 R  1.0  0.2   0:00.03 top
    1 root      15   0   100   96   72 S  0.0  0.0   0:08.43 init
    2 root      15   0     0    0    0 S  0.0  0.0   0:04.96 keventd
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.99 ksoftirqd_CPU0
    4 root      15   0     0    0    0 S  0.0  0.0   0:33.63 kswapd
    5 root      15   0     0    0    0 S  0.0  0.0   0:00.71 bdflush
        [...]
 1362 root      15   0   488  452  404 S  0.0  0.1   0:00.02 nscd
 1363 root      15   0   488  452  404 S  0.0  0.1   0:00.04 nscd
 1377 root      17   0    56    4    4 S  0.0  0.0   0:00.00 mingetty
 1379 root      18   0    56    4    4 S  0.0  0.0   0:00.01 mingetty
 1380 root      18   0    56    4    4 S  0.0  0.0   0:00.01 mingetty

Ha megnyomja az F billentyűt a top program futtatása közben, akkor megjelenik egy menü, amellyel jelentősen módosítható a kimenet formátuma.

Az -U UID paraméter csak egy adott felhasználóhoz rendelt folyamatokat figyeli. Helyettesítse be az UID értéket a felhasználó azonosítójával. A top -U $(id -u felhasználónév) parancs visszaadja a felhasználó azonosítóját a felhasználónév alapján, és megjeleníti a folyamatait.

Folyamatlista: ps

A ps parancs folyamatlistát készít. Ha az r paramétert is megadtuk, akkor csak a jelenleg feldolgozási időt igénylő folyamatok láthatók:
$ ps r
  PID TTY      STAT   TIME COMMAND
22163 pts/7    R      0:01 -zsh
 3396 pts/3    R      0:03 emacs new-makedoc.txt
20027 pts/7    R      0:25 emacs xml/common/utilities.xml
20974 pts/7    R      0:01 emacs jj.xml
27454 pts/7    R      0:00 ps r

Ezt a paramétert mínusz jel nélkül kell beírni. A különböző paraméterek néha mínusz jellel, néha anélkül vannak megadva. A kézikönyvoldalak (man) könnyen elijeszthetik a potenciális felhasználókat, de a ps --help parancs egy rövidített súgóoldalt készít.

Annak ellenőrzésére például, hogy hány emacs folyamat fut, használja a következő parancsot:

$ ps x | grep emacs
 1288 ?        S      0:07 emacs
 3396 pts/3    S      0:04 emacs new-makedoc.txt
 3475 ?        S      0:03 emacs .Xresources
20027 pts/7    S      0:40 emacs xml/common/utilities.xml
20974 pts/7    S      0:02 emacs jj.xml

$ pidof emacs
20974 20027 3475 3396 1288

A -p paraméter a folyamatazonosítókon keresztül választ ki folyamatokat:

$ ps www -p $(pidof xterm)
  PID TTY      STAT   TIME COMMAND
 9025 ?        S      0:01 xterm -g 100x45+0+200
 9176 ?        S      0:00 xterm -g 100x45+0+200
29854 ?        S      0:21 xterm -g 100x75+20+0 -fn \
  -B&H-LucidaTypewriter-Medium-R-Normal-Sans-12-120-75-75-M-70-iso10646-1
 4378 ?        S      0:01 xterm -bg MistyRose1 -T root -n root -e su -l
25543 ?        S      0:02 xterm -g 100x45+0+200
22161 ?        R      0:14 xterm -g 100x45+0+200
16832 ?        S      0:01 xterm -bg MistyRose1 -T root -n root -e su -l
16912 ?        S      0:00 xterm -g 100x45+0+200
17861 ?        S      0:00 xterm -bg DarkSeaGreen1 -g 120x45+40+300
19930 ?        S      0:13 xterm -bg LightCyan
21686 ?        S      0:04 xterm -g 100x45+0+200 -fn \
lucidasanstypewriter-12
23104 ?        S      0:00 xterm -g 100x45+0+200
26547 ?        S      0:00 xterm -g 100x45+0+200

A folyamatlista az igényeknek megfelelően formázható. A -L paraméter visszaadja a kulcsszavak listáját. Adja meg a következő parancsot a folyamatok kiíratásához, memóriahasználat szerint rendezve:

$ ps ax --format pid,rss,cmd --sort rss
  PID  RSS CMD
    2    0 [ksoftirqd/0]
    3    0 [events/0]
   17    0 [kblockd/0]
[...]
10164 5260 xterm
31110 5300 xterm
17010 5356 xterm
 3896 29292 /usr/X11R6/bin/X -nolisten tcp -br vt7 -auth /var/lib/xdm/authdir/au

Folyamatfa: pstree

A pstree parancs fa formában állítja elő a folyamatok listáját:
$ pstree
init-+-atd
     |-3*[automount]
     |-bdflush
     |-cron
  [...]
     |-usb-storage-1
     |-usb-storage-2
     |-10*[xterm---zsh]
     |-xterm---zsh---mutt
     |-2*[xterm---su---zsh]
     |-xterm---zsh---ssh
     |-xterm---zsh---pstree
     |-ypbind---ypbind---2*[ypbind]
     `-zsh---startx---xinit4-+-X
                             `-ctwm-+-xclock
                                    |-xload
                                    `-xosview.bin

A -p paraméter hozzáadja a folyamatazonosítót egy adott névhez. Ha a parancssorokat is szeretné megjeleníteni, használja a -a paramétert.

$ pstree -pa
init,1
  |-atd,1255
[...]
  `-zsh,1404
      `-startx,1407 /usr/X11R6/bin/startx
          `-xinit4,1419 /suse/jj/.xinitrc [...]
              |-X,1426 :0 -auth /suse/jj/.Xauthority
              `-ctwm,1440
                  |-xclock,1449 -d -geometry -0+0 -bg grey
                  |-xload,1450 -scale 2
                  `-xosview.bin,1451 +net -bat +net


Ki mit csinál: w

A w paranccsal megkereshető, hogy ki van bejelentkezve a rendszerbe, és melyik felhasználó mit csinál. Például:
$ w
 15:17:26 up 62 days,  4:33, 14 users,  load average: 0.00, 0.04, 0.01
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
jj       pts/0     30Mar04  4days  0.50s  0.54s xterm -e su -l
jj       pts/1     23Mar04  5days  0.20s  0.20s -zsh
jj       pts/2     23Mar04  5days  1.28s  1.28s -zsh
jj       pts/3     23Mar04  3:28m  3.21s  0.50s -zsh
[...]
jj       pts/7     07Apr04  0.00s  9.02s  0.01s w
jj       pts/9     25Mar04  3:24m  7.70s  7.38s mutt
[...]
jj       pts/14    12:49   37:34   0.20s  0.13s ssh totan

Az utolsó sorból látható, hogy a jj felhasználó létrehozott egy ssh-kapcsolatot a totan nevű számítógéphez. Ha a többi rendszer bármely felhasználója be van jelentkezve távolról, az -f paraméter megmutatja, hogy melyik gépről hozták létre a kapcsolatot.

Memóriahasználat: free

A free segédprogram megvizsgálja a RAM-használatot. A kimenetben mind a szabad, mind a használt memória (és a csereterületek) részletes adatai láthatók:
$ free
             total       used       free     shared    buffers     cached
Mem:        514736     273964     240772          0      35920      42328
-/+ buffers/cache:     195716     319020
Swap:      1794736     104096    1690640


A -m paraméterrel minden méret megabájtban jelenik meg:

$ free -m
             total       used       free     shared    buffers     cached
Mem:           502        267        235          0         35         41
-/+ buffers/cache:        191        311
Swap:         1752        101       1651

Az igazán érdekes információ ebben a sorban található:

-/+ buffers/cache:        191        311

Ez kiszámítja a pufferek és gyorsítótárak által elfoglalt memória méretét. A -d késleltetés paraméter hatására a képernyő késleltetés másodpercenként frissül. A free -d 1.5 parancs például másfél másodpercenként frissíti a képernyőt.

Kernel gyűrűpuffer: dmesg

A Linux-kernel számos üzenetet tárol egy gyűrűpufferben. Ezen üzenetek megtekintésére szolgál a dmesg parancs:
$ dmesg
[...]
sdc : READ CAPACITY failed.
sdc : status = 1, message = 00, host = 0, driver = 08
Info fld=0xa00 (nonstd), Current sd00:00: sense key Not Ready
sdc : block size assumed to be 512 bytes, disk size 1GB.
sdc: test WP failed, assume Write Enabled
 sdc: I/O error: dev 08:20, sector 0
 I/O error: dev 08:20, sector 0
 I/O error: dev 08:20, sector 2097144
 I/O error: dev 08:20, sector 2097144
 I/O error: dev 08:20, sector 0
 I/O error: dev 08:20, sector 0
 unable to read partition table
 I/O error: dev 08:20, sector 0
nfs: server totan not responding, still trying
nfs: server totan OK

Az utolsó sor azt jelzi, hogy átmeneti problémák vannak a totan NFS-szerverrel. Az előtte lévő sorokat egy USB-meghajtó csatlakoztatása váltotta ki. A régebbi események a /var/log/messages és a /var/log/warn fájlban vannak naplózva.

USB-eszközök: lsusb

Az lsusb parancs kilistázza az összes USB-eszközt. A -v paraméter hatására részletesebb listát ír ki. A részletes adatokat a /proc/bus/usb/ könyvtárból olvassa a program. A következőkben az lsusb parancs kimenete látható, ha a rendszerhez egy USB-meghajtó csatlakoztatását követően. Az utolsó sorok jelzik az új eszköz jelenlétét.
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 018: ID 0402:5634 ALi Corp.
  

Fájlrendszerek és használatuk: mount, df, és du

A mount parancs megmutatja, melyik fájlrendszer (eszköz és típus) van csatolva és melyik ponton:
$ mount
/dev/hdb2 on / type ext2 (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/hda1 on /data type ext2 (rw)
shmfs on /dev/shm type shm (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
automount(pid1012) on /suse type autofs \
    (rw,fd=5,pgrp=1012,minproto=2,maxproto=3)
totan:/real-home/jj on /suse/jj type nfs \
    (rw,nosuid,rsize=8192,wsize=8192,hard,intr,nolock,addr=10.10.0.1)

A fájlrendszerek teljes kihasználtságáról a df paranccsal kaphat információt. A -h (vagy --human-readable) paraméter az átlagos felhasználó számára érthető formába önti a kimenetet.

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdb2             7.4G  5.1G  2.0G  73% /
/dev/hda1              74G  5.8G   65G   9% /data
shmfs                 252M     0  252M   0% /dev/shm
totan:/real-home/jj   350G  324G   27G  93% /suse/jj

A totan NFS-fájlszerver felhasználóinak késlekedés nélkül takarítaniuk kell a saját könyvtárukban. Egy adott könyvtárban az alkönyvtárakban található fájlok összméretének megjelenítéséhez adja ki a du parancsot. A -s paraméter elnyomja a részletes adatok kimenetét. A -h könnyen érthető formába önti az adatokat. A

$ du -sh ~
361M    /suse/jj

paranccsal megtudhatja, mennyi helyet foglal a saját könyvtára.

A /proc fájlrendszer

A /proc fájlrendszer egy pszeudo-fájlrendszer, amelyben a kernel tárol fontos információkat virtuális fájlok formájában. A CPU típusa például ezzel a paranccsal jeleníthető meg:
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 8
model name      : AMD Athlon(tm) XP 2400+
stepping        : 1
cpu MHz         : 2009.343
cache size      : 256 KB
fdiv_bug        : no
[...]

A megszakítások kiosztása és használata a következő paranccsal kérdezhető le:

$ cat /proc/interrupts
           CPU0
  0:  537544462          XT-PIC  timer
  1:     820082          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  8:          2          XT-PIC  rtc
  9:          0          XT-PIC  acpi
 10:      13970          XT-PIC  usb-uhci, usb-uhci
 11:  146467509          XT-PIC  ehci_hcd, usb-uhci, eth0
 12:    8061393          XT-PIC  PS/2 Mouse
 14:    2465743          XT-PIC  ide0
 15:       1355          XT-PIC  ide1
NMI:          0
LOC:          0
ERR:          0
MIS:          0

Néhány fontos fájl és tartalma:

/proc/devices
a rendelkezésre álló eszközök
/proc/modules
a betöltött kernelmodulok
/proc/cmdline
kernel paranccsor
/proc/meminfo
részletes adatok a memóriahasználatról
/proc/config.gz
gzip – a jelenleg futó kernel tömörített konfigurációs fájljaTovábbi információ az /usr/src/linux/Documentation/filesystems/proc.txt szövegfájlban található. A jelenleg futó folyamatok adatai a /proc/NNN könyvtárakban találhatók meg, ahol az NNN a vonatkozó folyamatok folyamatazonosítója (PID-je). A folyamatok a saját jellemzőiket a /proc/self/ könyvtárakban találhatják meg:
$ ls -l /proc/self
lrwxrwxrwx  1 root root 64 Apr 29 13:52 /proc/self -> 27585

$ ls -l /proc/self/
total 0
dr-xr-xr-x  2 jj suse 0 Apr 29 13:52 attr
-r--------  1 jj suse 0 Apr 29 13:52 auxv
-r--r--r--  1 jj suse 0 Apr 29 13:52 cmdline
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 cwd -> /suse/jj/t
-r--r--r--  1 jj suse 0 Apr 29 13:52 delay
-r--------  1 jj suse 0 Apr 29 13:52 environ
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 exe -> /bin/ls
dr-x------  2 jj suse 0 Apr 29 13:52 fd
-rw-------  1 jj suse 0 Apr 29 13:52 mapped_base
-r--r--r--  1 jj suse 0 Apr 29 13:52 maps
-rw-------  1 jj suse 0 Apr 29 13:52 mem
-r--r--r--  1 jj suse 0 Apr 29 13:52 mounts
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 root -> /
-r--r--r--  1 jj suse 0 Apr 29 13:52 stat
-r--r--r--  1 jj suse 0 Apr 29 13:52 statm
-r--r--r--  1 jj suse 0 Apr 29 13:52 status
dr-xr-xr-x  3 jj suse 0 Apr 29 13:52 task
-r--r--r--  1 jj suse 0 Apr 29 13:52 wchan

A végrehajtható fájlok és könyvtárak címhozzárendelését a maps fájl tartalmazza:

$ cat /proc/self/maps
08048000-0804c000 r-xp 00000000 03:02 22890      /bin/cat
0804c000-0804d000 rw-p 00003000 03:02 22890      /bin/cat
0804d000-0806e000 rwxp 0804d000 00:00 0
40000000-40016000 r-xp 00000000 03:02 10882      /lib/ld-2.3.3.so
40016000-40017000 rw-p 00015000 03:02 10882      /lib/ld-2.3.3.so
40017000-40018000 rw-p 40017000 00:00 0
4002b000-40135000 r-xp 00000000 03:02 10908      /lib/tls/libc.so.6
40135000-4013d000 rw-p 0010a000 03:02 10908      /lib/tls/libc.so.6
4013d000-40141000 rw-p 4013d000 00:00 0
bfffe000-c0000000 rw-p bfffe000 00:00 0
ffffe000-fffff000 ---p 00000000 00:00 0

A vmstat, iostat és mpstat

A vmstat segédprogram jelentéseket ad a virtuális memória statisztikákról. A /proc/meminfo, /proc/stat és /proc/*/stat fájlokat olvassa. Ez különösen a rendszer szűk keresztmetszeteinek azonosításánál hasznos. Az iostat parancs statisztikákat közöl a CPU-ról, valamint az eszközök és partíciók bemenetéről és kimenetéről. A megjelenített információk a /proc/stat és /proc/partitions fájlból származnak. A kimenet merevlemezek ki- és bemeneti teljesítményének jobb kiegyensúlyozásánál jöhet jól. Az mpstat parancs a processzorral (CPU-val) összefüggő statisztikákat jelenít meg.

A procinfo

A /proc fájlrendszer fontos adatainak összefoglalására szolgál a procinfo parancs:

$ procinfo
Linux 2.6.4-54.5-default (geeko@buildhost) (gcc 3.3.3 ) #1 1CPU [roth.suse.de]


Memory:      Total        Used        Free      Shared     Buffers
Mem:        516696      513200        3496           0       43284
Swap:       530136        1352      528784

Bootup: Wed Jul  7 14:29:08 2004    Load average: 0.07 0.04 0.01 1/126 5302

user  :       2:42:28.08   1.3%  page in :        0
nice  :       0:31:57.13   0.2%  page out:        0
system:       0:38:32.23   0.3%  swap in :        0
idle  :   3d 19:26:05.93  97.7%  swap out:        0
uptime:   4d  0:22:25.84         context :207939498

irq  0: 776561217 timer                 irq  8:         2 rtc
irq  1:    276048 i8042                 irq  9:     24300 VIA8233
irq  2:         0 cascade [4]           irq 11:  38610118 acpi, eth0, uhci_hcd
irq  3:         3                       irq 12:   3435071 i8042
irq  4:         3                       irq 14:   2236471 ide0
irq  6:         2                       irq 15:       251 ide1

Az összes információ megjelenítéséhez használja a -a paramétert. A -nN paraméter minden N másodpercben frissíti az adatokat. Ebben az esetben a program lezárásához nyomja meg a Q billentyűt.

Alapértelmezésben az összesített adatok kerülnek megjelenítésre. A -d paraméter különbségi értékeket szolgáltat. A procinfo -dn5 az utolsó öt másodpercben módosult adatokat jeleníti meg.

Memory:      Total        Used        Free      Shared     Buffers      Cached
Mem:             0           2          -2           0           0           0
Swap:            0           0           0

Bootup: Wed Feb 25 09:44:17 2004    Load average: 0.00 0.00 0.00 1/106 31902

user  :       0:00:00.02   0.4%  page in :        0  disk 1:        0r       0w
nice  :       0:00:00.00   0.0%  page out:        0  disk 2:        0r       0w
system:       0:00:00.00   0.0%  swap in :        0  disk 3:        0r       0w
idle  :       0:00:04.99  99.6%  swap out:        0  disk 4:        0r       0w
uptime:  64d  3:59:12.62         context :     1087

irq  0:       501 timer                 irq 10:         0 usb-uhci, usb-uhci
irq  1:         1 keyboard              irq 11:        32 ehci_hcd, usb-uhci,
irq  2:         0 cascade [4]           irq 12:       132 PS/2 Mouse
irq  6:         0                       irq 14:         0 ide0
irq  8:         0 rtc                   irq 15:         0 ide1
irq  9:         0 acpi

PCI erőforrások: lspci

Az lspci parancs felsorolja a PCI-erőforrásokat:
$ lspci
00:00.0 Host bridge: VIA Technologies, Inc. \
    VT8366/A/7 [Apollo KT266/A/333]
00:01.0 PCI bridge: VIA Technologies, Inc. \
    VT8366/A/7 [Apollo KT266/A/333 AGP]
00:0b.0 Ethernet controller: Digital Equipment Corporation \
    DECchip 21140 [FasterNet] (rev 22)
00:10.0 USB Controller: VIA Technologies, Inc. USB (rev 80)
00:10.1 USB Controller: VIA Technologies, Inc. USB (rev 80)
00:10.2 USB Controller: VIA Technologies, Inc. USB (rev 80)
00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
00:11.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B \
    PIPC Bus Master IDE (rev 06)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. \
    VT8233 AC97 Audio Controller (rev 50)
01:00.0 VGA compatible controller: Matrox Graphics, Inc. \
    MGA G550 AGP (rev 01)

A -v paraméter használata részletesebb felsorolást eredményez:


$ lspci -v
[...]
01:00.0 \
 VGA compatible controller: Matrox Graphics, Inc. MGA G550 AGP (rev 01) \
    (prog-if 00 [VGA])
 Subsystem: Matrox Graphics, Inc. Millennium G550 Dual Head DDR 32Mb
 Flags: bus master, medium devsel, latency 32, IRQ 10
 Memory at d8000000 (32-bit, prefetchable) [size=32M]
 Memory at da000000 (32-bit, non-prefetchable) [size=16K]
 Memory at db000000 (32-bit, non-prefetchable) [size=8M]
 Expansion ROM at <unassigned> [disabled] [size=128K]
 Capabilities: <available only to root>

Az eszközök nevének feloldásáról az /usr/share/pci.ids fájl ad információt. Az ebben a fájlban fel nem sorolt PCI-azonosítók »Unknown device« (ismeretlen eszköz) megjelölést kapnak.

A -vv paraméter minden, egy program által lekérdezhető információt megad. Tisztán numerikus értékek megadásához a -n paramétert kell használnia.

Egy programfuttatás rendszerhívásai: strace

Az strace segédprogram segít egy futó program összes rendszerhívásának nyomon követésében. Adjon meg egy parancsot a szokásos módon, az strace paranccsal a sor elején.
$ strace -e open ls

execve("/bin/ls", ["ls"], [/* 88 vars */]) = 0
uname({sys="Linux", node="edison", ...}) = 0
brk(0)                                  = 0x805b000
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) \
          = 0x40017000
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=76333, ...}) = 0
old_mmap(NULL, 76333, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
[...]
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=53, ws_col=110, ws_xpixel=897, ws_ypixel=693}) = 0
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=144, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
getdents64(3, /* 5 entries */, 4096)    = 160
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 48), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) \
          = 0x40018000
write(1, "ltrace-ls.txt  myfile.txt  strac"..., 41) = 41
munmap(0x40018000, 4096)                = 0
exit_group(0)                           = ?

Egy adott fájl megnyitására történt kísérletek nyomon követéséhez például írja be a következőt:

$ strace -e open ls myfile.txt

open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/tls/librt.so.1", O_RDONLY)   = 3
open("/lib/libacl.so.1", O_RDONLY)      = 3
open("/lib/libselinux.so.1", O_RDONLY)  = 3
open("/lib/tls/libc.so.6", O_RDONLY)    = 3
open("/lib/tls/libpthread.so.0", O_RDONLY) = 3
open("/lib/libattr.so.1", O_RDONLY)     = 3
open("/proc/mounts", O_RDONLY)          = 3
[...]
open("/proc/filesystems", O_RDONLY)     = 3
open("/proc/self/attr/current", O_RDONLY) = 4

Az összes leszármazott folyamat nyomon követéséhez használja a -f paramétert. Az strace viselkedése és kimeneti formátumai nagymértékben szabályozhatók. További információ: man strace.

Egy programfuttatás könyvtárhívásai: ltrace

Az ltrace parancs lehetővé teszi egy folyamat könyvtárhívásainak követését: A parancs hasonló módon használható, mint az strace. A -c paraméter kijelzi a könyvtárhívások számát és időtartamát:
$ ltrace -c find /usr/share/doc
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 86.27    1.071814          30     35327           write
 10.15    0.126092          38      3297           getdents64
  2.33    0.028931           3     10208           lstat64
  0.55    0.006861           2      3122         1 chdir
  0.39    0.004890           3      1567         2 open
[...]
  0.00    0.000003           3         1           uname
  0.00    0.000001           1         1           time
------ ----------- ----------- --------- --------- ----------------
100.00    1.242403                 58269         3 total

A kívánt könyvtár megadása: ldd

Az ldd parancs annak megkeresésére használható, hogy milyen dinamikus könyvtárakat tölt be az argumentumként megadott végrehajtható fájl:

$ ldd /bin/ls
linux-gate.so.1 =>  (0xffffe000)
librt.so.1 => /lib/tls/librt.so.1 (0x4002b000)
libacl.so.1 => /lib/libacl.so.1 (0x40033000)
libselinux.so.1 => /lib/libselinux.so.1 (0x40039000)
libc.so.6 => /lib/tls/libc.so.6 (0x40048000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4015d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
libattr.so.1 => /lib/libattr.so.1 (0x4016d000)

A statikus bináris állományoknak egyetlen dinamikus könyvtárra sincs szükségük:

$ ldd /bin/sash
        not a dynamic executable
$ file /bin/sash
/bin/sash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), \
for GNU/Linux 2.2.5, statically linked, stripped

További információk az ELF bináris állományokról

A bináris állományok tartalma a readelf segédprogrammal olvasható. Ez még a más hardverarchitektúrákhoz készült ELF-fájlokkal is működik.
$ readelf --file-header /bin/ls
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8049b40
  Start of program headers:          52 (bytes into file)
  Start of section headers:          76192 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         29
  Section header string table index: 26

Folyamatközi kommunikáció: ipcs

Az ipcs parancs megadja az aktuálisan használt IPC-erőforrások listáját:

$ ipcs
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x000027d9 5734403    toms      660        64528      2
0x00000000 5767172    toms      666        37044      2
0x00000000 5799941    toms      666        37044      2

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x000027d9 0          toms      660        1

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

Időmérés a time paranccsal

A parancs által felhasznált idő a time segédprogrammal adható meg. Ez a segédprogram két verzióban létezik: mint egy parancsértelmező beépített része, és mint program (/usr/bin/time).
$ time find . > /dev/null

real    0m4.051s
user    0m0.042s
sys     0m0.205s