Asmo Slackware Page

8th September 2010

.::MENU::.

Wstęp
Mapa serwisu
Instalacja
Serwery
Artykuły
Tips&Tricks
Programowanie
ASP changelog
FORUM
FAQ
Linki
Ksiega gosci
O mnie

GG:
1710841


Katalog /proc

Katalog /proc to jeden z ciekawszych katalogów w systemie Linux. Za pośrednictwem znajdujących się w nim plików jądro udostępnia nam informację na temat parametrów pracy systemu oraz uruchomionych procesów. Jako root mamy możliwość modyfikowania tych parametrów. /proc w przeciwieństwie do innych systemów plików przechowywany w pamięci a nie na dysku.

Zobaczmy co się znajduje w katalogu /proc

# ls -C /proc
1     1379  1423  1808  3072  73       driver       iomem    locks    mtrr        stat
10    1380  1448  1810  3074  bus      execdomains  ioports  lvm      net         swaps
1361  1381  1449  2     4     cmdline  fb           irq      mdstat   partitions  sys
1364  1382  1450  3     5     cpuinfo  filesystems  kcore    meminfo  pci         sysvipc
1371  1383  165   3055  58    crypto   fs           kmsg     misc     scsi        tty
1373  1384  1658  3070  6     devices  ide          ksyms    modules  self        uptime
1377  1422  1660  3071  61    dma      interrupts   loadavg  mounts   slabinfo    version

Każdy katalog składający się z cyfr dopowiada uruchomionemu w systemie procesowi. Cyfry natomiast odpowiadają numerowi PID (Process ID). Reszta katalogów i plików przechowuje informacje o sterownikach, szynach danych itd. Na wszystkich plikach znajdujących się w tym katalogu możemy operować jak na normalnych plikach. Mamy więc możliwość czytania i pisania praktycznie do każdego z nich. Powiedzmy np. że chciałbyś sprawdzić jaka jest wersja obecnie działającego jądra. Nic prostszego:

# cat /proc/version
Linux version 2.4.26 (root@tree) (gcc version 3.3.4) #6 Mon Jun 14 19:07:27 PDT 2004

Dostaliśmy bardzo szczegółowe informacje nie tylko na temat wersji jądra ale również na temat wersji zainstalowanego kompilatora gcc. Następnie spróbujmy się dowiedzieć jak dużo pamięci RAM mamy zainstalowane w komputerze:

# ls -l /proc/kcore
-r--------  1 root root 234819584 2004-11-25 01:34 /proc/kcore
  

Wygląda na to ze mamy w komputerze około 223MB pamięci RAM (234819584/1024/1024 = 223.9). Zwróć uwagę na prawa dostępu do tego pliku. Może go czytać tylko i wyłącznie root. Zapobiega to możliwości czytania bezpośrednio pamięci przez niepowołane osoby.

Kolejnym ciekawym plikiem z którego możemy się coś dowiedzieć jest plik /proc/partitions

# cat /proc/partitions
major minor  #blocks  name

   3     0   29302560 hda
   3     1    8128858 hda1
   3     2    6185025 hda2
   3     3    4610655 hda3
   3     4          1 hda4
   3     5      96358 hda5
   3     6   10281568 hda6

Jak widać mamy w systemie jeden dysk HDD o deskryptorze /dev/hda podzielony na sześć partycji.

Plików z informacjami o systemie jest o wiele więcej poniżej krótka lista:

  • /proc/cpuinfo - informacje o procesorze (model, rodzina, rozmiar cache itp.)
  • /proc/meminfo - informacje o fizycznej pamięci RAM, obszarze wymiany itp.
  • /proc/mounts - lista zamontowanych systemów plików
  • /proc/devices - lista dostępnych urządzeń
  • /proc/filesystems - wspierane systemy plików
  • /proc/modules - lista załadowanych modułów
  • /proc/version - wersja jądra
  • /proc/cmdline - parametry przekazane do jądra podczas uruchomienia

