Adresar /proc a praca s nim spojena.

26.04.2008 23:09

Pravdepodobne vacsina z vas uz mala co docinenia s /proc adresarom. Pre tych, ktori nevedia ozrejmim, ze tento adresar je reprezentacia procesov ziveho jazdra systemu. Pomocou neho mozme zistit najroznejsie parametre systemu.
Ako teda ten adresar vyzera? No na bezne zatazenom systeme to moze vyzerat nejak takto:

root@devel:~# ls /proc
1      2165  2343  2419  30470      cmdline      kcore        swaps
10695  2174  23459  2420  4          cpuinfo      key-users    sys
113    2240  23483  2438  41        crypto      kmsg          sysrq-trigger
1145  2254  23487  2441  44        devices      loadavg      sysvipc
1457  2264  23528  2445  45        diskstats    locks        timer_list
146    2265  23529  2447  5          dma          meminfo      timer_stats
147    2276  2353  2449  6          driver      misc          tty
148    2284  23532  2452  653        execdomains  modules      uptime
1488  2285  23533  2481  658        fb          mounts        version
149    2293  23534  26543  745        filesystems  mtrr          vmstat
1829  2295  23535  26655  748        fs          net          zoneinfo
1849  2315  23536  29761  987        ide          pagetypeinfo
1860  2332  2367  3      acpi      interrupts  partitions
1915  2333  2383  30364  asound    iomem        scsi
2      2336  2384  30365  buddyinfo  ioports      self
2139  2338  2388  30388  bus        irq          slabinfo
2156  2340  2416  30413  cgroups    kallsyms    stat

Rozhranie funguje rovnako, ako vsetky ine subory v systeme, preto ich mozme citat a mozme do nich zapisovat. Subory s ciselnym oznacenim reprezentuju vsetky procesy, ktore bezia na systeme a ich cislo(nazov) je vlastne pid toho daneho procesu.
Vsetky ostatne subory a zlozky predstavuju ovladace a ine vnutorne mechanizmi jadra. Mozme v nich napriklad zistit, ake jazdro mame momentalne zavedene, alebo kolko pamäte je prave zaplnenej, celkovy uptime, info o swap etc...

root@devel:~# cat /proc/version
Linux version 2.6.24-1-486 (Debian 2.6.24-5) (<a href="mailto:waldi@debian.org">waldi@debian.org</a>) (gcc version 4.1.3 20080308 (prerelease) (Debian 4.1.2-21)) #1 Thu Mar 27 17:00:17 UTC 2008

Velku cast z tychto informacii mozme ziskat prikazom uname -a ale takto sa dostaneme priamo k veci.
Pokial by sme chceli zistit kolko ram pamete mame nainstalovanej, mozme sa pozriet do kcore:

root@devel:~# ls -l /proc/kcore
-r-------- 1 root root 536809472 2008-04-26 22:20 /proc/kcore

Pokial ste si vsimli, su to dost znizene prava pre bezneho uzivatela. Lenze momentalne nie sme bezny uzivatel a preto si mozme robit, co sa nam zachce, napriklad pustit nad nim grep alebo strings a vyhladat v pameti zaujimave casti.
Uvedeny subor predstavuje systemovu pamät a obsah sa do neho zapisuje ako do cache, pokial ho neprepisu ine informacie. Takto mozme pristupovat k omylom stratenym datam alebo sledovat, co uzivatelia robia a co by robit nemali.

Dalej tu mame v adresari /proc subor interupts, kde su zapisane vsetky prerusenia, ktore boli niekedy vyvolane:

root@devel:~# cat /proc/interrupts
          CPU0
  0:    841663    XT-PIC-XT        timer
  1:      18454    XT-PIC-XT        i8042
  2:          0    XT-PIC-XT        cascade
  3:          1    XT-PIC-XT
  4:          1    XT-PIC-XT
  6:          5    XT-PIC-XT        floppy
  7:          0    XT-PIC-XT        parport0
  8:          2    XT-PIC-XT        rtc
  9:          1    XT-PIC-XT        acpi
10:          0    XT-PIC-XT        MPU401 UART
11:    180923    XT-PIC-XT        ohci_hcd:usb1, ohci_hcd:usb2, SiS SI7012, eth0
12:    268126    XT-PIC-XT        i8042
14:      25469    XT-PIC-XT        ide0
15:    135183    XT-PIC-XT        ide1
NMI:          0  Non-maskable interrupts
LOC:          0  Local timer interrupts
TRM:          0  Thermal event interrupts
SPU:          0  Spurious interrupts
ERR:          0
MIS:          0

Dalej tu mame partitions, kde su ukazane vsetky zariadenia pevnych diskov, ktore boli rozpoznane pri spusteni systemu. Su tam vypisane vsetky zariadenia, ci uz su pripojene alebo nie:

root@devel:~# cat /proc/partitions
major minor  #blocks  name
  3    0  78150744 hda
  3    1  25599546 hda1
  3    2    9767520 hda2
  3    3          1 hda3
  3    5    979965 hda5
  3    6  41793034 hda6

Teraz opustime systemove parametre a podme sa pozriet na strukturu systemovych procesov:

