JustPaste.it

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.

 

Źródło: http://slackware.asmonet.net