original in en Sandeep Grover
en to pl Mateusz Mrozewski
Sandeep Grover pracuje dla Magma Design Automation, Indie -- najszybciej rozwijającej się firmie w dziedzinie EDA (Electronic Design Automation). W swoim wolnym czasie odkrywa szczegóły Linuksa i ma nadzieję jednego dnia wnieść swój wkład w jądro Linuksa!
Jądro Linuksa dostarcza mechanizm pozwalający na dostęp do swoich wewnętrznych struktur danych, a także na zmianę ustawień jądra podczas jego pracy, po poprzez system plików /proc. Omówimy tutaj system plików /proc dla architektury Intel x86, jednak podstawowe pojęcia pozostaną takie same dla Linuksa na każdej platformie.
System plików /proc jest mechanizmem wykorzystywanym przez jądro i jego moduły do przesyłania informacji do procesów (stąd nazwa /proc). Ten pseudo system plików pozwala na współpracę z wewnętrznymi strukturami danych jądra, uzyskanie użytecznych informacji na temat procesów oraz na zmianę ustawień (poprzez modyfikację parametrów jądra) podczas pracy systemu. /proc jest przechowywany w pamięci, w przeciwieństwie do innych systemów plików, które są przechowywane na dysku. Jeśli otworzysz plik /proc/mounts (który wypisuje wszystkie zamontowane systemy plików, tak jak komenda "mount"), powinieneś zobaczyć następującą linię:
grep proc /proc/mounts /proc /proc proc rw 0 0
/proc jest kontrolowany przez jądro i nie ma zasadniczo żadnych urządzeń. Ponieważ zawiera on głównie kontrolowane przez jądro informacje o stanie systemu, najbardziej logicznym miejscem na ich przechowywanie jest pamięć kontrolowana przez jądro. Wykonanie operacji 'ls -l' na katalogu /proc ukazuje, że większość plików ma rozmiar 0 bajtów; jednak gdy przeglądamy dany plik, możemy zobaczyć całkiem dużo informacji. Jak to jest możliwe? Dzieje się tak, ponieważ system plików /proc rejestruje się w warstwie wirtualnego systemu plików (VFS - Virtual File System). Gdy VFS wykonuje odwołanie do i-węzłów jego plików/katalogów, system plików /proc tworzy te pliki/katalogi na podstawie informacji z jądra.
Jeśli system plików /proc nie jest zamontowany w twoim systemie,
możesz tego dokonać następującym poleceniem.
mount -t proc proc /proc
Powyższa komenda powinna zamontować twój system plików proc. Proszę przeczytać stronę podręcznika polecenia mount w celu uzyskania szczegółów.Pliki /proc mogą być użyte do uzyskania informacji o stanie jądra, atrybutach komputera, stanie uruchomionych procesów, itp. Większość plików w katalogu /proc dostarcza najświeższy "rzut okiem" na fizyczne środowisko systemu. Pomimo, że pliki /proc są wirtualne, mogą być przeglądane przy pomocy dowolnego edytora plików, jak 'more', 'less' czy 'cat'. Kiedy dowolny edytor próbuje otworzyć wirtualny plik, plik ten jest tworzony na bieżąco z informacji z jądra. Przedstawię teraz interesujące wyniki jakie uzyskałem w moim systemie
$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo $ file /proc/cpuinfo /proc/cpuinfo: empty $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 8 model name : Pentium III (Coppermine) stepping : 6 cpu MHz : 1000.119 cache size : 256 KB fdiv_bug : no hlt_bug : no sep_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr xmm bogomips : 1998.85 processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 8 model name : Pentium III (Coppermine) stepping : 6 cpu MHz : 1000.119 cache size : 256 KB fdiv_bug : no hlt_bug : no sep_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr xmm bogomips : 1992.29
System plików /proc może być użyty do zebrania użytecznych informacji
o systemie i działającym jądrze. Niektóre z ważnych plików zostały
wypisane poniżej.
System plików /proc może być wykorzystany do uzyskania informacji o każdym działającym procesie. W katalogu /proc jest kilka numerowych podkatalogów. Każdy numerowany katalog jest związany z id procesu (PID). W związku z tym dla każdego uruchomionego procesu, w katalogu /proc znajduje się podkatalog nazwany tak, jak jego PID. Wewnątrz tych podkatalogów znajdują się pliki dostarczające ważnych szczegółów o stanie i środowisku procesu. Spróbujmy znaleźć uruchomiony proces.
$ ps -aef | grep mozilla root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozillaPowyższa komenda pokazuje, że jest uruchomiony proces mozilla z PID 32558. W związku z tym z katalogu /proc powinien być podkatalog 32558.
$ ls -l /proc/32558 total 0 -r--r--r-- 1 root root 0 Dec 25 22:59 cmdline -r--r--r-- 1 root root 0 Dec 25 22:59 cpu lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/ -r-------- 1 root root 0 Dec 25 22:59 environ lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla* dr-x------ 2 root root 0 Dec 25 22:59 fd/ -r--r--r-- 1 root root 0 Dec 25 22:59 maps -rw------- 1 root root 0 Dec 25 22:59 mem -r--r--r-- 1 root root 0 Dec 25 22:59 mounts lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> // -r--r--r-- 1 root root 0 Dec 25 22:59 stat -r--r--r-- 1 root root 0 Dec 25 22:59 statm -r--r--r-- 1 root root 0 Dec 25 22:59 statusPlik "cmdline" zawiera komendę użytą do uruchomienia procesu. Plik "environ" zawiera zmienne środowiskowe dla procesu. "status" zawiera informacje o statusie procesu, zawierające numer identyfikacyjny użytkownika (UID) oraz grupy (GID) dla użytkownika, który uruchomił proces, ID procesu-rodzica (PPID), oraz aktualny stan procesu, taki jak "Sleeping" (uśpiony) czy "Running" (działający). Każdy katalog procesu ma także kilka łączy symbolicznych. "cwd" jest łączem roboczego katalogu procesu, "exe" jest łączem do wykonywalnego programu uruchomionego procesu, "root" jest łączem do katalogu, który proces "widzi" jako swój katalog główny (zazwyczaj "/"). Katalog "fd" zawiera łącza do deskryptorów plików, z których korzysta proces. "cpu" istnieje tylko na jądrach Linuxa SMP. Zawiera on rodzielenie czasu procesu przez procesor.
/proc/self jest interesującym podkatalogiem, który ułatwia
programowi użycie /proc do odszukania informacji o swoim procesie. Wpis
/proc/self jest łączem symbolicznym do podkatalogu /proc odnoszącego się do
procesu odczytującego katalog /proc.
Większość plików w katalogu /proc opisanych powyżej jest tylko do odczytu.
Jednakże system plików /proc umożliwia interakcję z jądrem poprzez pliki
do zapisu i odczytu w katalogu /proc. Zapis do tych plików może zmienić
stan jądra i w związku z tym zmiany w tych plikach powinny być
robione bardzo ostrożnie. Katalog /proc/sys zawiera wszystkie pliki, które
możemy zapisywać i użyć do zmiany zachowania jądra.
/proc/sys/kernel - ten katalog zawiera informacje, które
odzwierciedlają ogólne zachowanie jądra. /proc/sys/kernel/{domainname,
hostname} zawierają domenę oraz nazwę hosta maszyny/sieci. Te pliki mogą
być użyte do zmiany tych ustawień.
$ hostname machinename.domainname.com $ cat /proc/sys/kernel/domainname domainname.com $ cat /proc/sys/kernel/hostname machinename $ echo "new-machinename" > /proc/sys/kernel/hostname $ hostname new-machinename.domainname.comW związku z tym, poprzez modyfikację pliku wewnątrz katalogu /proc, możemy zmienić nazwę hosta. W katalogu /proc/sys/kernel/ istnieje o wiele więcej plików konfiguracyjnych. Wypisanie ich wszystkich tutaj jest niemożliwe, dlatego czytelnik powinien samodzielnie zajrzeć do tego katalogu.
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_allTo ukryje twój komputer w sieci poprzez wyłączenie odpowiedzi na icmp_echos. Host nie będzie odpowiadał na pingi z innych hostów.
$ ping machinename.domainname.com no answer from machinename.domainname.comAby ustawić to na domyślne zachowanie wykonaj
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_allJest dużo więcej podkatalogów wewnątrz /proc/sys, które można konfigurować w celu zmiany właściwości jądra. Zajrzyj do [1], [2] po szczegółowe informacje.
System plików /proc dostarcza interfejs do jądra oparty na plikach. Pomaga
on w określaniu stanu i konfiguracji różnych urządzeń i procesów w
systemie. Zrozumienie i wykorzystanie wiedzy o nim jest kluczem do
najlepszego wykorzystania twojego Linuxa.