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.
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íš !
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
;-)
hej, máš pravdu, už sme sa ku tomu dopracovali. chýba tam to, že je to current dir procesu :)
_______________________________________________________
smrdíš !
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 ;)
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