Teraz spróbujemy dowiedzieć się jak wyglądają informacje na temat konkretnych procesów. Jak wcześniej wspomniałem katalogi, których nazwy składają się z cyfr odpowiadają procesom jakie mamy uruchomione w systemie. Przyjrzyjmy się procesowi o PID równym 1.

# ls -l
total 0
-r--r--r--  1 root root 0 2004-11-25 01:49 cmdline
lrwxrwxrwx  1 root root 0 2004-11-25 01:49 cwd -> /
-r--------  1 root root 0 2004-11-25 01:49 environ
lrwxrwxrwx  1 root root 0 2004-11-25 01:49 exe -> /sbin/init
dr-x------  2 root root 0 2004-11-25 01:49 fd
-r--r--r--  1 root root 0 2004-11-25 01:49 maps
-rw-------  1 root root 0 2004-11-25 01:49 mem
-r--r--r--  1 root root 0 2004-11-25 01:49 mounts
lrwxrwxrwx  1 root root 0 2004-11-25 01:49 root -> /
-r--r--r--  1 root root 0 2004-11-25 01:49 stat
-r--r--r--  1 root root 0 2004-11-25 01:49 statm
-r--r--r--  1 root root 0 2004-11-25 01:49 status

Mamy tu wiele ciekawych informacji na temat uruchomionego procesu. Po pierwsze mamy trzy linki symboliczne. Pierwszy cwd to katalog roboczy procesu (current working directory), drugi exe to link do pliku wykonywalnego tego procesu, ostatni to link do root directory. Praktycznie w każdym przypadku link ten będzie wskazywał na /, chyba że uruchomiliśmy proces w środowisku chroot. Pliki cmdline oraz environ to odpowiednio polecenie wraz z przełącznikami którym uruchomiono program oraz zmienne środowiskowe tego procesu. W katalogu fd znajdują się pliki odpowiadające otwartym deskryptorom pliku (fd - file descriptor).

W katalogu /proc znajduje się dodatkowo link o nazwie self. Prowadzi on do katalogu przechowującego informacje na temat obecnie uruchomionego procesu. Gdy chcemy np. sprawdzić jakie zmienne środowiskowe są zdefiniowane dla programu który obecnie jest uruchomiony wystarczy wydać komendę:

# cat /proc/self/environ | tr '\0' '\n'

Wiemy jak przeglądać informacje o uruchomionych procesach. Popatrzmy teraz na informacje na temat jądra systemu znajdujące się w katalogu /proc/sys/kernel.

#ls /proc/sys/kernel
acct             domainname   osrelease     real-root-dev  shmmni
cad_pid          hostname     ostype        rtsig-max      tainted
cap-bound        hotplug      overflowgid   rtsig-nr       threads-max
core_pattern     modprobe     overflowuid   sem            version
core_setuid_ok   msgmax       panic         sg-big-buff
core_uses_pid    msgmn        printk        shmall
ctrl-alt-del     msgmni       random        shmmax

Jak wcześniej wspomniałem jako root mamy możliwość modyfikowania parametrów pracy jądra edytując zawartość plików w katalogu /proc. Zmieńmy np. nazwę hosta:

# echo "asmo" > /proc/sys/kernel/hostname

W podobny sposób możemy zmienić ustawienia innych elementów systemu. Np. ustawień sieciowych, które możemy modyfikować edytując pliki w katalogu /proc/sys/net. Dobrym przykładem takiej modyfikacji może być zablokowanie odpowiedzi echa (ping).

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Liczba jeden w tym wypadku powoduje włączenie opcji ignorowania "pingów". By powrócić do domyślnych ustawień wpisujemy:

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

To by było na tyle jeśli chodzi o katalog /proc. Mam nadzieje, że informacje zawarte w tym artykule pomogą wam w dalszej eksploracji tego katalogu. Więcej informacji znajdziecie w dokumentacji /usr/src/linux/Documentation/filesystems/proc.txt oraz /usr/src/linux/Documentation/networking/ip-sysctl.txt.

©Asmo , last modified: April 20 2008 23:28:11.