root@devel:~# ls -l /proc/1/
total 0
dr-xr-xr-x 2 root root 0 2008-04-26 22:34 attr
-r-------- 1 root root 0 2008-04-26 22:34 auxv
-r--r--r-- 1 root root 0 2008-04-26 22:34 cgroup
--w------- 1 root root 0 2008-04-26 22:34 clear_refs
-r--r--r-- 1 root root 0 2008-04-26 20:58 cmdline
-rw-r--r-- 1 root root 0 2008-04-26 22:34 coredump_filter
lrwxrwxrwx 1 root root 0 2008-04-26 22:34 cwd -> /
-r-------- 1 root root 0 2008-04-26 22:34 environ
lrwxrwxrwx 1 root root 0 2008-04-26 20:58 exe -> /sbin/init
dr-x------ 2 root root 0 2008-04-26 22:34 fd
dr-x------ 2 root root 0 2008-04-26 22:34 fdinfo
-r--r--r-- 1 root root 0 2008-04-26 22:34 io
-r-------- 1 root root 0 2008-04-26 22:34 limits
-rw-r--r-- 1 root root 0 2008-04-26 22:34 loginuid
-r--r--r-- 1 root root 0 2008-04-26 22:34 maps
-rw------- 1 root root 0 2008-04-26 22:34 mem
-r--r--r-- 1 root root 0 2008-04-26 22:34 mounts
-r-------- 1 root root 0 2008-04-26 22:34 mountstats
-rw-r--r-- 1 root root 0 2008-04-26 22:34 oom_adj
-r--r--r-- 1 root root 0 2008-04-26 22:34 oom_score
lrwxrwxrwx 1 root root 0 2008-04-26 22:34 root -> /
-r--r--r-- 1 root root 0 2008-04-26 22:34 smaps
-r--r--r-- 1 root root 0 2008-04-26 20:58 stat
-r--r--r-- 1 root root 0 2008-04-26 22:34 statm
-r--r--r-- 1 root root 0 2008-04-26 20:54 status
dr-xr-xr-x 3 root root 0 2008-04-26 22:34 task
-r--r--r-- 1 root root 0 2008-04-26 22:34 wchan

Na tomto priklade vidime hned 3 symbolicke linky a to cwd, exe, root. Cwd predstavuje aktualny pracovny adresar, cize pokial zadame cd /proc/1/cwd/, tak sa dostaneme priamo na miesto, kde link ukazuje. V tomto priklade je to korenovy adresar /
Exe ukazuje na uplnu cestu povodne vyvolaneho binarneho suboru a root ukazuje na korenovy adresar podla "predstavy" procesu, ktora ale v drvivej vacsine byva prave /
Subory cmdline a environ predstavuju uplne behove prostredie procesu. Jednotlive polozky su v nom oddelene nulovym znakom, preto ich mozme vypisat citatelnejsie takto:

root@devel:~# cat /proc/1/environ | tr '\0' '\n'
ROOTFSTYPE=
HOME=/
DPKG_ARCH=i386
PROGRESS_STATE=7
init=/sbin/init
ROOTFLAGS=
panic=
ROOTDELAY=
break=
TERM=linux
quiet=n
PATH=/usr/local/bin:/usr/bin:/sbin:/bin
resume=/dev/hda5
resume_offset=
blacklist=
MODPROBE_OPTIONS=-qb
PWD=/
readonly=y
rootmnt=/root
ROOT=/dev/hda2

Tento postup je uzitocny pre shellove scripty, pokial potrebuju ziskat informacie o beziacich procesoch. Majte ale na pamäti, ze neprivilegovani uzivatelia mozu pristupovat obvykle k informaciam len o ich vlastnych procesoch.

Na zaver by som len podotkol, ze clanok bol inspirovany knihou LInux server hacks od nakladatelstva O'Reilly.

    • Re: Adresar /proc a praca s nim spojena. 27.04.2008 | 20:46
      Avatar blackhole_socket   Používateľ

      Cwd predstavuje aktualny pracovny adresar, cize pokial zadame cd /proc/1/cwd/, tak sa dostaneme priamo na miesto, kde link ukazuje. V tomto priklade je to korenovy adresar /

      protirečíš sám sebe, na aktuálny pracovný adresár odkazuje pwd. Ako by mohol cwd ukazovať na aktuálny pracovný adresár keď má symlink na / ?
      _______________________________________________________
      smrdíš !

      • Re: Adresar /proc a praca s nim spojena. 28.04.2008 | 10:48
        Avatar BH   Používateľ

        Zdaarek.

        Myslim, ze je to celkom v poriadku, len tam asi malo byt zmienene, ze cwd je pracovny adresar daneho procesu. Cize ano, cwd moze ukazovat na /.

        cwd = current working directory of the process
        pwd = print working directory

        Prajem pekny den
        ;-)

        BH == /dev/null
        • Re: Adresar /proc a praca s nim spojena. 28.04.2008 | 13:31
          Avatar blackhole_socket   Používateľ

          hej, máš pravdu, už sme sa ku tomu dopracovali. chýba tam to, že je to current dir procesu :)

          _______________________________________________________
          smrdíš !

          • Re: Adresar /proc a praca s nim spojena. 04.04.2009 | 12:04
            W1cK3d   Návštevník

            zrob aj 2 nech sa daco priucim..... :) akurat pri tom nezosalej jak ja ked som naposledy daco podobne pisal o command prompte v Linuxe pre deti ;)

    • Re: Adresar /proc a praca s nim spojena. 28.04.2008 | 11:50
      Avatar betmen   Používateľ

      dakujem za clanok.

      verim, ze napises aj druhu cast, kde sa budes venovat veciam okolo /proc/sys, sysctl a spol, ktore budu dokladne vystihovat pracu s /proc :)
      ______________
      nález plný strát

      ______________ kam by som chodil...na dvor