proc - pseudosystem plików z informacjami o procesach
proc jest pseudosystemem plików, który
udostępnia interfejs do struktur danych jądra. Zazwyczaj jest
montowany w katalogu /proc. Jest on w większości
przeznaczony tylko do odczytu, lecz niektóre pliki
umożliwiają modyfikacje zmiennych jądra.
System plików proc obsługuje
następujące opcje montowania:
- hidepid=n
(od Linuksa 3.3)
- Opcja kontroluje kto może uzyskać dostęp do
informacji w katalogach /proc/[pid]. Argument n przyjmuje
jedną z następujących wartości:
- 0
- Wszyscy mają dostęp do katalogów /proc/[pid].
Jest to tradycyjne zachowanie i domyślne, jeśli nie
użyje się tej opcji montowania.
- 1
- Użytkownicy nie mogą uzyskać dostępu do
plików i podkatalogów w katalogach /proc/[pid] innych
niż ich własne (same katalogi /proc/[pid]
pozostają widoczne). Wrażliwe pliki, takie jak
/proc/[pid]/cmdline i /proc/[pid]/status są chronione
przed innymi użytkownikami. Dzięki temu niemożliwe
staje się dowiedzenie się, czy jakiś
użytkownik uruchomił konkretny program (tak długo,
jak sam program nie ujawnia tego swoim zachowaniem).
- 2
- Jak w trybie 1, lecz dodatkowo katalogi /proc/[pid]
przynależne innym użytkownikom
pozostają niewidoczne. Oznacza to, że wpisy
/proc/[pid] nie mogą dłużej
służyć do poznania PID-ów w systemie. Nie
ukrywa to faktu, że proces o określonym PID istnieje
(można się tego dowiedzieć innymi sposobami,
np. poprzez "kill -0 $PID"), ale ukrywa UID i GID procesu,
które w innym przypadku można by było poznać
wykonując stat(2) na katalogu /proc/[pid]. To
znacznie utrudnia zadanie atakującego polegające na
pozyskaniu informacji o działających procesach (np. odkrycie
czy jakiś demon działa z większymi uprawnieniami, czy
jakiś użytkownik ma uruchomiony jakiś wrażliwy
program, czy inni użytkownicy w ogóle mają
coś uruchomione itd.).
- gid=gid (od
Linuksa 3.3)
- Określa ID grupy, której członkowie są
uprawnieni do dostępu do informacji zablokowanych innym przez
hidepid (tzn. użytkownicy w tej grupie zachowują
się tak, jakby /proc zostało zamontowane z
hidepid=0). Powinno się używać tej grupy,
zamiast innych rozwiązań, takich jak umieszczanie
użytkowników nie-root w pliku sudoers(5).
Poniższa lista opisuje wiele plików i
katalogów w hierarchii /proc.
- /proc/[pid]
- Każdemu działającemu procesowi odpowiada katalog o
numerycznej nazwie; nazwą tą jest identyfikator procesu.
Każdy z tych katalogów zawiera następujące
pseudopliki i podkatalogi:
- /proc/[pid]/attr
- Pliki w tym katalogu udostępniają API do
modułów bezpieczeństwa.
Zawartością katalogu są pliki, które
mogą być odczytywane i zapisywane, aby ustawić
atrybuty związane z bezpieczeństwem. Ten katalog
został dodany do obsługi SELinux, ale intencją
było to, aby API było na tyle ogóle, aby
obsługiwać również inne moduły
bezpieczeństwa. Dla wyjaśnienia, poniżej
przedstawiono przykłady jak SELinux używa tych
plików.
Obecne tylko, jeśli jądro zostało
skonfigurowane z CONFIG_SECURITY.
- /proc/[pid]/attr/current (od Linuksa 2.6.0)
- Zawartość tego pliku reprezentuje aktualne atrybuty
bezpieczeństwa procesu.
W SELinuksie plik ten służy do pozyskania
kontekstu bezpieczeństwa procesu. Do Linuksa 2.6.11 plik nie
mógł służyć do ustawienia kontekstu
bezpieczeństwa (zapis był zawsze zabroniony), odkąd
SELinux ograniczyć przejścia bezpieczeństwa procesu
do execve(2) (zob. opis /proc/[pid]/attr/exec,
poniżej). Od Linuksa 2.6.11 SELinux poluzował to
ograniczenie i zaczął obsługiwać operacje
"ustawiania" poprzez zapis do tego węzła,
jeśli jest on autoryzowany przez politykę, choć
użycie tej operacji jest odpowiednie jedynie dla aplikacji
zaufanych do zarządzania
pożądaną separacją pomiędzy
starymi a nowymi kontekstami bezpieczeństwa. Do Linuksa 2.6.28
SELinux nie pozwalał wątkom z wielowątkowych
procesów na ustawienie ich kontekstu bezpieczeństwa
poprzez ten węzeł, jeśli mogło to
doprowadzić do niespójności wśród
kontekstów bezpieczeństwa wątków
dzielących tą samą przestrzeń
pamięci. Od Linuksa 2.6.28 SELinux poluzował to
ograniczenie i rozpoczął obsługiwanie operacji
"ustawiania" dla wątków procesów
wielowątkowych, jeśli ich nowy kontekst
bezpieczeństwa jest powiązana ze starym kontekstem
bezpieczeństwa, gdzie relacja powiązania jest zdefiniowana
w polityce i gwarantuje, że nowy kontekst bezpieczeństwa
ma podzbiór uprawnień starego kontekstu
bezpieczeństwa. Inne moduły bezpieczeństwa
mogą wybrać aby obsługiwać operacje
"ustawiania" poprzez zapis do tego węzła.
- /proc/[pid]/attr/exec (od Linuksa 2.6.0)
- Ten plik reprezentuje atrybuty przypisane do procesu przez kolejne
execve(2).
W SELinuksie jest to potrzebne do obsługi
przejść roli/domeny, a execve(2) jest preferowanym
punktem do takich przekształceń, ponieważ oferuje
on lepszą kontrolę nad inicjalizacją procesu
w nowej etykiecie bezpieczeństwa i nienaruszalności stanu.
W SELinuksie ten atrybut jest resetowany przy execve(2), tak
więc nowy program powraca do domyślnego zachowania przy
każdym wywołaniu execve(2) jakie może
utworzyć. W SELinuksie proces może
ustawić tylko swój atrybut
/proc/[pid]/attr/exec.
- /proc/[pid]/attr/fscreate (od Linuksa 2.6.0)
- Plik ten reprezentuje atrybuty do przypisania do plików utworzone
przez kolejne wywołania do open(2), mkdir(2),
symlink(2) i mknod(2)
SELinux wykorzystuje ten plik do obsługi tworzenia
pliku (za pomocą wspomnianych wcześniej
wywołań systemowych) w stanie bezpieczeństwa, co
nie daje ryzyka niepoprawnego dostępu uzyskanego podczas
tworzenia pliku i ustawiania atrybutów. W SELinuksie atrybut ten
jest resetowany przy execve(2), tak więc nowy program
powraca do domyślnego zachowania przy każdym
wywołaniu tworzącym plik jakie może on
wykonać, ale atrybut jest zachowywany podczas wielu
wywołań tworzących plik przez jeden program, chyba
że jest jawnie resetowany. W SELinuksie proces może
ustawić tylko swój atrybut
/proc/[pid]/attr/fscreate.
- /proc/[pid]/attr/prev (od Linuksa 2.6.0)
- Plik ten zawiera kontekst bezpieczeństwa procesu przed ostatnim
execve(2); tj. poprzednią wartość
/proc/[pid]/attr/current.
- /proc/[pid]/attr/keycreate (od Linuksa 2.6.18)
- Jeśli proces zapisuje kontekst bezpieczeństwa do tego pliku,
wszystkie kolejno utworzone klucze (add_key(2)) będą
oznaczone tym kontekstem. Więcej informacji znajduje się w
pliku źródeł jądra
Documentation/keys.txt.
- /proc/[pid]/attr/socketcreate (od Linuksa 2.6.18)
- Jeśli proces zapisuje kontekst bezpieczeństwa do tego pliku,
wszystkie kolejno utworzone gniazda będą oznaczone tym
kontekstem.
- /proc/[pid]/auxv (od wersji jądra 2.6.0-test7)
- Zawartość informacji ELF przekazanej do procesu podczas
uruchomienia. Formatem jest jeden identyfikator w postaci unsigned
long plus jedna wartość unsigned long dla
każdego wpisu. Ostatni wpis zawiera dwa zera. Zob. też
getauxval(3).
- /proc/[pid]/cgroup (od Linuksa 2.6.24)
- Plik opisuje grupy kontrolne do których należy
proces/zadanie. W każdej hierarchi cgroup istnieje jeden wpis
zawierający pola oddzielone dwukropkiem w postaci:
5:cpuacct,cpu,cpuset:/daemons
- Pola oddzielone dwukropkiem, od lewej do prawej:
- 1.
- numer identyfikacyjny hierarchii
- 2.
- zestaw podsystemów ograniczony do hierarchi
- 3.
- grupa kontrolna w hierarchii do której należy proces
- Ten plik istnieje tylko jeśli podczas kompilacji jądra
włączono opcję CONFIG_CGROUPS.
- /proc/[pid]/clear_refs (od Linuksa 2.6.22)
-
Plik jest tylko do odczytu, zapisywalny
wyłącznie dla właściciela procesu.
Do pliku można zapisać następujące
wartości:
- 1 (od Linuksa 2.6.22)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
związanych z procesem (przed jądrem 2.6.32 taki efekt
powodowało zapisanie dowolnej wartości niezerowej).
- 2 (od Linuksa 2.6.32)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
anonimowych związanych z procesem.
- 3 (od Linuksa 2.6.32)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
przypisanych do plików, związanych z procesem.
- Czyszczenie bitów PG_Referenced i ACCESSED/YOUNG zapewnia
metodę zmierzenia przybliżonej wartości
pamięci używanej przez proces. Najpierw należy
sprawdzić wartość w polu "Referenced" dla
wartości VMA pokazanych w /proc/[pid]/smaps aby
sprawdzić użycie pamięci przez proces.
Następnie czyści się bity PG_Referenced i
ACCESSED/YOUNG i po jakimś zmierzonym czasie ponownie sprawdza
się wartości pól "Referenced" aby
dowiedzieć się jak zmieniło się użycie
pamięci procesu podczas zmierzonego interwału. Jeśli
jest się zainteresowanym wyłącznie pewnymi typami
przypisania, można skorzystać z wartości 2 lub 3,
zamiast 1.
Aby zmienić inny bit można zapisać
również inną wartość:
- 4 (od Linuksa 3.11)
- Czyści bit soft-dirty dla wszystkich stron związanych z
procesem. Używa się tego (razem z
/proc/[pid]/pagemap) przez system przywracania check-point do
wykrycia które strony procesu zostały "zabrudzone"
od czasu zapisu do pliku /proc/[pid]/clear_refs.
- Zapis innej wartości niż wypisane powyżej do
/proc/[pid]/clear_refs nie daje żadnego efektu.
Plik /proc/[pid]/clear_refs istnieje tylko jeśli
podczas kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/cmdline
- Ten plik tylko do odczytu zawiera pełną linię
polecenia wydanego przy uruchamianiu procesu, chyba że jest to
proces-duch (zombie). Wówczas plik będzie pusty, tzn. odczyt
tego pliku zwróci zawsze 0 znaków. Argumenty linii
poleceń występują w tym pliku rozdzielone znakami NUL
('\0'), z dodatkowym znakiem NUL po ostatnim łańcuchu.
- /proc/[pid]/comm (od Linuksa 2.6.33)
- Plik pokazuje wartość comm procesu—tj.
nazwę polecenia związaną z procesem.
Różne wątki tego samego procesu mogą
mieć różne wartości comm,
dostępne za pomocą /proc/[pid]/task/[tid]/comm.
Wątek może zmodyfikować jego wartość
comm lub tą innego wątku z tej samej grupy
wątków (zob. opis CLONE_THREAD w clone(2)),
pisząc do pliku /proc/self/task/[tid]/comm.
Łańcuchy dłuższe niż
TASK_COMM_LEN (16) znaków są po cichu obcinane.
Plik zapewnia zestaw operacji PR_SET_NAME i
PR_GET_NAME prctl(2) i jest używany przez
pthread_setname_np(3), przy zmianie nazw wątków
innych niż wywołujący.
- /proc/[pid]/coredump_filter (od Linuksa 2.6.23)
- Patrz core(5).
- /proc/[pid]/cpuset (od Linuksa 2.6.12)
- Patrz cpuset(7).
- /proc/[pid]/cwd
- Jest dowiązaniem do bieżącego katalogu roboczego
procesu. Aby dowiedzieć się, jaki jest katalog roboczy
procesu, na przykład o identyfikatorze 20, można
wydać następujące polecenie:
$ cd /proc/20/cwd; /bin/pwd
Należy zauważyć, że polecenie
pwd jest często wbudowanym poleceniem powłoki i
może nie działać w tym kontekście w
sposób właściwy. W powłoce bash(1)
można użyć pwd -P.
W procesie wielowątkowym zawartość tego
linku symbolicznego nie jest dostępna, jeżeli wątek
główny już się zakończył
(zazwyczaj przez wywołanie pthread_exit(3)).
- /proc/[pid]/environ
- Plik ten zawiera środowisko procesu. Wpisy są oddzielone
znakami NULL ("\0"), mogą także
wystąpić znaki NULL na końcu. Dlatego, aby
wypisać zmienne środowiskowe procesu 1, należy
wykonać:
$ strings /proc/1/environ
- /proc/[pid]/exe
- W Linuksie 2.2 i wersjach późniejszych plik ten jest
dowiązaniem symbolicznym zawierającym rzeczywistą
nazwę ścieżki działającego polecenia.
Dowiązaniem symbolicznym można się normalnie
posługiwać - próba jego otwarcia otworzy plik
programu. Można nawet wydać polecenie
/proc/[pid]/exe, aby uruchomić kolejną kopię
tego samego pliku wykonywalnego, co uruchomiony przez [pid]. Jeśli
ścieżka została odlinkowana, dowiązanie
symboliczne będzie zawierało łańcuch
'(deleted)' dodany do oryginalnej ścieżki. W procesie
wielowątkowym zawartość tego linku symbolicznego nie
jest dostępna, jeżeli główny wątek
już się zakończył (wywołując
zapewne pthread_exit(3)).
W Linuksie 2.0 i wcześniejszych wersjach,
/proc/[pid]/exe jest wskaźnikiem do uruchomionego pliku
binarnego i ma postać dowiązania symbolicznego.
Wywołanie readlink(2) na tym pliku zwróci w
Linuksie 2.0 łańcuch znakowy postaci:
[urządzenie]:i-węzeł
Na przykład, [0301]:1502 będzie 1502
i-węzłem na urządzeniu o numerze
głównym 03 (IDE, MFM itp.) i pobocznym 01 (pierwsza
partycja pierwszego dysku).
Do zlokalizowania pliku, można
posłużyć się poleceniem find(1) z
opcją -inum.
- /proc/[pid]/fd/
- Jest to podkatalog zawierający po jednym wpisie dla każdego
otwartego przez proces pliku; nazwą tego wpisu jest deskryptor
pliku i jest on dowiązaniem symbolicznym do rzeczywistego pliku.
Dlatego 0 jest standardowym wejściem, 1 jest standardowym
wyjściem, 2 jest standardową diagnostyką, itd.
W przypadku deskryptorów plików potoków
gniazd wpisy będą dowiązaniami symbolicznymi,
których zawartością jest typ pliku z
i-węzłem. Wywołanie readlink(2) na takim
pliku zwróci ciąg w postaci:
typ:[i-węzeł]
Przykładowo socket:[2248868] będzie
gniazdem z i-węzłem 2248868. W przypadku gniazd,
i-węzeł można wykorzystać do pozyskania
większej liczby informacji z jednego z plików z katalogu
/proc/net/.
W przypadku deskryptorów plików, które
nie mają odpowiadającego i-węzła (np.
deskryptorów plików tworzonych za pomocą
epoll_create(2), eventfd(2), inotify_init (2),
signalfd(2) i timerfd(2)), wpis będzie
dowiązaniem symbolicznym z zawartością w
postaci
anon_inode:<typ-pliku>
W niektórych przypadkach typ-pliku jest otoczony
nawiasami kwadratowymi.
Przykładowo dowiązanie symboliczne deskryptora
pliku epoll będzie dowiązaniem symbolicznym,
którego zawartością jest łańcuch
anon_inode:[eventpoll].
W procesie wielowątkowym zawartość tego
katalogu nie jest dostępna, jeżeli wątek
główny już się zakończył
(zazwyczaj przez wywołanie pthread_exit(3)).
Programy, które przyjmują nazwę pliku
jako argument wiersza polecenia, lecz nie czytają standardowego
wejścia, jeśli nie podano argumentu albo które
zapisują do pliku nazwanego argumentem wiersza polecenia, lecz
nie wysyłają danych wyjściowych na standardowe
wyjście, można zmusić do używania
standardowego wejścia lub wyjścia wykorzystując
/proc/[pid]/fd. Na przykład, zakładając,
że opcja -i określa plik wejściowy, a opcja
-o określa plik wyjściowy:
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
co daje działający filtr.
/proc/self/fd/N jest w przybliżeniu tym samym co
/dev/fd/N na niektórych systemach uniksowych i
uniksopodobnych. Większość linuksowych
skryptów MAKEDEV tworzy dowiązania symboliczne
/dev/fd do /proc/self/fd.
Większość systemów
udostępnia dowiązania symboliczne /dev/stdin,
/dev/stdout i dev/stderr, które linkują
odpowiednio do plików 0, 1 i 2 w
/proc/self/fd. Powyższe, przykładowe polecenie
może być więc zapisane również tak:
$ foobar -i /dev/stdin -o /dev/stdout ...
- /proc/[pid]/fdinfo/ (od Linuksa 2.6.22)
- Jest to podkatalog zawierający po jednym wpisie dla każdego
pliku otwartego przez proces; nazwą tego wpisu jest deskryptor
pliku. Pliki w tym katalogu są odczytywalne tylko dla
właściciela procesu. Zawartość pliku
można odczytać, aby uzyskać informacje o
odpowiadającym mu deskryptorze pliku. Zawartość
zależy od typu pliku odpowiadającego odpowiedniemu
deskryptorowi pliku.
Dla zwykłych plików i katalogów
wygląda to zwykle tak:
$ cat /proc/12015/fdinfo/4
pos: 1000
flags: 01002002
mnt_id: 21
Występują następujące pola:
- pos
- Jest to liczba dziesiętna pokazująca przesunięcie
pliku.
- flags
- Jest to liczba ósemkowa wyświetlająca tryb
dostępu pliku i flagi statusu pliku (zob. open(2)).
JEśli ustawiona jest flaga deskryptora pliku close-on-exec, to
flags będzie zawierało również
wartość O_CLOEXEC.
Przed Linuksem 3.1 to pole nieprawidłowo
wyświetlało ustawienie O_CLOEXEC w trakcie
otwierania pliku, zamiast aktualnego ustawienia flagi close-on-exec.
- mnt_id
- To pole, obecne od Linuksa 3.15 jest identyfikatorem punktu montowania
zawierającego ten plik. Zob. opis
/proc/[pid]/mountinfo.
- Dla deskryptorów plików eventfd (zob. eventfd(2)),
wyświetlane są (od Linuksa 3.8) następujące
pola:
pos: 0
flags: 02
mnt_id: 10
eventfd-count: 40
eventfd-count jest
bieżącą wartością licznika
eventfd, szesnastkowo.
Dla deskryptorów plików epoll (zob.
epoll(7)), wyświetlane są (od Linuksa 3.8)
następujące pola:
pos: 0
flags: 02
mnt_id: 10
tfd: 9 events: 19 data: 74253d2500000009
tfd: 7 events: 19 data: 74253d2500000007
Każdy wiersz zaczynający się od
tfd opisuje jeden z deskryptorów pliku monitorowany za
pomocą deskryptora pliku epool (zob. epoll_ctl(2)
aby zapoznać się z niektórymi
szczegółami). Pole tfd jest numerem deskryptora
pliku. Pole events jest szesnastkową maską
zdarzeń monitorowanych dla tego deskryptora pliku. Pole
data jest wartością danych
powiązanych z tym deskryptorem pliku.
Dla deskryptorów plików signalfd (zob.
signalfd(2)), wyświetlane są (od Linuksa 3.8)
następujące pola:
pos: 0
flags: 02
mnt_id: 10
sigmask: 0000000000000006
sigmask jest
szesnastkową maską sygnałów
akceptowanych poprzez ten deskryptor pliku signalfd (w tym
przykładzie ustawione są bity 2 i 3 odpowiadające
sygnałom SIGINT i SIGQUIT; zob.
signal(7)).
Dla deskryptorów plików inotify (zob.
inotify(7)), wyświetlane są (od Linuksa 3.8)
następujące pola:
pos: 0
flags: 00
mnt_id: 11
inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:2af87e00220ffd73
inotify wd:1 ino:192627 sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:27261900802dfd73
Każdy z wierszy zaczynający się od
"inotify" wyświetla informacje o jednym z
monitorowanych plików lub katalogów. W wierszu
występują następujące pola:
- wd
- Numer obserwowanego deskryptora (dziesiętnie). (od ang.
watch descriptor)
- ino
- Numer i-węzła pliku docelowego (szesnastkowo).
- sdev
- ID urządzenia, na którym znajduje się plik docelowy
(szesnastkowo).
- mask
- Maska monitorowanych zdarzeń pliku docelowego (szesnastkowo).
- Jeśli jądro zbudowano z obsługą exportfs,
ścieżka do pliku docelowego jest wyświetlona jako
uchwyt pliku, przez trzy pola szesnastkowe: fhandle-bytes,
fhandle-type i f_handle.
Dla deskryptorów plików fanotify (zob.
fanotify(7)), wyświetlane są (od Linuksa 3.8)
następujące pola:
pos: 0
flags: 02
mnt_id: 11
fanotify flags:0 event-flags:88002
fanotify ino:19264f sdev:800001 mflags:0 mask:1 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:4f261900a82dfd73
Czwarty wiersz wyświetla informacje zdefiniowane przy
tworzeniu grupy fanotify poprzez fanotify_init(2):
- Każdy dodatkowy wiersz pokazany w pliku zawiera informacje o jednym
znaku (ang. mark) grupy fanotify. Większość z tych
pól jest takich jak do inotify z wyjątkiem:
- mflags
- Flagi powiązane ze znakiem (wyrażone szesnastkowo).
- mask
- Maski zdarzeń dla tego znaku (wyrażone szesnastkowo).
- ignored_mask
- Maski zdarzeń ignorowanych dla tego znaku (wyrażone
szesnastkowo).
- Więcej informacji o tych polach znajduje się w
podręczniku fanotify_mark(2).
- /proc/[pid]/io (od wersji jądra 2.6.20)
- Plik zawiera statystyki wejścia/wyjścia dla procesu np.:
# cat /proc/3828/io
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0
Występują następujące pola:
- rchar: odczytane
znaki
- Liczba bajtów, które zostały odczytane ze
względu na dane zadanie. Jest to suma bajtów z
read(2) i podobnych wywołań systemowych. Obejmuje
takie działania jak wejście/wyjście terminala. To,
czy konieczny był faktyczny dostęp do
wejścia/wyjściu fizycznego dysku nie ma wpływu na
wartość (odczyt mógł nastąpić
wyłącznie z bufora stronicowania).
- wchar: zapisane
znaki
- Liczba bajtów, które zostały zapisane lub powinny
być zapisane przez dane zadania. Tego pola tyczą się
podobne zastrzeżenia jak rchar.
- syscr: odczytane
wywołania systemowe
- Próba policzenia operacji odczytu wejścia/wyjścia tj.
wywołań systemowych takich jak read(2) i
pread(2).
- syscw: zapisane
wywołania systemowe
- Próba policzenia operacji zapisu wejścia/wyjścia tj.
wywołań systemowych takich jak write(2) i
pwrite(2).
- read_bytes:
odczytane bajty
- Próba policzenia bajtów, które faktycznie
musiały być pobrane z poziomu nośnika. Jest
dokładna dla systemów plików korzystających z
bloków.
- write_bytes:
zapisane bajty
- Próba policzenia bajtów, które faktycznie
musiały być wysłane na poziom nośnika.
- cancelled_write_bytes:
- Dużą niedokładność powoduje
przycinanie. Jeśli proces zapisze do pliku 1 MB i
później skasuje go, de facto nie nastąpi żaden
zapis. Zostanie to jednak odnotowane jako powodujące zapis 1 MB.
Innymi słowy: pole to reprezentuje liczbę bajtów,
które dzięki temu procesowi nie wystąpiły
przez przycięcie bufora strony. Część
zadań może spowodować również
"ujemne" wejście/wyjście. Jeśli to zadanie
przytnie "brudny" bufor strony, część
wejścia/wyjście, które inne zadanie już
policzyło (jest w jego write_bytes) nie nastąpi.
- Uwaga: W obecnej implementacji ma miejsce wyścig bitowy na
32-bitowych systemach: jeśli proces A odczyta /proc/[pid]/io
procesu B, gdy proces B aktualizuje jeden ze swoich 64-bitowych
liczników, proces A zobaczy wynik pośredni.
- /proc/[pid]/gid_map (od Linuksa 3.5)
- Zob. user_namespaces(7).
- /proc/[pid]/limits (od Linuksa 2.6.24)
- Plik zawiera informacje o miękkim limicie, twardym limicie i
jednostkach, w których mierzone są limity zasobów
procesów (patrz getrlimit(2)). Do Linuksa 2.6.35
(włącznie) plik jest zabezpieczony, aby pozwolić na
odczyt jedynie przez realny identyfikator UID procesu. Od wersji 2.6.36
plik jest odczytywalny dla wszystkich użytkowników
systemu.
- /proc/[pid]/map_files/ (od jądra 3.3)
- Podkatalog zawiera wpisy odnoszące się do plików
zmapowanych do pamięci (patrz mmap(2)). Wpisy są
nazwane jako pary adresów: początku i końca obszaru
pamięci (jako liczby szesnastkowe) i są dowiązaniami
symbolicznymi do samych zmapowanych plików. Oto przykład,
zmodyfikowany aby zmieścić się w 80 kolumnowym
terminalu:
# ls -l /proc/self/map_files/
lr--------. 1 root root 64 Apr 16 21:31
3252e00000-3252e20000 -> /usr/lib64/ld-2.15.so
...
Choć te wpisy są dostępne dla
obszarów pamięci przydzielonych flagą
MAP_FILE, to sposób w jaki zaimplementowane jest anonimowe
dzielenie pamięci (obszary utworzone flagami MAP_ANON |
MAP_SHARED) oznaczają że tego typu obszary
również pojawią się w tym katalogu. Oto
przykład, gdzie plikiem docelowym jest usunięty
/dev/zero:
lrw-------. 1 root root 64 Apr 16 21:33
7fc075d2f000-7fc075e6f000 -> /dev/zero (deleted)
Ten katalog istnieje tylko jeśli włączono
opcję konfiguracyjną jądra
CONFIG_CHECKPOINT_RESTORE. Do obejrzenia zawartości tego
katalogu wymagany jest przywilej (CAP_SYS_ADMIN).
- /proc/[pid]/maps
- Plik zawierający aktualnie zmapowane obszary pamięci wraz z
prawami dostępu do nich. Więcej informacji o mapowaniu
pamięci zawiera podręcznik systemowy mmap(2).
Format pliku jest następujący:
adres uprawn przesun urządz i-węzeł ścieżka
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0 [heap]
00e24000-011f7000 rw-p 00000000 00:00 0 [heap]
...
35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a20000-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a21000-35b1a22000 rw-p 00000000 00:00 0
35b1c00000-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc-2.15.so
35b1dac000-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc-2.15.so
...
f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986]
...
7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0 [stack]
7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
Pole adres jest przestrzenią adresową
procesu, który ją zajmuje, a uprawn jest zbiorem
uprawnień:
r = odczyt
w = zapis
x = wykonywanie
s = wspólne
p = prywatne (kopiowane przy zapisie)
Przesun jest przesunięciem w pliku lub w
czymś innym, urządz zawiera numery
(główny:poboczny) urządzenia, a
i-węzeł jest i-węzłem na tym
urządzeniu. 0 wskazuje, że nie istnieje
i-węzeł związany z tym obszarem pamięci, jak
to na przykład ma miejsce w przypadku segmentu BSS
(niezainicjowanych danych).
Ścieżka to zwykle plik
zabezpieczający mapowanie. Koordynacja jest łatwa w
przypadku plików ELF za pomocą pola przesun,
poprzez sprawdzenie pola Offset w nagłówkach programu ELF
(readelf -l).
Istnieją dodatkowe, pomocne
pseudościeżki:
- [stack]
- Stos pierwotnego procesu (zwanego też głównym
wątkiem)
- [stack:<tid>] (od Linuksa 3.4)
- Stos wątku (gdzie <tid> jest identyfikatorem
wątku). Odpowiada ścieżce
/proc/[pid]/task/[tid]/.
- [vdso]
- Wirtualny, dynamicznie linkowany obiekt współdzielony.
- [heap]
- Stos wątku.
- Jeśli pole ścieżka jest puste, to jest to
anonimowe przypisanie, takie jak pozyskiwane za pomocą funkcji
mmap(2). Nie ma prostej metody na powiązanie jej ze
źródłem procesu oprócz metod takich jak
gdb(1), strace(1) itp.
W Linuksie 2.0 nie ma pola podającego nazwę
ścieżki.
- /proc/[pid]/mem
- Za pośrednictwem tego pliku można, korzystając z
open(2), read(2) i lseek(2), uzyskać
dostęp do stron pamięci procesu.
- /proc/[pid]/mountinfo (od wersji jądra 2.6.26)
- Plik zawiera informacje o punktach montowania. Składa się z
linii w postaci:
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
- Liczby w nawiasach są etykietami poniższych
opisów:
- (1)
- ID montowania: unikatowy identyfikator montowania (może
zostać użyty ponownie po wykonaniu umount(2)).
- (2)
- ID rodzica: identyfikator rodzica (lub siebie samego, jeśli
montowanie znajduje się na szczycie drzewa montowań).
- (3)
- główny:poboczny: wartość pola st_dev
(patrz stat(2)) dla plików w systemie plików.
- (4)
- korzeń: korzeń (root) montowania w systemie
plików.
- (5)
- punkt montowania: punkt montowania w odniesieniu do korzenia
procesów.
- (6)
- opcje montowania: opcje montowania dla każdego montowania.
- (7)
- pola opcjonalne: zero lub więcej pól w postaci
"znacznik[:wartość]"
- (8)
- separator: oznacza koniec pól opcjonalnych.
- (9)
- typ systemu plików: nazwa systemu plików w postaci
"typ[.podtyp]".
- (10)
- źródło montowania: informacja zależna od
systemu plików lub "none".
- (11)
- super opcje: opcje dla superbloku.
- Parsery powinny ignorować wszystkie nierozpoznane pola opcjonalne.
Obecnie są to:
- shared:X
- montowanie jest współdzielone w grupie
węzłów X
- master:X
- montowanie jest podrzędne w stosunku do grupy
węzłów X
- propagate_from:X
- montowanie jest podrzędne i podlega propagacji z grupy
węzłów X (*)
- unbindable
- montowanie jest niepodpinalne
- (*) X jest najbliższą dominującą grupą
węzłów pod korzeniem procesów. Jeśli X
jest bezpośrednio nadrzędne w stosunku do montowania, lub
jeśli nie istnieje dominująca grupa
węzłów pod tym samym korzeniem, to obecne jest
wyłącznie pole "master:X", bez pola
"propagate_from:X".
Aby dowiedzieć się więcej o propagacji
montowań, proszę zapoznać się z
Documentation/filesystems/sharedsubtree.txt w drzewie
źródeł jądra Linux.
- /proc/[pid]/mounts (od wersji Linuksa 2.4.19)
- Jest to lista wszystkich systemów plików obecnie
zamontowanych w przestrzeni montowań procesów. Format tego
pliku jest udokumentowany w fstab(5). Od wersji 2.6.15 jądra
Linuksa, ten plik może być użyty w wywołaniu
funkcji poll(): po otwarciu tego pliku do odczytu, zmiana w nim (np.
montowanie lub odmontowanie systemu plików) powoduje, że
select(2) oznaczy deskryptor jako możliwy do odczytu, a
poll(2) i epoll_wait(2) zaznaczą, że w pliku
wystąpił błąd. Zob. namespaces(7) aby
dowiedzieć się więcej.
- /proc/[pid]/mountstats (Od wersji Linuksa 2.6.17)
- Plik eksportuje informacje (statystyki, informacje konfiguracyjne) o
punktach montowań w przestrzeni montowań procesów.
Wiersze pliku mają następującą postać:
device /dev/sda7 mounted on /home with fstype ext3 [statistics]
( 1 ) ( 2 ) (3 ) (4)
- Pola w każdym wierszu są następujące:
- (1)
- Nazwa zamontowanego urządzenia (lub "nodevice",
jeśli nie ma odpowiadającego urządzenia).
- (2)
- Punkt montowania w drzewie systemu plików.
- (3)
- Typ systemu plików.
- (4)
- Opcjonalne statystyki i informacje konfiguracyjne. Obecnie (Linux 2.6.26)
tylko system plików NFS eksportuje opcje za pomocą tego
pola.
- Plik jest odczytywalny wyłącznie dla
właściciela procesu.
Więcej informacji znajduje się w opisie
namespaces(7).
- /proc/[pid]/ns/ (od Linuksa 3.0)
- Jest to podkatalog zawierający po jednym wpisie dla każdej
przestrzeni nazw, która obsługuje manipulację za
pomocą setns(2). Aby dowiedzieć się
więcej, proszę zapoznać się z
namespaces(7).
- /proc/[pid]/numa_maps (od Linuksa 2.6.14)
- Patrz numa(7).
- /proc/[pid]/oom_adj (od Linuksa 2.6.11)
- Plik może być użyty do dostosowania wyniku,
używanego do wybrania procesów do zabicia, w przypadku
sytuacji braku pamięci (out-of-memory - OOM). Jądro
używa tej wartości do operacji przesunięcia bitowego
wartości oom_score procesu: poprawne wartości
mieszczą się w zakresie od -16 do +15, wraz ze
specjalną wartością -17, która
całkowicie wyłącza zabijanie przy OOM danego procesu.
Dodatni wynik zwiększa prawdopodobieństwo, że proces
zostanie zabity przez OOM-killer, ujemny zmniejsza je.
- Domyślną wartością tego pliku jest 0, nowy
proces dziedziczy ustawienie oom_adj swojego rodzica. Proces musi
być uprzywilejowany (CAP_SYS_RESOURCE) aby móc
zaktualizować ten plik.
- Od Linuksa 2.6.36 używanie tego pliku jest przestarzałe,
powinno się korzystać z
/proc/[pid]/oom_score_adj.
- /proc/[pid]/oom_score (od Linuksa 2.6.11)
- Plik wyświetla bieżący wynik, jaki jądro
przydziela temu procesowi w celu wybrania procesu do zabicia przez
OOM-killer. Wyższy wynik oznacza, że proces ma
większe prawdopodobieństwo zostania wybranym przez
OOM-killer. Podstawą wyniku jest liczba pamięci
użytej przez proces, a jest on zwiększany (+) lub
zmniejszany (-) przez następujące czynniki:
- czy proces tworzy wiele potomków przy użyciu fork(2)
(+),
- czy proces jest używany przez długi czas lub używa
dużo czasu procesora (-),
- czy proces ma niską wartość nice (np. > 0)
(+),
- czy proces jest uprzywilejowany (-) oraz
- czy proces wykonuje bezpośredni dostęp do sprzętu
(-).
- Wartość oom_score uwzględnia
również przesunięcie określone przez
ustawienie procesu oom_score_adj lub oom_adj.
- /proc/[pid]/oom_score_adj (od Linuksa 2.6.36)
- Plik może być użyty do dostosowania heurystyki zwanej
"badness", używanej do wybrania procesu który
zostanie zabity w sytuacji braku pamięci.
Przypisuje ona do każdego potencjalnego zadania
wartość od 0 (nigdy nie zabija) do 1000 (zawsze zabija)
aby określić docelowy proces do zabicia. Jednostki
są z grubsza proporcjonalne do pamięci,
którą proces może przydzielić,
obliczaną w oparciu do bieżącego użycia
pamięci i pamięci wymiany. Na przykład zadanie
używające całą dozwoloną
pamięć otrzyma wynik 1000, a jeśli użyje
połowę dozwolonej pamięci, otrzyma wynik 500.
Dodatkowym czynnikiem w wyniku "badness" jest fakt,
że procesy roota mają dodatkowe 3% pamięci w
stosunku do pozostałych procesów.
Wielkość "dozwolonej" pamięci
zależy od kontekstu w jakim wywołano OOM-killera.
Jeśli wynika to z faktu, że pamięć
przeznaczona dla zadania alokującego cpuset została
wyczerpany, to dozwolona pamięć odpowiada zestawowi
pamięci przypisanego do tego cpuset (zobacz cpuset(7)).
Jeśli jest to skutek zasad dot. pamięci
węzła (lub węzłów), to dozwolona
pamięć odpowiada zestawowi tych zasad. Jeśli wynika
to z faktu, że osiągnięto limit pamięci (lub
pamięci wymiany) to dozwolona pamięć jest tak
ustawionym limitem. Gdy wynika to z sytuacji braku pamięci, to
dozwolona pamięć odpowiada wszystkich zaalokowanych
zasobom.
Wartość oom_score_adj jest dodawana do
wyniku "badness" przed użyciem jej do wybrania procesu
przeznaczonego do zabicia. Dozwolone wartości wynoszą od
-1000 (OOM_SCORE_ADJ_MIN) do +1000 (OOM_SCORE_ADJ_MAX). Pozwala to
przestrzeni użytkownika na kontrolę preferencji
OOM-killing. Można w ten sposób zawsze preferować
dane zadanie lub całkowicie wyłączyć je z
procesu OOM-killing. Najniższa dostępna
wartość (-1000) jest równoznaczna z
całkowitym wyłączeniem OOM-killing dla danego
zadania, ponieważ zawsze zwróci ono wynik
"badness" równy 0.
Z tego względu łatwo jest zdefiniować
wielkość pamięci dla każdego zadania przez
przestrzeń użytkownika. Ustawienie wartości
oom_score_adj np. na +500 jest w przybliżeniu
odpowiednikiem pozwolenia pozostałym zadaniom w tym samym
systemie, cpuset, zasadom dot. pamięci i zasobom kontrolera
pamięci na użycie co najmniej 50% pamięci
więcej. Z kolei wartość -500 odpowiada mniej
więcej zmniejszeniu o 50% dozwolonej pamięci.
Z powodu zgodności wstecznej ze starszymi
jądrami do modyfikacji wyniku "badness"
wciąż można używać
/proc/[pid]/oom_adj. Jego wartość skaluje
się liniowo z oom_score_adj.
Zapis do /proc/[pid]/oom_score_adj lub
/proc/[pid]/oom_adj zmieni zapis w drugim pseudopliku na
przeskalowaną odpowiednio wartość.
- /proc/[pid]/pagemap (od Linuksa 2.6.25)
- Plik pokazuje przypisanie każdej z wirtualnych stron procesu do
ramki fizycznej strony lub przestrzeni wymiany. Zawiera jedną
wartość 64-bitową na każdą
stronę wirtualną, bity oznaczają:
- 63
- Jeśli jest ustawione, strona jest obecna w pamięci RAM.
- 62
- Jeśli jest ustawione, strona jest obecne w pamięci wymiany
(swap)
- 61 (od Linuksa 3.5)
- Strona jest stroną przypisaną do pliku lub
dzieloną stroną anonimową.
- 60-56 (od Linuksa 3.11)
- Zero
- 55 (od Linuksa 3.11)
- PTE jest soft-dirty (więcej informacji w pliku w
źródłach jądra:
Documentation/vm/soft-dirty.txt).
- 54-0
- Jeśli strona jest obecna w pamięci RAM (bit 63), to te bity
udostępniają numer ramki strony, który można
użyć z indeksem /proc/kpageflags i
/proc/kpagecount. Jeśli strona jest obecna w pamięci
wymiany (bit 62), to bity 4-0 informują o typie pamięci
wymiany, a bity 54-5 kodują przesunięcie pamięci
wymiany.
- Przed Linuksem 3.11 bity 60-55 kodowały logarytm dwójkowy
informujący o rozmiarze strony.
- Aby efektywnie wykorzystać /proc/[pid]/pagemap należy
użyć /proc/[pid]/maps do określenia
które obszary pamięci zostały rzeczywiście
przypisane i móc przejść między
nieprzypisanymi obszarami.
- Plik /proc/[pid]pagemap istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/personality (od Linuksa 2.6.28)
- Plik tylko do odczytu pokazuje domenę uruchamiania procesu
ustawioną przez personality(2). Wartość
wyświetlana jest w zapisie szesnastkowym.
- /proc/[pid]/root
- UNIX i Linux wspierają pomysł określonego dla
każdego procesu osobno katalogu głównego systemu
plików, ustawianego przez wywołanie systemowe
chroot(2). Plik ten wskazuje na katalog główny
systemu plików i zachowuje się w ten sam sposób jak
exe, fd/*, itp.
W procesie wielowątkowym zawartość tego
linku symbolicznego nie jest dostępna, jeżeli wątek
główny już się zakończył
(zazwyczaj przez wywołanie pthread_exit(3)).
- /proc/[pid]/seccomp (Linux w wersji od 2.6.12 do 2.6.22)
- Odczytuje/ustawia tryb seccomp procesu. Jeśli ten plik zawiera
wartość zero, tryb seccomp nie jest włączany.
Zapis wartości 1 do pliku (nieodwracalnie) umieszcza proces w
trybie seccomp, jedynymi dozwolonymi wywołaniami systemowymi
są read(2), write(2), _exit(2) i
sigreturn(2). Plik ten zniknął wraz z Linuksem
2.6.23, gdy został zastąpiony mechanizmem
działającym w oparciu o prctl(2).
- /proc/[pid]/setgroups (od Linuksa 3.19)
- Zob. user_namespaces(7).
- /proc/[pid]/smaps (od Linuksa 2.6.14)
- Plik ten pokazuje zużycie pamięci dla każdego
mapowania procesu (polecenie pmap(1) wyświetla podobne
informacje, w postaci która może
być łatwiejsza do przetwarzania). Dla każdego
takiego mapowania pokazana jest lista następujących linii:
00400000-0048a000 r-xp 00000000 fd:03 960637 /bin/bash
Size: 552 kB
Rss: 460 kB
Pss: 100 kB
Shared_Clean: 452 kB
Shared_Dirty: 0 kB
Private_Clean: 8 kB
Private_Dirty: 0 kB
Referenced: 460 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
Pierwsza z tych linii pokazuje te same informacje o mapowaniach, co w
/proc/[pid]/maps. Pozostałe linie zawierają rozmiar
mapowania, ilość mapowań obecnych w RAM
("Rss"), proporcjonalny udział w tym mapowaniu
("Pss"), liczbę czystych i brudnych stron
współdzielonych w mapowaniu oraz liczbę czystych i
brudnych prywatnych stron w mapowaniu. "Referenced" oznacza
pamięć która jest oznaczona jako pamięć
do której ktoś odnosi się lub uzyskuje dostęp.
"Anonymous" pokazuje pamięć
nienależącą do żadnego pliku.
"Swap" pokazuje jak dużo pamięci która
byłaby anonimowa jest również używana,
lecz w pamięci wymiany.
Wpis "KernelPageSize" jest rozmiarem strony
używanym przez jądro do VMA. Jest on w
większości przypadków takim sam, jak rozmiar
używany przez MMU. Wyjątek występuje na
jądrach PPC64, gdy jądro korzystając z podstawowego
rozmiaru strony w wielkości 64K może wciąż
używać 4K stron dla MMU na starszych procesorach. Aby to
rozróżnić, ta łatka raportuje
"MMUPageSize" jako rozmiar strony używany przez
MMU.
"Locked" wskazuje, czy mapowanie jest zablokowane w
pamięci czy nie.
Pole "VmFlags" reprezentuje flagi jądra
związane z danych obszarem pamięci wirtualnej (VMA)
zakodowanym w dwuliterowym symbolu. Oto kody:
rd - odczytywalna (readable)
wr - zapisywalna (writable)
ex - wykonywalna (executable)
sh - dzielona (shared)
mr - może odczytać (may read)
mw - może zapisać (may write)
me - może wykonać (may execute)
ms - może dzielić (may share)
gd - segment stosu rośnie w dół (grows down)
pf - czysty przedział PFG (pure PFN)
dw - wyłączony zapis do zmapowanego pliku (disabled write)
lo - strony zablokowane w pamięci (locked)
io - pamięć zmapowana przestrzeni we/wy (I/O)
sr - udostępniono wskazówkę sekwencyjnego odczytu
(sequential read)
rr - udostępniono wskazówkę losowego odczytu (random
read)
dc - nie kopiuj przestrzeni przy forkowaniu (do not copy)
de - nie rozszerzaj przestrzeni przy przemapowaniu
(do not expand)
ac - przestrzeń jest policzalna (area is accountable)
nr - przestrzeń wymiany niezarezerwowana dla tej
przestrzeni (not reserved)
ht - przestrzeń używa dużych stron tlb (huge tlb)
nl - mapowanie nieliniowe (non-linear)
ar - flaga charakterystyczna dla architektury
dd - nie włączaj przestrzeni do zrzutu jądra (do not
dump)
sd - flaga soft-dirty
mm - przestrzeń mieszanego mapowania
hg - flaga wskazówki dużych stron (huge)
nh - flaga wskazówki stron niebędących dużymi
(no-huge)
mg - flaga wskazówki łączenia (mergeable)
Plik /proc/[pid]/smaps istnieje tylko jeśli
podczas kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/stack (od Linuksa 2.6.29)
- Plik zapewnia symboliczny ślad wywołania funkcji w tym
stosie jądra dla procesu. Plik istnieje, jeśli jądro
zostało zbudowane z włączoną opcją
konfiguracji CONFIG_STACKTRACE.
- /proc/[pid]/stat
- Informacje o stanie procesu. Korzysta z tego ps(1). Są one
zdefiniowane w pliku źródeł jądra
fs/proc/array.c.
Kolejne pola i ich właściwe specyfikatory
formatu scanf(3) to:
- (1) pid %d
-
Identyfikator procesu (PID).
- (2) comm %s
- Nazwa pliku wykonywalnego w nawiasach. Widać, czy plik uległ
wymianie.
- (3) state %c
- Jeden z poniższych znaków, wskazujących na status
procesu:
- R
- Działający (Running)
- S
- Śpiący (Sleeping) w przerywalnym oczekiwaniu
- D
- Śpiący w nieprzerywalnym oczekiwaniu dyskowym
- Z
- Zombie
- T
- Zatrzymany sygnałem lub (przed Linuksem 2.6.33) zatrzymany
ślad (trace stopped)
- t
- Zatrzymany śledzeniem (tracing stop) - Linux 2.6.33 i
nowszy
- W
- Stronicowanie (tylko przed Linuksem 2.6.0)
- X
- Martwy (od Linuksa 2.6.0)
- x
- Martwy (między Linuksem 2.6.33 a 3.13)
- K
- Wakekill - oczekiwanie; wybudzenie przy śmiertelnym sygnale
(między Linuksem 2.6.33 a 3.13)
- W
- Budzący się (między Linuksem 2.6.33 a 3.13)
- P
- Zaparkowany (między Linuksem 3.9 a 3.13)
- (4) ppid %d
- PID procesu macierzystego tego procesu.
- (5) pgrp %d
- Identyfikator grupy procesów danego procesu.
- (6) session %d
- Identyfikator sesji procesu.
- (7) tty_nr %d
- Kontroluje terminal procesu (poboczny numer urządzenia jest
przechowywany w kombinacji bitów 31 do 20 i 7 do 0, natomiast
główny numer urządzenia jest w bitach 15 do 8).
- (8) tpgid %d
- Identyfikator grupy procesów pierwszoplanowych
kontrolującego terminala procesu.
- (9) flags %u
- Słowo flag jądra dla danego procesu. Znaczenie
poszczególnych bitów określają definicje PF_*
w pliku źródeł jądra Linux
include/linux/sched.h. Szczegóły zależą
od wersji jądra.
Format tego pola przed Linuksem 2.6 miał postać
%lu.
- (10) minflt %lu
- Liczba drobnych błędów, które
popełnił proces, a które nie wymagały
załadowania strony pamięci z dysku.
- (11) cminflt %lu
- Liczba drobnych błędów procesów
potomnych.
- (12) majflt %lu
- Liczba głównych błędów, które
popełnił proces, a które wymagały
załadowania strony pamięci z dysku.
- (13) cmajflt %lu
- Liczba głównych błędów procesów
potomnych.
- (14) utime %lu
- Czas jaki został przydzielony procesowi w trybie
użytkownika, mierzony w taktach zegara (podzielonych przez
sysconf(_SC_CLK_TCK)). Obejmuje to czas gościa,
guest_time (czas spędzony w czasie działania
wirtualnego CPU, patrz niżej), tak więc aplikacje,
które nie wiedzą o polu czasu gościa nie tracą
tego czasu ze swych obliczeń.
- (15) stime %lu
- Czas, jaki został przydzielony procesowi w trybie jądra,
mierzony w taktach zegara (podzielonych przez
sysconf(_SC_CLK_TCK)).
- (16) cutime %ld
- Czas, jaki został przydzielony procesom potomnym tego procesu w
stanie waited-for w trybie użytkownika, mierzony w taktach zegara
(podzielonych przez sysconf(_SC_CLK_TCK)), patrz także
times(2)). Obejmuje to czas gościa, cguest_time (czas
spędzony działając na procesorze wirtualnym, patrz
niżej).
- (17) cstime %ld
- Czas, jaki został przydzielony procesom potomnym tego procesu w
stanie waited-for w trybie jądra, mierzony w taktach zegara
(podzielonych przez sysconf(_SC_CLK_TCK).
- (18) priority %ld
- (Wyjaśnienie dla Linuksa 2.6) W przypadku procesów
działających z zasadami planisty czasu rzeczywistego
(policy poniżej; patrz sched_setscheduler(2)), jest
to liczba przeciwna w stosunku do priorytetu planisty minus jeden, tzn.
jest to zakres -2 do -100 odpowiadający priorytetom czasu
rzeczywistego od 1 do 99. W przypadku procesów nie
działających według tych zasad, jest to surowa
wartość nice (setpriority(2) zgodna z podaną
przez jądro. Jądro przechowuje wartości nice jako
liczby w zakresie od 0 (wysoki) do 39 (niski), co odpowiada widocznemu dla
użytkownika zakresowi nice od -20 do 19.
Przed Linuksem 2.6 była to wartość
skalowana w oparciu o wagę jaką planista przypisał
do danego procesu.
- (19) nice %ld
- Wartość "nice" (patrz setpriority(2))
zawierająca się w zakresie od 19 (niski priorytet) do -20
(wysoki priorytet).
- (20) num_threads %ld
- Liczba wątków procesu (od Linuksa 2.6). Przed jądrem
2.6 to pole miało przydzieloną na sztywno
wartość 0, jako wypełniacz do usuniętego
wcześniej pola.
- (21) itrealvalue %ld
- Czas w jiffies poprzedzający wysłanie przez czasomierz do
procesu następnego sygnału SIGALRM. Od jądra
2.6.17, to pole nie jest dłużej utrzymywane i ma
ustawioną na sztywno wartość 0.
- (22) starttime %llu
- Czas w jakim proces uruchomił się po rozruchu systemu.
Jądra Linux przed wersją 2.6 wyrażają
tę wartość w tzw. "jiffies". Od Linuksa 2.6
wartość jest wyrażana w taktach zegara (podzielonych
przez sysconf(_SC_CLK_TCK)).
Format tego pola przed Linuksem 2.6 miał postać
%lu.
- (23) vsize %lu
- Rozmiar pamięci wirtualnej w bajtach.
- (24) rss %ld
- Resident Set Size: liczba stron, które proces ma w rzeczywistej
pamięci. Są to po prostu strony, które
obejmują segment text, segment data i przestrzeń stosu. Nie
obejmuje to stron, które nie były ładowane na
żądanie lub które uległy wymianie.
- (25) rsslim %lu
- Aktualne miękkie ograniczenie rss procesu w bajtach; patrz opis
RLIMIT_RSS w getrlimit(2).
- (26) startcode %lu
- Adres, pod którym zaczyna się kod programu.
- (27) endcode %lu
- Adres, pod którym kończy się kod programu.
- (28) startstack %lu
- Adres początku (tzn. spód) stosu.
- (29) kstkesp %lu
- Bieżąca wartość ESP (wskaźnika stosu),
określona na podstawie strony stosu jądra dla danego
procesu.
- (30) kstkeip %lu
- Aktualny EIP (wskaźnik instrukcji).
- (31) signal %lu
- Maska bitowa oczekujących sygnałów,
wyświetlana jako liczba dziesiętna. Przestarzałe,
ponieważ nie dostarcza informacji o sygnałach czasu
rzeczywistego; prosimy używać /proc/[pid]/status
zamiast tego pliku.
- (32) blocked %lu
- Maska bitowa zablokowanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (33) sigignore %lu
- Maska bitowa ignorowanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (34) sigcatch %lu
- Maska bitowa schwytanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (35) wchan %lu
- Jest to "kanał" na którym oczekuje proces. Jest to
adres położenia w jądrze, gdzie proces jest w
uśpieniu. Powiązaną nazwę symboliczną
można znaleźć w /proc/[pid]/wchan.
- (36) nswap %lu
- Liczba stron, które uległy wymianie (nieutrzymywane).
- (37) cnswap %lu
- Łączna wartość nswap dla
procesów potomnych (nieutrzymywane).
- (38) exit_signal %d (od Linuksa 2.1.22)
- Sygnał wysyłany przez ginący proces do jego procesu
macierzystego.
- (39) processor %d (od Linuksa 2.2.8)
- Numer CPU, na którym proces ostatnio działał.
- (40) rt_priority %u (od Linuksa 2.5.19)
- Priorytet planisty czasu rzeczywistego, liczba w zakresie od 1 do 99 do
procesów przydzielanych według zasad czasu rzeczywistego lub
0 do procesów nie czasu rzeczywistego (patrz
sched_setscheduler(2)).
- (41) policy %u (od Linuksa 2.5.19)
- Polityka przydzielania zadaniom czasu procesora (patrz
sched_setscheduler(2)). Dekodowana używając
stałych SCHED_* w linux/sched.h.
Format tego pola przed Linuksem 2.6.22 miał
postać %lu.
- (42) delayacct_blkio_ticks %llu (od Linuksa
2.6.18)
- Sumaryczna zwłoka bloków wejścia/wyjścia,
mierzona w taktach zegara (centysekundy).
- (43) guest_time %lu (od Linuksa 2.6.24)
- Czas gościa procesu (czas, jaki upłynął
podczas działania na wirtualnym procesorze systemu operacyjnego
gościa), mierzony w taktach zegara (podzielony przez
sysconf(_SC_CLK_TCK)
- (44) cguest_time %ld (od Linuksa 2.6.24)
- Czas gościa potomków procesu, mierzony w taktach zegara
(podzielony przez sysconf(_SC_CLK_TCK)).
- (45) start_data %lu (od Linuksa 3.3)
- Adres powyższej którego umieszczane są zainicjowane i
niezainicjowane (BSS) dane programu.
- (46) end_data %lu (od Linuksa 3.3)
- Adres poniżej którego umieszczane są zainicjowane i
niezainicjowane (BSS) dane programu.
- (47) start_brk %lu (od Linuksa 3.3)
- Adres, powyżej którego można
rozciągnąć kopiec (ang. heap) za
pomocą brk(2).
- (48) arg_start %lu (od Linuksa 3.5)
- Adres powyżej którego umieszczane są argumenty
wiersza polecenia programu (argv).
- (49) arg_end %lu (od Linuksa 3.5)
- Adres poniżej którego umieszczane są argumenty
wiersza polecenia programu (argv).
- (50) env_start %lu (od Linuksa 3.5)
- Adres powyżej którego umieszczane jest środowisko
programu.
- (51) env_end %lu (od Linuksa 3.5)
- Adres poniżej którego umieszczane jest środowisko
programu.
- (52) exit_code %d (od Linuksa 3.5)
- Kod zakończenia wątku w postaci przekazywanej przez
waitpid(2).
- /proc/[pid]/statm
- Udostępnia informacje o użyciu pamięci, mierzone w
stronach. Występują następujące kolumny:
size (1) łączny rozmiar programu
(taki sam jak VmSize w /proc/[pid]/status)
resident (2) rozmiar części rezydentnej
(taki sam jak VmRSS w /proc/[pid]/status)
share (3) strony wspólne (tzn. obecne w pliku)
text (4) tekst (kod)
lib (5) biblioteki (nieużywane w Linuksie 2.6)
data (6) dane i stos
dt (7) strony nieaktualne (dirty; nieużywane w Linuksie 2.6)
- /proc/[pid]/status
- Udostępnia sporo informacji ze /proc/[pid]/stat i
/proc/[pid]/statm w postaci łatwiejszej do przeanalizowania
przez człowieka. Oto przykład:
$ cat /proc/$$/status
Name: bash
State: S (sleeping)
Tgid: 3515
Pid: 3515
PPid: 3452
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 100 100 100 100
FDSize: 256
Groups: 16 33 100
VmPeak: 9136 kB
VmSize: 7896 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 7572 kB
VmRSS: 6316 kB
VmData: 5224 kB
VmStk: 88 kB
VmExe: 572 kB
VmLib: 1708 kB
VmPMD: 4 kB
VmPTE: 20 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/3067
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
CapAmb: 0000000000000000
Seccomp: 0
Cpus_allowed: 00000001
Cpus_allowed_list: 0
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 150
nonvoluntary_ctxt_switches: 545
- Występują następujące pola:
- Name: Polecenie uruchomione przez ten proces.
- State: Bieżący stan procesu. Jeden z: "R
(running)", "S (sleeping)", "D (disk sleep)",
"T (stopped)", "T (tracing stop)", "Z
(zombie)", or "X (dead)".
- Tgid: identyfikator grupy wątku (np. identyfikator
procesu).
- Pid: identyfikator wątku (patrz gettid(2)).
- PPid: PID procesu macierzystego.
- TracerPid: PID procesu śledzącego ten proces (0 gdy
nie jest śledzony).
- Uid, Gid: UID (GID): realny, efektywny, zapisany oraz
systemu plików.
- FDSize: Liczba slotów aktualnie przydzielonych
deskryptorów plików.
- Groups: Uzupełniająca lista grup.
- VmPeak: Szczytowy rozmiar pamięci wirtualnej.
- VmSize: Rozmiar pamięci wirtualnej.
- VmLck: Rozmiar pamięci zablokowanej (patrz
mlock(3)).
- VmPin: Rozmiar pamięci przypiętej (od Linuksa 3.2).
Są to strony które nie mogą
być przeniesione, ponieważ coś wymaga
bezpośredniego dostępu pamięci fizycznej.
- VmHWM: Szczytowy ustawiony rozmiar rezydentny ("high water
mark").
- VmRSS: Ustawiony rozmiar rezydentny.
- VmData, VmStk, VmExe: Rozmiar segmentów
danych, stosu i tekstu.
- VmLib: Rozmiar kodu biblioteki współdzielonej.
- VmPTE: Rozmiar wpisów tablicy strony (od Linuksa
2.6.10).
- VmPMD: Rozmiar tabel stron drugiego poziomu (od Linuksa 4.0)
- VmSwap: Rozmiar pamięci wirtualnej przeniesionej do
pamięci wymiany, podany jako anonimowe strony prywatne;
pamięć wymiany shmem nie jest ujęta (od Linuksa
2.6.34).
- Threads: Liczba wątków w procesie
zawierających ten wątek.
- SigQ: Pole zawiera dwie liczby oddzielone ukośnikiem,
które odnoszą się do skolejkowanych
sygnałów do realnego identyfikatora użytkownika tego
procesu. Pierwsza jest liczbą aktualnie skolejkowanych
sygnałów do tego realnego identyfikatora użytkownika,
a druga jest limitem zasobów liczby skolejkowanych
sygnałów do tego procesu (patrz opis
RLIMIT_SIGPENDING w getrlimit(2)).
- SigPnd, ShdPnd: Liczba sygnałów
oczekujących na wątek i na proces jako
całość (patrz pthreads(7) i
signal(7)).
- SigBlk, SigIgn, SigCgt: Maski oznaczające
zablokowane, zignorowane i przechwycone sygnały (patrz
signal(7)).
- CapInh, CapPrm, CapEff: Maski
możliwości, włączonych w zestawach
dziedziczonych (inheritable), dozwolonych (permitted) i efektywnych
(effective) (patrz capabilities(7)).
- CapBnd: Zestaw możliwości ograniczających
(capability bounding set) (od Linuksa 2.6.26, patrz
capabilities(7)).
- CapAmb: Zestaw przywileju ambient (od Linuksa 4.3, zob.
capabilities(7)).
- Seccomp: Tryb procesu seccomp (od Linuksa 3.8, zob.
seccomp(2)). 0 oznacza SECCOMP_MODE_DISABLED; 1 oznacza
SECCOMP_MODE_STRICT; 2 oznacza SECCOMP_MODE_FILTER. Pole to
jest udostępnione tylko gdy jądro zbudowano z
włączoną opcją konfiguracyjną
CONFIG_SECCOMP.
- Cpus_allowed: Maska procesorów, na których proces
może być uruchomiony (od Linuksa 2.6.24, patrz
cpuset(7)).
- Cpus_allowed_list: Jak wyżej, ale w "formacie
listy" (od Linuksa 2.6.26, patrz cpuset(7)).
- Mems_allowed: Maska węzłów pamięci,
dozwolonych dla tego procesu (od Linuksa 2.6.24, patrz
cpuset(7)).
- Mems_allowed_list: Jak wyżej, ale w "formacie
listy" (od Linuksa 2.6.26, patrz cpuset(7)).
- voluntary_ctxt_switches, nonvoluntary_ctxt_switches: Liczba
dobrowolnych i przymusowych przełączeń kontekstu (od
Linuksa 2.6.23).
- /proc/[pid]/syscall (od Linuksa 2.6.27)
- Plik udostępnia numer wywołania systemowego i rejestr
argumentu dla aktualnie wykonywanego przez proces wywołania
systemowego, po którym następują wartości
wskaźnika stosu i rejestry liczników programu.
Udostępnianych jest wszystkie sześć rejestrów
argumentu, choć większość
wywołań systemowych używa mniejszej liczby
rejestrów.
Jeśli proces jest zablokowany, lecz nie w
wywołaniu systemowym, to plik zawiera wartość -1 w
miejscu numeru wywołania systemowego, po którym
następują wartości wskaźnika stosu i
licznika programu. Jeśli proces nie jest zablokowany, to plik
zawiera łańcuch "running".
Obecne tylko, jeśli jądro zostało
skonfigurowane z CONFIG_HAVE_ARCH_TRACEHOOK.
- /proc/[pid]/task (od Linuksa 2.6.0-test6)
- Jest to katalog zawierający po jednym podkatalogu dla
każdego wątku procesu. Nazwą każdego
podkatalogu jest numeryczne ID ([tid]) wątku (patrz
gettid(2)). Każdy z podkatalogów zawiera zbiór
plików o tej samej nazwie i zawartości, co katalogi
/proc/[pid]. Dla atrybutów, które są
współdzielone przez wszystkie wątki
zawartość każdego z plików w podkatalogach
task/[tid] będzie taka sama jak zawartość
odpowiednich plików w nadrzędnym katalogu /proc/[pid]
(np. w procesie wielowątkowym wszystkie pliki task/[tid]/cwd
będą miały taką samą
zawartość, jak plik /proc/[pid]/cwd w katalogu
nadrzędnym, ponieważ wszystkie wątki procesu
dzielą katalog bieżący). Dla atrybutów,
które dla każdego wątku są
różne, odpowiednie pliki wtask/[tid] mogą
mieć różne wartości (np. różne
pola w każdym z plików task/[tid]/status mogą
być inne dla każdego wątku).
W procesie wielowątkowym zawartość
katalogu /proc/[pid]/task nie jest dostępna, jeżeli
wątek główny już się
zakończył (najprawdopodobniej wywołując
pthread_exit(3)).
- /proc/[pid]/timers (od Linuksa 3.10)
- Lista liczników czasu POSIX dla procesu. Każdy licznik jest
wypisany w wierszu, który rozpoczyna się
łańcuchem "ID:". Na przykład:
ID: 1
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 0
ID: 0
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 1
Wiersze dla każdego licznika mają
następujące znaczenie:
- ID
- Identyfikator danego licznika czasu. Nie jest to ten sam identyfikator, co
ten zwracany przez timer_create(2), lecz jest to
wewnątrzjądrowy identyfikator dostępny
również za pomocą pola si_timerid struktury
siginfo_t (zob. sigaction(2)).
- signal
- Numer sygnału używany przez dany licznik do dostarczania
powiadomień, po którym następuje ukośnik a
następnie wartość sigev_value dostarczana do
obsługiwacza sygnału. Poprawne jedynie dla liczników
powiadamiających za pomocą sygnału.
- notify
- Część przed ukośnikiem określa
mechanizm używany przez dany licznik czasu do dostarczania
powiadomień, który jest jedną z wartości
"thread" (wątek), "signal" (sygnał) lub
"none" (brak). Zaraz po ukośniku znajduje się
łańcuch "tid" dla liczników z
powiadomieniami SIGEV_THREAD_ID lub "pid" dla
liczników z innymi mechanizmami powiadamiania. Po "."
znajduje się PID procesu (lub identyfikator wątku
jądra tego wątku) któremu będzie dostarczany
sygnał, jeśli licznik czasu powiadamia za pomocą
sygnału.
- ClockID
- Pole identyfikuje zegar, którego dany licznik czasu używa do
pomiaru czasu. W większości zegarów jest to liczba
która pasuje do jednej ze stałych CLOCK_* w
przestrzeni użytkownika udostępnianych za pomocą
<time.h>. Liczniki CLOCK_PROCESS_CPUTIME_ID
wyświetlają tu wartość -6, natomiast
CLOCK_THREAD_CPUTIME_ID wyświetlają
wartość -2.
- Plik ten jest dostępny tylko jeśli jądro
skonfigurowano z CONFIG_CHECKPOINT_RESTORE.
- /proc/[pid]/uid_map, /proc/[pid]/gid_map (od Linuksa
3.5)
- Zob. user_namespaces(7).
- /proc/[pid]/wchan (od Linuksa 2.6.0)
- Nazwa symboliczna odnosząca się do położenia,
gdzie proces jest w uśpieniu.
- /proc/apm
- Wersja APM (Zaawansowane zarządzanie energią) oraz
informacja o akumulatorach, gdy CONFIG_APM było zdefiniowane
podczas kompilacji jądra.
- /proc/buddyinfo
- Plik ten zawiera informacje używane do diagnozowania
problemów z fragmentacją pamięci. Każdy
wiersz zaczyna się identyfikatorem węzła i
nazwą strefy które razem identyfikują region
pamięci. Następnie znajduje się liczba
dostępnych fragmentów określonego rzędu, w
jakim te regiony są podzielone. Rozmiar w bajtach
określonego rzędu jest podany według wzoru:
(2^rząd) * ROZMIAR_STRONY
Algorytm alokacji bliźniaków (ang. buddy)
wewnątrz jądra podzieli jeden fragment na dwa fragmenty
mniejszego rzędu (a więc dwukrotnie mniejsze) lub
połączy dwa ciągłe fragmenty w jeden
fragment wyższego rzędu (a więc dwukrotnie
większy) aby zaspokoić żądanie alokacji i
przeciwdziałać fragmentacji pamięci. Rząd
pasuje do numeru kolumny, zaczynając liczenie od zera.
Na przykład w systemie x86_64:
Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
W tym przykładzie jest jeden węzeł
zawierający trzy strefy i 11 fragmentów o
różnych rozmiarach. Jeśli rozmiar strony wynosi 4
kilobajty, to pierwsza strefa, nazywana DMA (na x86 jest to
pierwszych 16 megabajtów pamięci), ma dostępny
m.in. jeden fragment o rozmiarze 4 kilobajtów (rząd 0) i 3
fragmenty o rozmiarze 4 megabajtów (rząd 10).
Jeśli pamięć jest mocno pofragmentowana,
liczniki dla fragmentów wyższego rzędu
wyniosą zero, a przydzielenie większych,
ciągłych powierzchni nie powiedzie się.
Więcej informacji o strefach można
znaleźć w /proc/zoneinfo.
- /proc/bus
- Zawiera podkatalogi odpowiadające zainstalowanym magistralom.
- /proc/bus/pccard
- Podkatalog dla urządzeń PCMCIA, gdy CONFIG_PCMCIA
było zdefiniowane podczas kompilacji jądra.
- /proc/bus/pccard/drivers
- /proc/bus/pci
- Zawiera różne podkatalogi magistral oraz pseudopliki
zawierające informacje o magistralach PCI, zainstalowanych
urządzeniach oraz sterownikach urządzeń.
Niektóre z tych plików nie są w postaci ASCII.
- /proc/bus/pci/devices
- Informacje o urządzeniach PCI. Dostęp do nich może
się odbywać poprzez lspci(8) i setpci(8).
- /proc/cmdline
- Argumenty przekazane jądru Linux podczas startu systemu. Zazwyczaj
odbywa się to poprzez zarządcę startu systemu,
takiego jak lilo(8) lub grub(8).
- /proc/config.gz (od Linuksa 2.6)
- Plik pokazuje opcje konfiguracyjne, które były użyte
do zbudowania aktualnie działającego jądra, w tym
samym formacie, jaki jest używany przez plik .config,
który jest wynikiem konfiguracji jądra
(używając make xconfig, make config i
podobnych poleceń). Zawartość pliku jest
skompresowana; można ją odczytać lub wyszukać
za pomocą zcat(1) i zgrep(1). Tak długo jak
nie zostały dokonane zmiany w poniższym pliku,
zawartość /proc/config.gz jest taka sama jak ta
udostępniona przez:
cat /lib/modules/$(uname -r)/build/.config
- /proc/config.gz jest udostępniany wyłącznie
wtedy, gdy jądro jest skonfigurowane z
CONFIG_IKCONFIG_PROC.
- /proc/crypto
- Lista szyfrów udostępnianych przez API szyfrowania
jądra. Więcej szczegółów znajduje
się w dokumentacji jądra Linux Kernel Crypto
API dostępnej w katalogu źródeł
jądra Documentation/DocBook (można ją
zbudować np. poleceniem make htmldocs wydanym w
głównym katalogu drzewa źródeł
jądra).
- /proc/cpuinfo
- Jest to zbiór elementów zależnych od CPU i
architektury systemu; dla każdej wspieranej architektury jest inna
lista. Dwa popularne wpisy to: processor, który
udostępnia numer CPU oraz bogomips; jest to stała
systemowa, wyliczona podczas inicjalizacji jądra. Maszyny SMP
zawierają informacje o każdym z procesorów. Polecenie
lscpu(1) zbiera ich informacje z tego pliku.
- /proc/devices
- Listing tekstowy numerów głównych oraz grup
urządzeń. Może to służyć
skryptom MAKEDEV do zachowania spójności z
jądrem.
- /proc/diskstats (od wersji Linuksa 2.5.69)
- Plik zawiera statystyki operacji wejścia/wyjścia dla
każdego urządzenia dyskowego. Dalsze informacje można
znaleźć w pliku Documentation/iostats.txt w
źródłach jądra Linux.
- /proc/dma
- Jest listą zarejestrowanych i używanych
kanałów DMA (direct memory access) szyny ISA.
- /proc/driver
- Pusty podkatalog.
- /proc/execdomains
- Lista domen uruchamiania (wcieleń ABI [Application Binary Interface
- przyp. tłum.]).
- /proc/fb
- Informacje o buforze ramki, o ile podczas kompilacji jądra
zdefiniowano CONFIG_FB.
- /proc/filesystems
- Tekstowa lista systemów plików obsługiwanych przez
jądro, a konkretnie systemów plików, które
zostały wkompilowane w jądro lub których
moduły jądra są obecnie załadowane (patrz
również filesystems(5)). Jeśli system
plików jest oznaczony jako "nodev" oznacza to, że
nie wymaga on zamontowania urządzenia blokowego (np. jest to
wirtualny lub sieciowy system plików).
Plik ten może być niekiedy użyty przez
mount(8), gdy nie podano systemów plików i nie
potrafi on określić typu systemu plików.
Próbowane są wówczas systemy plików wypisane
w tym pliku (poza systemami z oznaczeniem "nodev").
- /proc/fs
- Zawiera podkatalogi, które w kolejności zawierają
pliki z informacjami o (pewnych) zamontowanych systemach
plików.
- /proc/ide
- Katalog ten istnieje w systemach zawierających magistralę
IDE. Zawiera po jednym katalogu dla każdego kanału IDE oraz
dla przyłączonych urządzeń.
Wśród plików są:
cache rozmiar bufora w KB
capacity liczba sektorów
driver wersja sterownika
geometry geometria fizyczna i logiczna
identify szesnastkowo
media rodzaj nośnika
model numer modelu producenta
settings ustawienia napędu
smart_thresholds szesnastkowo
smart_values szesnastkowo
Dostęp do tych informacji w przyjaznym formacie
umożliwia program narzędziowy hdparm(8).
- /proc/interrupts
- Plik jest używany do zapisania liczby przerwań na procesor
na urządzenie wejścia/wyjścia. Od Linuksa 2.6.24,
przynajmniej do architektur i386 i x86_64 zawiera on również
przerwania wewnętrznosystemowe (to znaczy nie związane z
urządzeniem jako takim), takie jak NMI (nonmaskable interrupt), LOC
(local timer interrupt) i do systemów SMP: TLB (TLB flush
interrupt), RES (rescheduling interrupt), CAL (remote function call
interrupt), mogą również występować
inne. Formatowanie jest bardzo czytelne do odczytu, wykonane w ASCII.
- /proc/iomem
- Odwzorowanie portów we/wy w pamięci w Linuksie 2.4.
- /proc/ioports
- Jest to lista obecnie zarejestrowanych i używanych obszarów
portów we/wy.
- /proc/kallsyms (od wersji Linuksa 2.5.71)
- Zawiera wyeksportowane przez jądro definicje symboli, które
są używane przez narzędzia modules(X) do
dynamicznego podłączania ładowanych
modułów. W wersji jądra Linux 2.5.47 i
wcześniejszych podobny plik z troszkę odmienną
zawartością był nazwany ksyms.
- /proc/kcore
- Plik ten reprezentuje pamięć fizyczną systemu i jest
zachowany w formacie pliku core dla ELF. Korzystając z tego
pseudopliku oraz z niezestripowanego binarnego pliku jądra
(/usr/src/linux/vmlinux), można za pomocą GDB
testować aktualny stan dowolnej struktury danych jądra.
Całkowity rozmiar tego pliku to rozmiar fizycznej
pamięci (RAM) plus 4 KB.
- /proc/kmsg
- Plik ten może służyć do odczytu
komunikatów jądra, zamiast funkcji systemowej
syslog(2). Aby odczytać ten plik, proces musi mieć
uprawnienia superużytkownika i tylko jeden proces powinien
dokonywać jego odczytu. Pliku tego nie należy czytać,
gdy działa proces syslog, korzystający z funkcji systemowej
syslog(2) do rejestrowania komunikatów jądra.
Z tego pliku pobiera komunikaty program dmesg(1).
- /proc/kpagecount (od Linuksa 2.6.25)
- Plik zawiera 64-bitowy licznik wskazujący ile razy zmapowano
każdą z ramek strony fizycznej, indeksowaną numerem
ramki strony (zob. opis w /proc/[pid]/pagemap).
- Plik /proc/kpagecount istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/kpageflags (od Linuksa 2.6.25)
- Plik zawiera 64-bitowe maski odpowiadające każdej z ramek
strony fizycznej; indeksowanej numerem ramki strony (zob. opis w
/proc/[pid]/pagemap). Oto zestawienie poszczególnych
bitów:
0 - KPF_LOCKED
1 - KPF_ERROR
2 - KPF_REFERENCED
3 - KPF_UPTODATE
4 - KPF_DIRTY
5 - KPF_LRU
6 - KPF_ACTIVE
7 - KPF_SLAB
8 - KPF_WRITEBACK
9 - KPF_RECLAIM
10 - KPF_BUDDY
11 - KPF_MMAP (od Linuksa 2.6.31)
12 - KPF_ANON (od Linuksa 2.6.31)
13 - KPF_SWAPCACHE (od Linuksa 2.6.31)
14 - KPF_SWAPBACKED (od Linuksa 2.6.31)
15 - KPF_COMPOUND_HEAD (od Linuksa 2.6.31)
16 - KPF_COMPOUND_TAIL (od Linuksa 2.6.31)
16 - KPF_HUGE (od Linuksa 2.6.31)
18 - KPF_UNEVICTABLE (od Linuksa 2.6.31)
19 - KPF_HWPOISON (od Linuksa 2.6.31)
20 - KPF_NOPAGE (od Linuksa 2.6.31)
21 - KPF_KSM (od Linuksa 2.6.32)
22 - KPF_THP (od Linuksa 3.4)
Więcej informacji o znaczeniu tych bitów
znajduje się w pliku źródeł jądra
Documentation/vm/pagemap.txt. Przed wersją 2.6.29
jądra KPF_WRITEBACK, KPF_RECLAIM, KPF_BUDDY
i KPF_LOCKED nie były poprawnie zgłaszane.
- Plik /proc/kpageflags istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/ksyms (Linux 1.1.23-2.5.47)
- Patrz /proc/kallsyms.
- /proc/loadavg
- Pierwsze trzy pola w tym pliku zawierają średnie
obciążenie (loadavg) podając informację o
średniej liczbie zadań uruchomionych (stan R) oraz
czekających na dyskowe operacje wejścia/wyjścia (stan
D) w ciągu ostatnich 1, 5 i 15 minut. Są to te same
wartości średniego obciążenia, które
podaje uptime(1) i inne programy. Czwarte pole zawiera dwie liczby
oddzielone od siebie znakiem ukośnika (/). Pierwsza z nich jest
liczbą obecnie wykonywanych zadań (procesów,
wątków). Wartość za ukośnikiem jest
liczbą zadań, obecnych w systemie. Piąte pole zawiera
PID najnowszego ostatnio utworzonego procesu w systemie.
- /proc/locks
- Plik ten pokazuje aktualne blokady plików (flock(2) i
fcntl(2)) oraz dzierżawy (fcntl(2)).
- /proc/malloc (tylko do wersji 2.2 Linuksa
włącznie)
- Ten plik istnieje tylko jeśli podczas kompilacji zdefiniowano
CONFIG_DEBUG_MALLOC.
- /proc/meminfo
- Plik zawiera statystyki nt. użycia pamięci w systemie.
Używa go free(1) do wskazania wielkości wolnej i
użytej pamięci (zarówno fizycznej jak i wymiany) w
systemie jak również pamięci dzielonej i
buforów używanych przez jądro. Każdy wiersz
składa się z nazwy parametru, dwukropka, wartości
parametru i opcjonalnej jednostki pomiaru (np. "kB").
Poniższa lista opisuje nazwy parametrów i format wymagany do
odczytu wartości pól. Z wyjątkiem wyraźnie
wskazanych pól, wszystkie są obecne od co najmniej Linuksa
2.6.0. Część pól jest wyświetlanych
tylko jeśli jądro zostało skonfigurowane z pewnymi
opcjami, te zależności zaznaczono wówczas w
opisie.
- MemTotal
%lu
- Całkowity użyteczny RAM (tzn. pamięć fizyczna
RAM - kilka zarezerwowanych bitów i kod binarny jądra).
- MemFree
%lu
- Suma LowFree+HighFree.
- MemAvailable
%lu (od Linuksa 3.14)
- Przybliżona wartość dostępnej pamięci
do uruchamiania nowych aplikacji, bez pamięci wymiany.
- Buffers
%lu
- Relatywnie tymczasowe miejsce przechowywania surowych bloków
dyskowych które nie powinno być zbyt duże
(rzędu 20 MB).
- Cached %lu
- Bufor w pamięci przeznaczony na plik odczytane z dysku (bufora
strony). Nie obejmuje SwapCached.
- SwapCached
%lu
- Pamięć, która została przeniesiona do
pamięci wymiany jest później pobierana do
pamięci i pozostawiana jednocześnie w pliku wymiany
(jeśli jest duże zapotrzebowanie na pamięć, te
strony nie muszą być ponownie przenoszone do pamięci
wymiany, ponieważ już znajdują się w pliku
wymiany. Unika się w ten sposób zbędnych operacji
wejścia/wyjścia).
- Active %lu
- Pamięć która była ostatnio używana. Z
reguły nie jest odzyskiwana poza absolutnie koniecznymi
przypadkami.
- Inactive
%lu
- Pamięć która była ostatnio słabiej
używana. Nadaje się w większym stopniu do odzyskania
do innych celów.
- Active(anon)
%lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Inactive(anon)
%lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Active(file)
%lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Inactive(file)
%lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Unevictable
%lu (od Linuksa 2.6.28)
- (Od Linuksa 2.6.28 do 2.6.30 wymagane było
CONFIG_UNEVICTABLE_LRU) [do udokumentowania]
- Mlocked %lu (od
Linuksa 2.6.28)
- (Od Linuksa 2.6.28 do 2.6.30 wymagane było
CONFIG_UNEVICTABLE_LRU) [do udokumentowania]
- HighTotal
%lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM) Całkowita
wielkość pamięci highmem. Jest to
pamięć powyżej ~860MB pamięci fizycznej.
Obszary highmem są przeznaczone do użycia przez programy w
przestrzeni użytkownika lub przez bufor strony. Jądro musi
używać pewnych sztuczek aby uzyskać dostęp do
tej pamięci, co czyni dostęp wolniejszym niż do
pamięci lowmem.
- HighFree
%lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość wolnej pamięci highmem.
- LowTotal
%lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość całkowita pamięci lowmem. Lowmem to
pamięć którą można użyć
do tych samych celów co highmem, lecz jest również
dostępna dla wewnętrznych struktur danych jądra. Jest
to między innymi miejsce, gdzie przydzielane jest wszystko ze
Slab. Gdy zabraknie pamięci lowmem należy się
spodziewać złych wiadomości.
- LowFree
%lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość wolnej pamięci lowmem.
- MmapCopy %lu
(od Linuksa 2.6.29)
- (wymagane jest CONFIG_MMU) [do udokumentowania]
- SwapTotal
%lu
- Całkowita wielkość dostępnej pamięci
wymiany.
- SwapFree
%lu
- Wielkość aktualnie nieużywanej pamięci
wymiany.
- Dirty %lu
- Pamięć czekająca na ponowny zapis na dysk.
- Writeback
%lu
- Pamięć zapisywana obecnie na dysk.
- AnonPages %lu
(od Linuksa 2.6.18)
- Strony nie mające zapasu w postaci pliku zmapowane do tabel stron w
przestrzeni użytkownika.
- Mapped %lu
- Pliki które zostały zmapowane do pamięci (za
pomocą mmap(2)) np. biblioteki.
- Shmem %lu (od Linuksa
2.6.32)
- [do udokumentowania]
- Slab %lu
- Wewnętrzny bufor jądra przeznaczony na jego struktury
danych.
- SReclaimable
%lu (od Linuksa 2.6.19)
- Część Slab, która może
być przypisana ponownie, taka jak pamięć
podręczna.
- SUnreclaim
%lu (od Linuksa 2.6.19)
- Część Slab niemogąca być
przypisana ponownie przy małej ilości pamięci.
- KernelStack
%lu (od Linuksa 2.6.32)
- Wielkość pamięci przypisana do stosów
jądra.
- PageTables
%lu (od Linuksa 2.6.18)
- Wielkość pamięci przypisana do najniższego
poziomu tabel stron.
- Quicklists
%lu (od Linuksa 2.6.27)
- (wymagane jest CONFIG_QUICKLIST) [do udokumentowania]
- NFS_Unstable
%lu (od Linuksa 2.6.18)
- Strony NFS wysłane do serwera, lecz jeszcze nie wprowadzone na
stabilny nośnik.
- Bounce %lu (od
Linuksa 2.6.18)
- Pamięć używana do urządzenia blokowego
"bounce buffer".
- WritebackTmp
%lu (od Linuksa 2.6.26)
- Pamięć używana przez FUSE do tymczasowych
buforów pamięci z buforowaniem zapisu.
- CommitLimit
%lu (od Linuksa 2.6.10)
- Jest to całkowita wielkość pamięci
dostępnej obecnie do przydzielenia w systemie wyrażona w
kilobajtach. Limit jest przestrzegany jedynie gdy włączono
ścisłe rozliczanie overcommitu (tryb 2 w
/proc/sys/vm/overcommit_memory). Limit jest obliczany na podstawie
wzoru opisanego przy /proc/sys/vm/overcommit_memory. Więcej
informacji znajduje się w pliku źródeł
jądra Documentation/vm/overcommit-accounting.
- Committed_AS
%lu
- Wielkość pamięci obecnie przypisanej w systemie. Jest
to suma pamięci zaalokowanej przez procesy, nawet jeśli jej
jeszcze nie "użyły". Proces alokujący 1 GB
pamięci (za pomocą malloc(3) lub podobnej
konstrukcji), używający jedynie 300 MB pamięci,
będzie pokazywał użycie tych 300 MB pamięci,
nawet jeśli przydzielił przestrzeń adresową
dla całego 1 GB.
Ten 1 GB to pamięć "zatwierdzona"
przez VM, która może być użyta przez
tę aplikację w dowolnym czasie. Gdy włączone
jest ścisły overcommit (tryb 2 w
/proc/sys/vm/overcommit_memory) alokacja która
przekroczyłaby CommitLimit jest niedozwolona. Jest to
przydatne do zagwarantowania, że proces nie zawiedzie z powodu
braku pamięci po jej poprawnym przydzieleniu.
- VmallocTotal
%lu
- Całkowity rozmiar obszaru pamięci vmalloc.
- VmallocUsed
%lu
- Wielkość używanego obszaru vmalloc.
- VmallocChunk
%lu
- Największy wolny ciągły blok obszaru vmalloc.
- HardwareCorrupted
%lu (od Linuksa 2.6.32)
- (wymagane jest CONFIG_MEMORY_FAILURE) [do udokumentowania]
- AnonHugePages
%lu (od Linuksa 2.6.38)
- (wymagane jest CONFIG_TRANSPARENT_HUGEPAGE) Duże strony nie
mające zapasu w postaci pliku zmapowane do tabel stron w
przestrzeni użytkownika.
- CmaTotal %lu
(od Linuksa 3.1)
- Łącznie stron CMA (Contiguous Memory Allocator) (wymagane
jest CONFIG_CMA).
- CmaFree %lu (od
Linuksa 3.1)
- Wolne strony CMA (Contiguous Memory Allocator) (wymagane jest
CONFIG_CMA)
- HugePages_Total
%lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Rozmiar puli dużych
stron.
- HugePages_Free
%lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Liczba dużych stron w
puli, które nie są jeszcze przydzielone.
- HugePages_Rsvd
%lu (od Linuksa 2.6.17)
- (wymagane jest CONFIG_HUGETLB_PAGE) Jest to liczba dużych
stron które przeznaczono do przydzielenia z puli, lecz jeszcze jej
nie przeprowadzono. Zarezerwowane duże strony gwarantują,
że aplikacja będzie w stanie przypisać taką
stronę w razie błędu.
- HugePages_Surp
%lu (od Linuksa 2.6.24)
- (wymagane jest CONFIG_HUGETLB_PAGE) Jest to liczba dużych
stron z puli powyżej wartości
/proc/sys/vm/nr_hugepages. Maksymalna liczba nadwyżki
dużych stron jest kontrolowana przez
/proc/sys/vm/nr_overcommit_hugepages.
- Hugepagesize
%lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Rozmiar dużych
stron.
- DirectMap4k
%lu (od Linuksa 2.6.27)
- Liczba bajtów RAM-u liniowo przypisanych przez jądro w
stronach 4kB (x86).
- DirectMap4M
%lu (od Linuksa 2.6.27)
- Liczba bajtów RAM-u liniowo przypisanych przez jądro w
stronach 4MB (x86 z włączonym CONFIG_X86_64 lub
CONFIG_X86_PAE).
- DirectMap2M
%lu (od Linuksa 2.6.27)
- Liczba bajtów RAM-u liniowo przypisanych przez jądro w
stronach 2MB (x86 bez włączonego CONFIG_X86_64 ani
CONFIG_X86_PAE).
- DirectMap1G
%lu (od Linuksa 2.6.27)
- (x86 z włączonym CONFIG_X86_64 i
CONFIG_X86_DIRECT_GBPAGES)
- /proc/modules
- Tekstowa lista modułów, które załadowano w
systemie. Zobacz także lsmod(8).
- /proc/mounts
- Przed jądrem 2.4.19 plik ten był listą wszystkich
systemów plików zamontowanych aktualnie w systemie. Wraz z
wprowadzeniem przestrzeni nazw montowań przydzielanych dla procesu
w Linuksie 2.4.19, plik ten stał się dowiązaniem do
/proc/self/mounts, który zawiera listę punktów
montowań we własnej przestrzeni nazw montowań
procesu. Format tego pliku jest opisany w fstab(5).
- /proc/mtrr
- Memory Type Range Registers. Szczegóły można
znaleźć w pliku źródeł jądra
Linux Documentation/mtrr.txt.
- /proc/net
- Różne sieciowe pseudopliki, z których wszystkie
podają stan pewnej części warstwy sieciowej. Plik ten
zawiera struktury ASCII i dlatego nadaje się do odczytu za
pomocą cat(1). Jednak standardowy pakiet netstat(8)
daje dużo czystszy dostęp do tych plików.
- /proc/net/arp
- Zawiera zrzut tabeli ARP jądra używanej do
rozwiązywania adresów, w czytelnej postaci ASCII. Pokazane
zostaną zarówno wyuczone dynamicznie, jak i wstępnie
zaprogramowane wpisy w tabeli ARP. Format jest następujący:
IP address HW type Flags HW address Mask Device
192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
Gdzie "IP address" jest adresem IPv4 maszyny, a
"HW type" jest rodzajem sprzętu wg RFC 826.
"Flags" są to wewnętrzne znaczniki struktury ARP
(zdefiniowane w /usr/include/linux/if_arp.h), a "HW
address" jest odwzorowaniem adresu IP w warstwie fizycznej,
jeśli jest ono określone.
- /proc/net/dev
- Pseudoplik dev zawiera informacje o stanie urządzenia sieciowego.
Zawierają one liczbę otrzymanych i wysłanych
pakietów, liczbę błędów i kolizji oraz
inne podstawowe statystyki. Informacje te są wykorzystywane przez
program ifconfig(8) do informowania o stanie urządzenia.
Format jest następujący:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
- /proc/net/dev_mcast
- Zdefiniowany w /usr/src/linux/net/core/dev_mcast.c:
indx interface_name dmi_u dmi_g dmi_address
2 eth0 1 0 01005e000001
3 eth1 1 0 01005e000001
4 eth2 1 0 01005e000001
- /proc/net/igmp
- Internetowy Protokół Zarządzania Grupami.
Zdefiniowany w /usr/src/linux/net/core/igmp.c.
- /proc/net/rarp
- Plik ten ma ten sam format, co plik arp i zawiera aktualną
bazę odwrotnych odwzorowań, używaną do
udostępniania usług odwrotnego poszukiwania adresów
rarp(8). Jeśli RARP nie jest skonfigurowane w jądrze,
to plik ten nie będzie istniał.
- /proc/net/raw
- Zawiera zrzut tabeli gniazd surowych (RAW). Większość
informacji nie jest przeznaczona do użytku innego niż
odpluskwiania. Wartość "sl" jest slotem mieszania
jądra dla gniazda, "local_address" jest parą
składającą się z lokalnego adresu i numeru
protokołu. "st" jest stanem wewnętrznym gniazda.
"tx_queue" i "rx_queue" są kolejkami danych
przychodzących i wychodzących, w sensie zużycia
pamięci jądra. Pola "tr", "tm->when"
i "rexmits" nie są używane przez gniazda surowe.
Pole "uid" zawiera efektywny UID twórcy gniazda.
- /proc/net/snmp
- Ten plik zawiera dane ASCII potrzebne bazom agenta SNMP
zarządzającym informacjami o IP, ICMP, TCP i UDP.
- /proc/net/tcp
- Zawiera zrzut tabeli gniazd TCP. Wiele informacji nie przydaje się
do użytku poza odpluskwianiem. Wartość "sl"
jest slotem mieszania jądra dla gniazda, "local_address"
jest parą składającą się z lokalnego
adresu i numeru portu. "rem_address" jest parą
składającą się ze zdalnego adresu i numeru
portu (jeśli gniazdo jest podłączone). "St"
jest stanem wewnętrznym gniazda. "tx_queue" i
"rx_queue" są kolejkami danych przychodzących i
wychodzących w sensie zużycia pamięci jądra.
Pola "tr", "tm-when" i "rexmits"
zawierają wewnętrzne informacje o stanie gniazda w
jądrze i są przydatne tylko do odpluskwiania. Pole
"uid" zawiera efektywny UID twórcy gniazda.
- /proc/net/udp
- Zawiera zrzut tabeli gniazd UDP. Wiele informacji nie przydaje się
do użytku poza odpluskwianiem. Wartość "sl"
jest slotem mieszania jądra dla gniazda, "local_address"
jest parą składającą się z lokalnego
adresu i numeru portu. "rem_address" jest parą
składającą się ze zdalnego adresu i numeru
portu (jeśli gniazdo jest podłączone). "st"
jest stanem wewnętrznym gniazda. "tx_queue" i
"rx_queue" są kolejkami danych przychodzących i
wychodzących w sensie zużycia pamięci jądra.
Pola "tr", "tm-when" i "rexmits" nie
są używane w gniazdach UDP. Pole "uid" zawiera
efektywny UID twórcy gniazda. Format jest
następujący:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/unix
- Wymienia gniazda domeny UNIX, obecne w systemie oraz ich stan. Format jest
następujący:
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printer
Występują następujące pola:
- Num:
- numer slotu tabeli jądra.
- RefCount:
- numer użytkowników gniazda.
- Protocol:
- obecnie zawsze 0.
- Flags:
- wewnętrzne flagi jądra przechowujące status
gniazda.
- Type:
- typ gniazda. Dla gniazd SOCK_STREAM jest to 0001; dla gniazd
SOCK_DGRAM jest to 0002, a dla gniazd SOCK_SEQPACKET jest to
0005.
- St:
- wewnętrzny stan gniazda.
- Path:
- ścieżka powiązana z gniazdem (jeśli
występuje). W tej liście
są uwzględnione ścieżki
będące w abstrakcyjnej przestrzeni nazw — ich
Path zaczyna się znakiem "@".
- /proc/net/netfilter/nfnetlink_queue
- Plik zawiera informacji o kolejkowaniu netfilter w przestrzeni
użytkownika. Każdy wiersz reprezentuje kolejkę.
Kolejki które nie zostały wpisane z przestrzeni
użytkownika nie są pokazywane.
1 4207 0 2 65535 0 0 0 1
(1) (2) (3)(4) (5) (6) (7) (8)
- Pola w każdym wierszu są następujące:
- (1)
- Identyfikator kolejki. Pasuje on do tego co określono w opcjach
--queue-num lub --queue-balance do celu NFQUEUE
iptables(8). Zob. iptables-extensions(8) aby uzyskać
więcej informacji.
- (2)
- Identyfikator portu netlink zapisanego do kolejki.
- (3)
- Liczba pakietów obecnie zakolejkowanych i czekających na
przetworzenie przez aplikację.
- (4)
- Tryb kopiowania kolejki. Jest to albo (tylko metadane) lub 2 (kopiuje
również właściwe dane do przestrzeni
użytkownika).
- (5)
- Zakres kopii, tj. maksymalna wartość bajtów pakietu
właściwych danych jaka powinna być skopiowana
do przestrzeni użytkownika.
- (6)
- Porzucone kolejki. Liczba pakietów, które musiały
zostać porzucone przez jądra, ponieważ zbyt
dużo pakietów czekało już na przestrzeń
użytkownika na odesłanie obowiązkowych poleceń
akceptuj/porzuć.
- (7)
- Porzucone kolejki użytkownika. Liczba pakietów porzuconych
wewnątrz podsystemu netlink. Takie porzucenia
następują zwykle przy zapełnieniu odpowiedniego
bufora gniazda, tj. przestrzeń użytkownika nie jest w stanie
odpowiednio szybko odczytywać wiadomości.
- (8)
- Numer sekwencji. Każdy pakiet kolejki jest powiązany z
(32-bitowym) monotonicznie rosnącym numerem sekwencji. Pokazuje to
ID najnowszego skolejkowanego pakietu.
- Ostatnia liczba istnieje tylko z powodów kompatybilności i
wynosi zawsze 1.
- /proc/partitions
- Zawiera liczby główne i poboczne każdej z partycji
oraz liczby 1024-bajtowych bloków i nazwy partycji.
- /proc/pci
- Listing wszystkich urządzeń PCI znalezionych podczas
inicjalizacji jądra i ich konfiguracja.
Plik został zastąpiony nowym interfejsem
/proc do PCI (/proc/bus/pci). Stał się
opcjonalny w Linuksie 2.2 (dostępny przy ustawieniu opcji
CONFIG_PCI_OLD_PROC przy kompilacji jądra). Ponownie
stał się nieopcjonalny w Linuksie 2.4. Następnie,
został uznany za przestarzały w Linuksie 2.6 (był
wciąż dostępny przy ustawieniu
CONFIG_PCI_LEGACY_PROC), aż w końcu usunięto
go w Linuksie 2.6.17.
- /proc/profile (od Linuksa 2.4)
- Plik obecny jest wyłącznie jeśli jądro
zostało uruchomione z opcją profile=1 wiersza
poleceń. Jądro udostępni informacje dotyczące
profilowania w formacie binarnym gotowym do użycia przez
readprofile(1). Zapis (np. pustego łańcucha) do tego
pliku wyzeruje liczniki profilowania, a na niektórych
architekturach zapis binarnej liczby całkowitej
"mnożnika profilowania" rozmiaru sizeof(int)
ustawi częstotliwość przerwań
profilowania.
- /proc/scsi
- Katalog z pseudoplikiem scsi na pośrednim poziomie i
różnymi podkatalogami niskopoziomowych sterowników
SCSI, zawierającymi po jednym pliku dla każdego kontrolera
SCSI w danym systemie; każdy z nich podaje stan jakiejś
części podsystemu we/wy SCSI. Pliki te zawierają
struktury ASCII i dlatego nadają się do odczytu za
pomocą cat(1).
Możliwy jest też zapis do niektórych z
tych plików, w celu rekonfiguracji podsystemu, lub
przełączania różnych parametrów.
- /proc/scsi/scsi
- Jest wypisaniem wszystkich znanych jądru urządzeń
SCSI. Listing jest podobny do widzianego podczas ładowania systemu.
scsi wspiera obecnie tylko polecenie add-single-device
umożliwiające rootowi dodanie do listy znanych
urządzeń urządzenia włączonego na
gorąco.
Polecenie
echo 'scsi add-single-device 1 0 5 0' > /proc/scsi/scsi
spowoduje, że kontroler scsi1 przeprowadzi skanowanie kanału
SCSI 0 w poszukiwaniu urządzenia o ID 5 i LUN 0. Jeśli
już istnieje urządzenie o takim adresie, lub adres jest
nieprawidłowy, zostanie zwrócony błąd.
- /proc/scsi/[nazwa-sterownika]
- [nazwa-sterownika] może obecnie być jedną z:
NCR53c7xx, aha152x, aha1542, aha1740, aic7xxx, buslogic, eata_dma,
eata_pio, fdomain, in2000, pas16, qlogic, scsi_debug, seagate, t128,
u15-24f, ultrastore, or wd7000. Ukazują się te z
katalogów, dla których odpowiednie sterowniki
zarejestrowały przynajmniej jeden kontroler SCSI. Każdy
katalog zawiera jeden plik dla każdego zarejestrowanego kontrolera.
Każdy z plików kontrolera ma nazwę
odpowiadającą numerowi kontrolera, przyznanemu podczas jego
inicjacji.
Czytanie tych plików zwykle pokaże
konfigurację sterownika i kontrolera, statystyki itp.
Pisanie do tych plików umożliwia
różne operacje na różnych kontrolerach. Na
przykład za pomocą poleceń latency i
nolatency root może uaktywniać lub
deaktywować kod pomiaru czasu oczekiwania dla poleceń
(command latency) w sterowniku eata_dma. Za pomocą poleceń
lockup i unlock root może sterować
symulowanym przez sterownik scsi_debug blokowaniem magistrali.
- /proc/self
- Ten katalog odnosi się do procesu korzystającego z systemu
plików /proc i jest identyczny z katalogiem w /proc o
nazwie będącej jego PID-em.
- /proc/slabinfo
- Informacje o buforach jądra. Od Linuksa 2.6.16 plik ten istnieje
tylko jeśli podczas kompilacji jądra włączono
opcję CONFIG_SLAB. Występują
następujące kolumny w pliku /proc/slabinfo:
cache-name
num-active-objs
total-objs
object-size
num-active-slabs
total-slabs
num-pages-per-slab
Szczegóły można znaleźć w
slabinfo(5).
- /proc/stat
- statystyki jądra/systemu. Różnią się
pomiędzy architekturami. Wśród wspólnych
wpisów są:
- cpu 3357 0 4313
1362393
- Czas, wyrażony w USER_HZ (jedna setna sekundy na
większości architektur, proszę użyć
sysconf(_SC_CLK_TCK) aby uzyskać prawidłową
wartość), które system spędził w trybie
użytkownika w różnych stanach:
- user
- (1) Czas spędzony w trybie użytkownika.
- nice
- (2) Czas spędzony w trybie użytkownika z niskim priorytetem
(nice).
- system
- (3) Czas spędzony w trybie systemowym.
- idle
- (4) Czas wykorzystany na zadanie bezczynności.
Wartość powinna wynosić USER_HZ razy drugi wpis w
pseudopliku /proc/uptime.
- iowait (od Linuksa
2.5.41)
- (5) Czas oczekiwania na zakończenie
wejścia/wyjścia.
- irq (od Linuksa
2.6.0-test4)
- (6) Czas obsługi przerwań.
- softirq (od
Linuksa 2.6.0-test4)
- (7) Czas obsługi przerwań programowych.
- steal (od Linuksa
2.6.11)
- (8) Czas "skradziony", który jest czasem spędzonym
w innym systemie operacyjnym podczas pracy w środowisku
zwirtualizowanym.
- guest (od Linuksa
2.6.24)
- (9) Czas spędzony podczas działania na wirtualnym procesorze
systemu operacyjnego gościa, pod kontrolą jądra
Linux.
- guest_nice
(od Linuksa 2.6.33)
- (10) Czas spędzony podczas działania na wirtualnym
procesorze systemu operacyjnego gościa, pod kontrolą
jądra Linux.
- page 5741 1808
- Liczba stron, które system wstronicował i liczba tych,
które wystronicował (z dysku).
- swap 1 0
- Liczba stron wymiany, które wniesiono i wyniesiono.
- intr 1462898
- Linia ta pokazuje licznik przerwań obsłużonych od
czasu uruchomienia dla każdego możliwego przerwania
systemowego. Pierwsza kolumna określa całkowitą
liczbę wszystkich obsłużonych przerwań w tym
nienumerowanych przerwań swoistych dla architektury, każda
następna określa całkowitą
wartość dla danego numerowanego przerwania. Nienumerowane
przerwania nie są pokazywane, jedynie sumowane do
całości.
- disk_io:
(2,0):(31,30,5764,1,2) (3,0):...
- (major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops,
blks_written)
(tylko Linux 2.4)
- ctxt 115315
- Liczba przełączeń kontekstu, które
przeszedł system.
- btime
769041601
- Czas uruchomienia systemu, w sekundach od epoki: 1970-01-01 00:00:00 +0000
(UTC).
- processes
86031
- Liczba rozwidleń procesów od uruchomienia systemu.
- procs_running
6
- Liczba procesów w stanie runnable (Linux 2.5.45 i
późniejsze).
- procs_blocked
2
- Liczba procesów oczekujących na zakończenie operacji
wejścia/wyjścia (Linux 2.5.45 i
późniejsze).
- /proc/swaps
- Używane obszary wymiany. Zobacz także swapon(8).
- /proc/sys
- Katalog ten (obecny od 1.3.57) zawiera wiele plików i
podkatalogów odpowiadających zmiennym jądra. Zmienne
te mogą być odczytywane i czasem modyfikowane za
pośrednictwem systemu plików proc, jak też
przy wykorzystaniu (przestarzałej) funkcji systemowej
sysctl(2)
Wartości łańcuchów
mogą się kończyć albo "\0
Liczby całkowite i długie wartości
mogą być zapisane albo dziesiętnie,
albo szesnastkowo (np. 0x3FFF). Przy zapisywaniu wielu liczb
całkowitych lub długich wartości można je
rozdzielić dowolnym z następujących
białych znaków: " ", "\t", lub
"\n". Użycie innych separatorów wywoła
błąd EINVAL.
- /proc/sys/abi (od Linuksa 2.4.10)
- Plik może zawierać pliki z binarnymi informacjami aplikacji.
Dalsze informacje można znaleźć w pliku
Documentation/sysctl/abi.txt w źródłach
jądra Linux.
- /proc/sys/debug
- Ten katalog może być pusty.
- /proc/sys/dev
- Ten katalog zawiera informacje specyficzne dla poszczególnych
urządzeń. (np. dev/cdrom/info). W niektórych
systemach może być pusty.
- /proc/sys/fs
- Katalog zawierający pliki i podkatalogi do zmiennych jądra
związanych z systemami plików.
- /proc/sys/fs/binfmt_misc
- Dokumentacja plików z tego katalogu znajduje się w
źródłach jądra Linux w
Documentation/binfmt_misc.txt.
- /proc/sys/fs/dentry-state (od Linuksa 2.2)
- Plik zawiera informacje o statusie bufora katalogu (dcache). Zawiera
sześć liczb: nr_dentry, nr_unused,
age_limit (wiek w sekundach), want_pages (strony
żądane przez system) i dwie nieużywane
wartości.
- nr_dentry jest liczbą przydzielonych dentries (wpisów
dcache). To pole jest nieużywane w Linuksie 2.2.
- nr_unused jest liczbą nieużywanych dentries.
- age_limit jest wiekiem w sekundach, po którym wpisy dcache
mogą być przydzielone ponownie, gdy jest zbyt mało
pamięci.
- want_pages jest niezerowa, gdy jądro wywołało
shrink_dcache_pages(), ale dcache nie zostały jeszcze
przycięte.
- /proc/sys/fs/dir-notify-enable
- Plik ten może służyć do
wyłączania lub włączania interfejsu
dnotify opisanego w fcntl(2) dla całego systemu.
Wartość 0 w tym pliku wyłącza interfejs, a
wartość 1 go włącza.
- /proc/sys/fs/dquot-max
- Zawiera maksymalną liczbę buforowanych wpisów kwot
dyskowych. W niektórych (2.4) systemach nie występuje. Gdy
liczba wolnych zbuforowanych kwot dyskowych jest bardzo mała, a
jest przerażająca liczba jednoczesnych
użytkowników systemu, może istnieć potrzeba
zwiększenia tego ograniczenia.
- /proc/sys/fs/dquot-nr
- Zawiera liczbę przydzielonych wpisów kwot dyskowych oraz
liczbę wolnych wpisów kwot dyskowych.
- /proc/sys/fs/epoll (od Linuksa 2.6.28)
- Katalog zawiera plik max_user_watches, którego można
użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs epoll.
Więcej szczegółów można
znaleźć w epoll(7).
- /proc/sys/fs/file-max
- Zawiera ogólnosystemowe ograniczenie liczby plików otwartych
przez wszystkie procesy. Wywołania systemowe które
zawiodą przy napotkaniu tych limitów nie powiodą
się z błędem ENFILE. (Zobacz
także setrlimit(2), które może
służyć procesom do ustawiania ograniczenia dla
procesu, RLIMIT_NOFILE, jako liczby plików, które
proces może otworzyć). Gdy otrzymuje się
mnóstwo komunikatów w dzienniku jądra o przekroczeniu
liczby uchwytów plików (file handles - należy
szukać komunikatów takich jak "VFS: file-max limit
<liczba> reached") , to można spróbować
zwiększyć tę wartość:
echo 100000 > /proc/sys/fs/file-max
Procesy uprzywilejowane (CAP_SYS_ADMIN) mogą
przesłonić limit file-max.
- /proc/sys/fs/file-nr
- Jest to plik (tylko do odczytu) zawierający trzy liczby:
liczbę przydzielonych uchwytów plików (tzn.
liczbę obecnie otwartych plików), liczbę wolnych
uchwytów plików i maksymalną liczbę
uchwytów plików (tzn. tę samą
wartość co w /proc/sys/fs/file-max). Jeśli
liczba przydzielonych uchwytów plików zbliża
się do maksimów, należy rozważyć
zwiększenie ich. Przed Linuksem 2.6 jądro dynamicznie
przydzielało uchwyty, lecz nie zwalniało ich. Wolnego
uchwyty były przechowywany w liście do ponownego
przydzielenia, wartość "wolne uchwyty
plików" wskazywała na rozmiar tej listy. Duża
liczba wolnych uchwytów plików wskazywała, że
w przeszłości był moment dużego użycia
otwartych uchwytów plików. Od Linuksa 2.6 jądro
zwalnia wolne uchwyty plików, a wartość "wolne
uchwyty plików" zawsze wynosi zero.
- /proc/sys/fs/inode-max (obecny jedynie do Linuksa 2.2)
- Ten plik zawiera maksymalną liczbę
i-węzłów w pamięci. Wartość ta
powinna być 3-4 razy większa niż
wartość w file-max, gdyż stdin,
stdout i gniazda sieciowe również potrzebują
i-węzłów, aby można było na nich
operować. Gdy systematycznie brakuje i-węzłów,
istnieje potrzeba zwiększenia tej wartości.
Od jądra Linux 2.4 nie występuje statyczny limit
liczby i-węzłów, w związku z czym
usunięto ten plik.
- /proc/sys/fs/inode-nr
- Zawiera dwie pierwsze wartości z inode-state.
- /proc/sys/fs/inode-state
- Plik zawiera siedem liczb: nr_inodes, nr_free_inodes,
preshrink i cztery nieużywane wartości
(wynoszące zawsze zero).
nr_inodes jest liczbą przydzielonych przez
system i-węzłów. nr_free_inodes jest
liczbą wolnych i-węzłów.
preshrink jest niezerowe, gdy nr_inodes >
inode-max i gdy system musi przyciąć listę
i-węzłów zamiast przydzielić ich
więcej; od Linuksa 2.4 to pole jest wartością -
atrapą (wynosi zawsze zero).
- /proc/sys/fs/inotify (od wersji Linuksa 2.6.13)
- Ten katalog zawiera pliki max_queued_events,
max_user_instances i max_user_watches, których
można użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs
inotify. Więcej szczegółów można
znaleźć w inotify(7).
- /proc/sys/fs/lease-break-time
- Określa okres ulgi, przez jaki jądro zapewnia procesowi
utrzymanie dzierżawy pliku (fcntl(2)), a po którym
wyśle do tego procesu sygnał zawiadamiający go,
że inny proces oczekuje na otwarcie pliku. Jeśli
utrzymujący dzierżawę nie usunie jej lub nie
ograniczy swoich praw do niej w przeciągu tego czasu, jądro
wymusi zerwanie dzierżawy.
- /proc/sys/fs/leases-enable
- Ten plik może służyć do
ogólnosystemowego włączania lub
wyłączania dzierżaw plików (fcntl(2)).
Gdy plik ten zawiera wartość 0, dzierżawy są
wyłączone. Wartość niezerowa
włącza dzierżawy.
- /proc/sys/fs/mqueue (od wersji Linuksa 2.6.6)
- Ten katalog zawiera pliki msg_max, msgsize_max i
queues_max, kontrolujące zasoby używane przez kolejki
komunikatów POSIX. Szczegółowe informacje
można znaleźć w mq_overview(7).
- /proc/sys/fs/nr_open (od Linuksa 2.6.25)
- Plik ten określa pułap, do którego można
podnieść limit zasobów RLIMIT_NOFILE (zob.
getrlimit(2)). Pułap ten jest wymuszany zarówno na
nieuprzywilejowanych i uprzywilejowanych procesach. Domyślną
wartością w pliku jest 1048576 (przed Linuksem 2.6.25,
pułap RLIMIT_NOFILE był zakodowany na sztywno
i wynosił tyle samo).
- /proc/sys/fs/overflowgid and /proc/sys/fs/overflowuid
- Te pliki umożliwiają zmianę wartości
ustalonego UID-u i GID-u. Wartością domyślną
jest 65534. Niektóre systemy plików wspierają jedynie
16-bitowe UID-y i GID-y, podczas gdy linuksowe UID-y i GID-y są
32-bitowe. Gdy któryś z takich systemów plików
jest zamontowany z możliwością zapisu, to wszystkie
UID-y i GID-y przekraczające 65535 są zastępowane
podanymi tu wartościami przed zapisem na dysk.
- /proc/sys/fs/pipe-max-size (od Linuksa 2.6.35)
- Wartość w tym pliku definiuje górny limit do
podnoszenia pojemności potoku przy użyciu operacji
F_SETPIPE_SZ fcntl(2). Limit ten odnosi się
wyłącznie do procesów nieuprzywilejowanych.
Domyślną wartością dla tego pliku jest
1 048 576. Wartość przypisana do pliku
może być zaokrąglona w górę,
odnosząc się do faktycznej wartości wykorzystanej z
powodu dogodnej implementacji. Aby poznać zaokrągloną
wartość, należy wyświetlić
zawartość tego pliku po przypisaniu do niego
wartości. Minimalną wartością, jaka
może zostać przypisana do tego pliku jest systemowy rozmiar
strony.
- /proc/sys/fs/protected_hardlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań zwykłych (twardych) nie wprowadza
się żadnych ograniczeń (jest to historyczne
zachowanie przed Linuksem 3.6). Gdy wartość wynosi 1, to
dowiązania zwykłe mogą być tworzone do pliku
docelowego jedynie wówczas, gdy spełniony jest jeden z
poniższych warunków:
- Wywołujący ma przywilej CAP_FOWNER.
- UID systemu plików dotyczący procesu tworzącego
dowiązanie pasują do właściciela (UID) pliku
docelowego (zgodnie z opisem w podręczniku credentials(7),
UID systemu plików procesu jest zwykle taki sam jak jego efektywny
UID).
- Wszystkie poniższe warunki zostaną spełnione:
- cel jest zwykłym plikiem,
- plik docelowy nie ma ustawionego bitu set-user-ID,
- plik docelowy nie ma ustawionych obu z bitów set-group-ID i bitu
wykonywalności dla grupy,
- wywołujący ma uprawnienie do odczytu i zapisu pliku
docelowego (albo dzięki uprawnieniom pliku albo ze względu
na posiadane przywileje).
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujących wyścig
między czasem sprawdzenia a czasem użycia dowiązania
zwykłego, zwykle spotykanych w katalogach dostępnych do
zapisu dla wszystkich (np. /tmp). Częstym sposobem
wykorzystywania tej wady jest skrzyżowanie ograniczeń w
uprawnieniach przy podążaniu za danym dowiązaniem
zwykłym (np. gdy proces root podąża za
dowiązaniem stałym utworzonym przez innego
użytkownika). W systemach bez wydzielonych partycji,
rozwiązuje się w ten sposób również
problem nieautoryzowanych użytkowników
"przypinających" dziurawe pliki z ustawionymi bitami
set-user-ID i set-group-ID wobec aktualizowanych przez administratora a
także dowiązywaniu do plików specjalnych.
- /proc/sys/fs/protected_symlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań symbolicznych nie wprowadza się
żadnych ograniczeń (jest to historyczne zachowanie przed
Linuksem 3.6). Gdy wartość wynosi 1, to dowiązania
symboliczne mogą być tworzone jedynie gdy spełnione
są następujące warunki:
- UID systemu plików dotyczący procesu
podążającego za dowiązaniem pasują do
właściciela (UID) dowiązania symbolicznego (zgodnie z
opisem w podręczniku credentials(7), UID systemu
plików procesu jest zwykle taki sam jak jego efektywny UID),
- dowiązanie nie znajduje się w katalogu dostępnych dla
wszystkich do zapisu z bitem lepkości lub
- dowiązanie symboliczne i katalog w którym się ono
znajduje mają tego samego właściciela (UID)
- Wywołanie systemowe które nie podąży za
dowiązaniem symbolicznym ze względu na powyższe
ograniczenia zwróci w errno błąd
EACCES.
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujących wyścig
między czasem sprawdzenia a czasem użycia przy uzyskiwaniu
dostępu do dowiązań symbolicznych.
- /proc/sys/fs/suid_dumpable (od wersji Linuksa 2.6.13)
- Wartość w tym pliku jest przypisana do flagi
"dumpable" ("zrzucalny") w sytuacjach opisanych w
prctl(2). W konsekwencji, wartość w tym pliku
określa, czy pliki zrzutów pamięci są tworzone
dla programów mających ustawiony bit set-user-ID albo
chronionych w jakiś inny sposób. Można podać
trzy różne wartości liczbowe:
- 0 (default)
- Jest to tradycyjne zachowanie (sprzed Linuksa 2.6.13). Zrzut
pamięci nie będzie tworzony dla procesu, który
zmienił swoje uprawnienia (wywołując
seteuid(2), setgid(2) lub podobną funkcję albo
gdy program miał ustawiony bit set-user-ID lub set-group-ID) albo
gdy uprawnienia nadane plikowi binarnemu programu zabraniają jego
odczytywania.
- 1 ("debug")
- Jeżeli jest to możliwe, to wszystkie procesy wykonują
zrzut pamięci. Właścicielem pliku zrzutu jest
użytkownik, którego uprawnienia do systemu plików ma
proces wykonujący zrzut. Nie są stosowane żadne
mechanizmy bezpieczeństwa. Jest to przeznaczone tylko do
celów debugowania. Ptrace nie jest sprawdzane.
- 2 ("suidsafe")
- Zrzut pamięci programu, dla którego w normalnej sytuacji
taki zrzut nie zostałby wykonany (patrz wyżej
"0"), może być odczytany tylko przez
administratora (root). Pozwala to użytkownikowi
usunąć plik ze zrzutem, ale nie pozwala na jego odczytanie.
Z powodów bezpieczeństwa w tym trybie pliki zrzutu nie
nadpisują istniejących plików. Ten tryb jest
odpowiedni, gdy administrator będzie chciał debugować
problemy w naturalnym środowisku.
- Dodatkowo, od Linuksa 3.6, /proc/sys/kernel/core_pattern musi
być absolutną ścieżką lub poleceniem
potokowym (zob. core(5)). Do dziennika jądra zapisane
zostaną ostrzeżenia, jeśli core_pattern nie
będzie się stosowało do tych reguł i nie
utworzy się zrzut pamięci.
- /proc/sys/fs/super-max
- Plik steruje maksymalną liczbą superbloków, a
więc i maksymalną liczbą systemów
plików, które jądro może zamontować.
Potrzeba zwiększenia wartości super-max
występuje tylko wtedy, gdy chce się zamontować
więcej systemów plików, niż na to pozwala
aktualna wartość super-max.
- /proc/sys/fs/super-nr
- Plik zawiera liczbę obecnie zamontowanych systemów
plików.
- /proc/sys/kernel
- Katalog zawiera pliki kontrolujące wiele parametrów
jądra, jak opisano poniżej.
- /proc/sys/kernel/acct
- Plik zawiera trzy liczby: highwater, lowwater i
frequency. Gdy włączone jest rejestrowanie
procesów w stylu BSD, wartości te sterują jego
zachowaniem. Gdy ilość wolnego miejsca w systemie
plików, na którym znajdują się logi, spada
poniżej wyrażonej w procentach wartości
lowwater, rejestrowanie jest wstrzymywane. Gdy ilość
wolnego miejsca stanie się większa niż
wyrażona w procentach wartość highwater,
rejestrowanie jest wznawiane. frequency określa, jak
często jądro będzie sprawdzać
ilość wolnego miejsca (wartość w sekundach).
Wartościami domyślnymi są 4, 2 i 30. Oznacza to,
że rejestrowanie procesów jest wstrzymywane, gdy
ilość wolnego miejsca będzie wynosiła 2% lub
mniej; wznowione zostanie, gdy wolne będzie 4% lub więcej;
zakłada się, że informacja o ilości wolnego
miejsca jest ważna przez 30 sekund.
- /proc/sys/kernel/auto_msgmni (Linux w wersji od 2.6.27 do
3.18)
- W Linuksie w wersjach od 2.6.27 do 3.18, plik ten
był używany do kontroli przeliczania wartości
w /proc/sys/kernel/msgmni przy dodawaniu lub usuwaniu
pamięci, albo przy utworzeniu/usunięciu przestrzeni nazw
IPC. Wpisanie "1" do tego pliku włączało
automatyczne przeliczanie msgmni (i wyzwalało przeliczanie
msgmni w oparciu o
bieżącą ilość dostępnej
pamięci i liczby przestrzeni nazw IPC). Wpisanie "0"
wyłączało automatyczne przeliczanie (automatyczne
przeliczanie było również wyłączane,
jeśli wartość była jawnie przypisywana do
/proc/sys/kernel/msgmni). Domyślną
wartością w auto_msgmni było 1.
Od Linuksa 3.19, zawartość tego pliku nie ma
znaczenia (ponieważ msgmni domyślnie ustawia
się na wartość
bliską maksymalnej), a odczyt z tego pliku zawsze zwraca
wartość "0".
- /proc/sys/kernel/cap_last_cap (od Linuksa 3.2)
- Patrz capabilities(7).
- /proc/sys/kernel/cap-bound (od Linuksa 2.2 do 2.6.24)
- Plik przechowuje wartość capability bounding set dla
jądra (wyrażone jako liczba dziesiętna ze znakiem).
Wartość ta jest mnożona (AND) bitowo z capabilities
dozwolonymi dla procesu podczas execve(2). Poczynając od
Linuksa 2.6.25 ogólnosystemowe capability bounding set
zostało usunięte i zastąpione bounding set na
wątek, patrz capabilities(7).
- /proc/sys/kernel/core_pattern
- Patrz core(5).
- /proc/sys/kernel/core_uses_pid
- Patrz core(5).
- /proc/sys/kernel/ctrl-alt-del
- Ten plik steruje obsługą kombinacji klawiszy Ctrl-Alt-Del.
Gdy w pliku tym znajduje się wartość 0, Ctrl-Alt-Del
jest przechwytywane i przesyłane do programu init(1) w celu
wykonania wdzięcznego restartu. Gdy wartość jest
większa od 0, reakcją Linuksa na Wulkanicznie Nerwowe
Nękanie (Vulcan Nerve Pinch (tm)) będzie natychmiastowy
restart, nawet bez zrzucenia zmodyfikowanych buforów. Uwaga: gdy
program (jak np. dosemu) korzysta z "surowego" trybu klawiatury,
Ctrl-Alt-Del jest przechwytywane przez program, zanim dotrze do warstwy
terminalowej jądra i decyzja, co z tym zrobić, zależy
od programu.
- /proc/sys/kernel/dmesg_restrict (od Linuksa 2.6.37)
- Wartość pliku określa użytkowników z
dostępem do zawartości dziennika jądra (syslog).
Wartość 0 nie nakłada żadnych
ograniczeń. Wartość 1 zawęża
dostęp do użytkowników uprzywilejowanych (zob.
syslog(2)). Od Linuksa 3.4 tylko użytkownicy z przywilejem
CAP_SYS_ADMIN mogą zmienić wartość w
tym pliku.
- /proc/sys/kernel/domainname i /proc/sys/kernel/hostname
- Te pliki mogą służyć do ustawiania nazwy
domeny i hosta NIS/YP maszyny dokładnie w ten sam sposób,
jak za pomocą poleceń domainname(1) i
hostname(1), np.:
# echo 'darkstar' > /proc/sys/kernel/hostname
# echo 'mydomain' > /proc/sys/kernel/domainname
daje taki sam efekt, jak
# hostname 'darkstar'
# domainname 'mydomain'
Należy tu zauważyć, że klasyczny
darkstar.frop.org posiada nazwę hosta "darkstar" i
domenę "frop.org" w DNS (Internetowej Usłudze
Nazw Domen - Internet Domain Name Service), których nie
należy mylić z domeną NIS (Sieciowej Usługi
Informacyjnej - Network Information Service) lub YP (Yellow Pages). Te
dwa systemy nazw domenowych zasadniczo się
różnią. Szczegółowe informacje
można znaleźć na stronie podręcznika
hostname(1).
- /proc/sys/kernel/hotplug
- Plik ten zawiera ścieżkę do programu hotplug.
Domyślną wartością w tym pliku jest
/sbin/hotplug.
- /proc/sys/kernel/htab-reclaim
- (Tylko PowerPC) Jeśli do tego pliku zostanie wpisana
wartość niezerowa, htab PowerPC (zobacz: plik
Documentation/powerpc/ppc_htab.txt w źródłach
jądra) jest czyszczony za każdym razem, gdy system natrafi
na pętlę oczekiwania ("idle").
- /proc/sys/kernel/kptr_restrict (od Linuksa 2.6.38)
- Wartość określa czy adresy jądra są
pokazywane za pomocą interfejsu /proc i innych.
Wartość 0 oznacza brak ograniczeń. Gdy użyto
1, to wskaźniki jądra wypisane za pomocą formatu
%pK zostaną zastąpione zerami, chyba że
użytkownik ma przywilej CAP_SYSLOG. Przy wartości 2
wskaźniki jądra wypisane za pomocą %pK
zostaną zawsze zastąpione zerami, niezależnie od
przywilejów jakie posiada. Początkowo domyślna
wartość wynosiła 1, lecz zastąpiono ją
0 w jądrze Linux 2.6.39. Od Linuksa 3.4 tylko użytkownicy z
przywilejem CAP_SYS_ADMIN mogą zmieniać
wartość w tym pliku.
- /proc/sys/kernel/l2cr
- (Tylko PowerPC) Plik zawiera znacznik sterujący cache'em L2
płyt procesora G3. Jeśli zawiera 0, cache jest
wyłączony. Cache jest włączony, gdy plik
zawiera wartość różną od zera.
- /proc/sys/kernel/modprobe
- Plik zawiera ścieżkę do programu
ładującego moduły jądra.
Domyślną wartością jest /sbin/modprobe.
Plik jest obecny tylko, jeśli jądro zostało zbudowane
z włączoną opcją CONFIG_MODULES
(CONFIG_KMOD w Linuksie 2.6.26 i wcześniejszych). Jest on
opisany w pliku źródeł jądra Linux
Documentation/kmod.txt (obecnym tylko w jądrach 2.4 i
wcześniejszych).
- /proc/sys/kernel/modules_disabled (od Linuksa 2.6.31)
- Przełącznik wskazujący czy moduły mogą
być ładowane do modularnego jądra. Domyślna
wartość wynosi off (0), lecz można ustawić
także true (1), która spowoduje brak
możliwości ładowania i wyładowania
modułów. W takim przypadku nie da się ustawić
przełącznika z powrotem na fałsz (false). Plik jest
obecny tylko w jądrach zbudowanych z włączoną
opcją CONFIG_MODULES.
- /proc/sys/kernel/msgmax (od Linuksa 2.2)
- Zawiera ogólnosystemowe ograniczenie maksymalnej liczby
bajtów w pojedynczym komunikacie zapisywanym do kolejki
komunikatów Systemu V.
- /proc/sys/kernel/msgmni (od Linuksa 2.4)
- Określa ogólnosystemowe ograniczenie liczby
identyfikatorów kolejek komunikatów. Zob.
również /proc/sys/kernel/auto_msgmni.
- /proc/sys/kernel/msgmnb (od Linuksa 2.2)
- Zawiera ogólnosystemowy parametr służący do
inicjacji ustawienia msg_qbytes tworzonych później
kolejek komunikatów. Ustawienie msg_qbytes określa
maksymalną liczbę bajtów, które mogą
zostać zapisane do kolejki komunikatów.
- /proc/sys/kernel/ngroups_max (od Linuksa 2.6.4)
- Jest to plik tylko do odczytu, który wyświetla górny
limit liczby członków grupy procesu.
- /proc/sys/kernel/ostype i /proc/sys/kernel/osrelease
- Pliki te zawierają poszczególne części z
/proc/version.
- /proc/sys/kernel/overflowgid i
/proc/sys/kernel/overflowuid
- Pliki te są kopiami plików /proc/sys/fs/overflowgid i
/proc/sys/fs/overflowuid.
- /proc/sys/kernel/panic
- Plik umożliwia dostęp (odczyt i zapis) do zmiennej
jądra panic_timeout. Jeśli jest to zero, jądro
będzie się zapętlać podczas paniki;
jeśli wartość niezerowa, to określa
liczbę sekund, po której jądro powinno się
automatycznie przeładować. Jeśli używany jest
software watchdog to zalecaną wartością jest 60.
- /proc/sys/kernel/panic_on_oops (od Linuksa 2.5.68)
- Plik ten kontroluje zachowanie jądra, kiedy wystąpi oops lub
BŁĄD. Jeśli ten plik zawiera 0, to system
próbuje kontynuować operację. Jeśli zawiera 1,
to system czeka parę sekund (aby dać procesowi klogd czas na
zapisanie wyjścia z oops), a następnie panikuje.
Jeżeli wartość w pliku /proc/sys/kernel/panic
również jest niezerowa, to nastąpi restart
komputera.
- /proc/sys/kernel/pid_max (od Linuksa 2.5.34)
- Ten plik określa wartość po której
nastąpi przewinięcie licznika PID (tj. wartość
w tym pliku jest o 1 większa niż maksymalny PID). PID-y
większe niż ta wartość nie
są alokowane, z tego powodu wartość z tego
pliku działa również jako systemowy limit
całkowitej liczby procesów i wątków.
Domyślna wartość tego pliku, czyli 32768,
określa taki sam zakres wartości PID, jak
wcześniejsze wersje jądra. Dla platform 32-bitowych 32768
jest maksymalną wartością, jaką może
przyjmować pid_max. W systemach 64-bitowych pid_max
może zostać ustawiony na dowolną
wartość, aż do 2^22 (PID_MAX_LIMIT,
około 4 milionów).
- /proc/sys/kernel/powersave-nap (tylko PowerPC)
- Plik zawiera znacznik. Gdy jest on ustawiony, Linux-PPC używa trybu
oszczędzania energii "nap", a w przeciwnym przypadku
trybu "doze".
- /proc/sys/kernel/printk
- Patrz syslog(2).
- /proc/sys/kernel/pty (od wersji Linuksa 2.6.4)
- Ten katalog zawiera dwa pliki związane z liczbą
pseudoterminali UNIX 98 (patrz pts(4)) w systemie.
- /proc/sys/kernel/pty/max
- Plik określa maksymalną liczbę pseudoterminali.
- /proc/sys/kernel/pty/nr
- Ten plik tylko do odczytu zawiera informację o liczbie obecnie
używanych pseudoterminali.
- /proc/sys/kernel/random
- Katalog ten zawiera różne parametry sterujące
działaniem pliku /dev/random. Dalsze informacje można
znaleźć w random(4).
- /proc/sys/kernel/random/uuid (od Linuksa 2.4)
- Każdy odczyt z tego pliku przeznaczonego tylko do odczytu zwraca
losowo wygenerowany 128-bitowy UUID, jako łańcuch w
standardowym formacie UUID.
- /proc/sys/kernel/randomize_va_space (od Linuksa 2.6.12)
- Wybiera politykę losowego rozmieszczania obszarów
pamięci (ang. ASLR - adress space layout randomization) w systemie
(na architekturach obsługujących ASLR). Obsługiwane
są trzy wartości tego pliku:
- 0
- Wyłącza ASLR. Jest to domyślne na architekturach
nieobsługujących ASLR i gdy jądro jest uruchamiane z
parametrem norandmaps.
- 1
- Czyni przydzielanie stron VDSO, stosu i adresów mmap(2)
losowym. Oznacza to między innymi, że biblioteki dzielone
są ładowane pod losowy adres. Segment tekstowy plików
wykonywalnych skonsolidowanych niezależnie od pozycji (PIE)
będzie również ładowany pod losowy
adres. Wartość ta jest domyślna, jeśli
skonfigurowano jądro z CONFIG_COMPAT_BRK.
- 2
- (od Linuksa 2.6.25) Obsługuje również
losowość kopca (ang. heap). Jest to domyślne
zachowanie, jeśli nie skonfigurowano jądra z opcją
CONFIG_COMPAT_BRK.
- /proc/sys/kernel/real-root-dev
- Plik ten jest udokumentowany w pliku Documentation/initrd.txt w
źródłach jądra Linux.
- /proc/sys/kernel/reboot-cmd (tylko Sparc)
- Ten plik wydaje się stanowić mechanizm podawania
argumentów SPARC-owej ładowarce systemu w ROM/Flash.
Może przekazuje jej, co zrobić po restarcie?
- /proc/sys/kernel/rtsig-max
- (Tylko w wersjach jądra nie późniejszych niż
2.6.7; patrz setrlimit(2)). Plik ten może
służyć do sterowania maksymalną liczbą
zgodnych z POSIX nieobsłużonych (w kolejkach)
sygnałów czasu rzeczywistego w systemie.
- /proc/sys/kernel/rtsig-nr
- (Tylko w wersjach jądra nie późniejszych niż
2.6.7). Plik ten podaje liczbę zgodnych z POSIX
sygnałów czasu rzeczywistego oczekujących obecnie w
kolejce.
- /proc/sys/kernel/sched_rr_timeslice_ms (od Linuksa 3.9)
- Patrz sched_rr_get_interval(2).
- /proc/sys/kernel/sched_rt_period_us (od Linuksa 2.6.25)
- Patrz sched(7).
- /proc/sys/kernel/sched_rt_runtime_us (od Linuksa 2.6.25)
- Patrz sched(7).
- /proc/sys/kernel/sem (od Linuksa 2.4)
- Plik ten zawiera 4 liczby definiujące ograniczenia semaforów
Systemu V. Są to w kolejności:
- SEMMSL
- Maksymalna liczba semaforów w zestawie semaforów.
- SEMMNS
- Ogólnosystemowe ograniczenie liczby semaforów we wszystkich
zestawiach semaforów.
- SEMOPM
- Maksymalna liczba operacji, które mogą zostać podane
w wywołaniu semop(2).
- SEMMNI
- Ogólnosystemowe ograniczenie maksymalnej liczby
identyfikatorów semaforów.
- /proc/sys/kernel/sg-big-buff
- Plik ten zawiera rozmiar bufora niskopoziomowego urządzenia SCSI
(sg). Nie można nim na razie sterować, ale można go
zmienić podczas kompilacji poprzez edycję
include/scsi/sg.h i zmianę wartości
SG_BIG_BUFF. Jednakże nie ma żadnego powodu, aby to
robić.
- /proc/sys/kernel/shm_rmid_forced (od Linuksa 3.1)
- Jeśli plik jest ustawiony na 1, to wszystkie segmenty
pamięci dzielonej Systemu V zostaną oznaczone jako
przeznaczone do zniszczenia po tym, jak liczba dołączonych
procesów spadnie do zera. Innymi słowy nie da się
wówczas utworzyć segmentów pamięci dzielonej,
które istnieją niezależnie od
dołączonych procesów.
- Efekt jest taki, że shmctl(2) IPC_RMID jest
wykonywane na wszystkich istniejących segmentach, jak
również na segmentach tworzonych w przyszłości
(dopóki plik nie zostanie zresetowany do 0). Proszę
zauważyć, że istniejące segmenty nie
dołączone do żadnego procesu zostaną
natychmiast zniszczone, jeśli tylko plik ten jest ustawiony na 1.
Ustawienie tej opcji zniszczy również segmenty utworzone,
lecz nigdy niedołączone - przy zakończeniu procesu
który utworzył dany segment za pomocą
shmget(2).
- Ustawienie tego pliku na 1 udostępnia sposób na sprawdzenie,
że wszystkie segmenty pamięci współdzielonej
Systemu V są liczone w odniesieniu do użycia zasobów
i limitów zasobów. (zob. opis RLIMIT_AS w
getrlimit(2)) do co najmniej jednego procesu).
- Ustawienie tego pliku na 1 daje niestandardowe zachowanie, które
może załamać istniejące aplikacje, dlatego
domyślną wartością pliku jest 0.
Wartość 1 może być używana tylko w
przypadku dużej wiedzy na temat semantyki aplikacji
używających pamięci współdzielonej
Systemu V w danym systemie.
- /proc/sys/kernel/shmall (od Linuksa 2.2)
- Ten plik zawiera ogólnosystemowe ograniczenie całkowitej
liczby stron pamięci wspólnej Systemu V.
- /proc/sys/kernel/shmmax (od Linuksa 2.2)
- Ten plik może służyć do odpytywania o aktualne
ograniczenie maksymalnego rozmiaru tworzonego segmentu pamięci
wspólnej (System V IPC) oraz do zmiany tego ograniczenia.
Jądro wspiera obecnie segmenty pamięci wspólnej do 1
GB. Wartością domyślną jest
SHMMAX.
- /proc/sys/kernel/shmmni (od Linuksa 2.4)
- Ten plik określa ogólnosystemową maksymalną
liczbę segmentów pamięci wspólnej Systemu V,
które można utworzyć.
- /proc/sys/kernel/sysctl_writes_strict (od Linuksa 3.16)
- Wartość w tym pliku określa jak przesunięcia
pliku wpływają na zachowanie aktualizacji wpisów w
plikach pod /proc/sys. Plik może przyjąć trzy
wartości:
- -1
- Zapewniona jest kompatybilna obsługa, bez ostrzeżeń
printk. Każdy write(2) musi
zawierać pełną wartość do zapisu
i każdy zapis na tym samym deskryptorze pliku nadpisze
całą wartość, bez względu na
pozycję pliku.
- 0
- (domyślne) Zapewnia zachowanie podobne jak przy -1, lecz dla
procesów które przeprowadzają zapis przy
przesunięciu pliku różnym od 0 zapisywane
są ostrzeżenia printk.
- 1
- Zachowuje przesunięcie pliku przy zapisie
łańcuchów do plików /proc/sys. Wiele
zapisów nadpisze wartość bufora. Wszystko co
zostanie zapisane pod maksymalną
długość bufora wartości zostanie
zignorowane. Zapis do numerycznych wpisów /proc/sys musi
zawsze następować przy przesunięciu 0, a
wartość musi być w pełni zawarta w buforze
przekazanym do write(2).
- /proc/sys/kernel/sysrq
- Plik kontroluje dozwolone funkcje, które są
wywoływane przy użyciu klawisza SysRq. Domyślnie,
plik zawiera 1, oznaczające że dozwolona jest każde
możliwe żądanie SysRq (w starszych wersjach
jądra, SysRq było domyślnie wyłączone i
konieczne było włączenie go w czasie uruchomienia,
jednak ta sytuacja już nie występuje). Dozwolone
wartości w pliku:
- 0
- Zupełnie wyłącza sysrq
- 1
- Włącza wszystkie funkcje sysrq
- > 1
- Maska bitowa dozwolonych funkcji sysrq, jak poniżej:
- 2
- Włącza kontrolę poziomu logów konsoli
- 4
- Włącza kontrolę klawiatury (SAK, unraw)
- 8
- Włącza debugowanie zrzutów procesów itp.
- 16
- Włącza polecenie sync
- 32
- Włącza przejście systemu plików w tryb tylko
do odczytu
- 64
- Włącza wysyłanie sygnałów do
procesów (term, kill, oom-kill)
- 128
- Włącza ponowne uruchomienie/wyłączenie
komputera
- 256
- Pozwala na ustawianie nice wszystkich zadań czasu
rzeczywistego
- Ten plik istnieje tylko jeśli podczas kompilacji jądra
włączono opcję CONFIG_MAGIC_SYSRQ. Aby
dowiedzieć się więcej, proszę zapoznać
się z plikiem Documentation/sysrq.txt w
źródłach jądra Linux.
- /proc/sys/kernel/version
- Plik zawiera tekst np.:
#5 Wed Feb 25 21:49:24 MET 1998
Gdzie'#5' oznacza, że jest to piąte z kolei
jądro zbudowane z tych samych źródeł, a
następująca dalej data określa, kiedy jądro
zostało zbudowane.
- /proc/sys/kernel/threads-max (od Linuksa 2.3.11)
- Ten plik określa ogólnosystemowe ograniczenie
całkowitej liczby wątków (zadań), jakie
mogą zostać utworzone w systemie.
Od Linuksa 4.1, wartość
którą można zapisać do
threads-max jest ograniczona. Minimalna wartość
którą można wpisać to 20. Maksymalna
jest dana przez stałą FUTEX_TID_MASK (0x3fffffff).
Jeśli do threads-max wpisze się
wartość spoza tego zakresu wystąpi
błąd EINVAL.
Zapisana wartość jest sprawdzana w odniesieniu
do dostępnych stron RAM. Jeśli struktury wątku
zajmie zbyt dużo (więcej niż 1/8)
dostępnych stron RAM, threads-max zostanie odpowiednio
zredukowana.
- /proc/sys/kernel/yama/ptrace_scope (od Linuksa 3.5)
- Zob. ptrace(2).
- /proc/sys/kernel/zero-paged (tylko PowerPC)
- Plik zawiera znacznik. Gdy jest on ustawiony (niezerowy), Linux-PPC
wstępnie zeruje strony w pętli bezczynności.
Prawdopodobnie przyspiesza to get_free_pages.
- /proc/sys/net
- Ten katalog zawiera rzeczy związane z siecią.
Wyjaśnienia dotyczące niektórych plików
zawartych w tym katalogu można znaleźć w
tcp(7) i ip(7).
- /proc/sys/net/core/bpf_jit_enable
- Zob. bpf(2).
- /proc/sys/net/core/somaxconn
- Plik definiuje wartość cechy górnej (sufitu) do
argumentu backlog funkcji listen; patrz strona
podręcznika listen(2), aby dowiedzieć się
więcej.
- /proc/sys/proc
- Ten katalog może być pusty.
- /proc/sys/sunrpc
- Ten katalog obsługuje Sunowskie zdalne wywoływanie procedur
dla sieciowego systemu plikowego (NFS). W niektórych systemach
może nie istnieć.
- /proc/sys/vm
- Ten katalog zawiera pliki sterujące zarządzaniem
pamięcią, buforami i zarządzaniem cachem.
- /proc/sys/vm/compact_memory (od Linuksa 2.6.35)
- Po zapisie 1 do tego pliku wszystkie strefy
są przemieszczane w ten sposób, że —
jeśli to możliwe — pamięć jest
dostępna w ciągłych blokach. Efekt tej akcji
można sprawdzić za pomocą
/proc/buddyinfo.
- Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_COMPACTION.
- /proc/sys/vm/drop_caches (od wersji Linuksa 2.6.16)
- Zapis do tego pliku powoduje zwolnienie przez jądro czystych
buforów, dentries i i-węzłów z pamięci,
powodując zwolnienie pamięci. Może być to
przydatne to testowania zarządzania pamięcią i
wykonywania powtarzalnych testów systemu plików. Zapis do
tego pliku powoduje utratę zalet buforowania, przez co może
spowodować pogorszenie ogólnej wydajności systemu.
Aby zwolnić bufor strony, proszę
użyć:
echo 1 > /proc/sys/vm/drop_caches
Aby zwolnić dentries i i-węzły,
proszę użyć:
echo 2 > /proc/sys/vm/drop_caches
Aby zwolnić bufor strony, dentries i
i-węzły, proszę użyć:
echo 3 > /proc/sys/vm/drop_caches
Ponieważ zapis do tego pliku nie jest destrukcyjny i
brudne obiekty nie są zwalniane, użytkownik powinien
wcześniej uruchomić sync(1).
- /proc/sys/vm/legacy_va_layout (od wersji Linuksa 2.6.9)
- Wartość niezerowa oznacza wyłączenie nowego,
32-bitowego rozmieszczenia mapowania pamięci; jądro
będzie używać starego (2.4) rozmieszczenia dla
wszystkich procesów.
- /proc/sys/vm/memory_failure_early_kill (od Linuksa 2.6.32)
- Kontroluje jak zabijać procesy z nienaprawialnym
błędem pamięci (z reguły 2-bitowy
błąd w module pamięci), które nie mogą
być obsłużone przez jądro, wykryte w tle przez
sprzęt. W niektórych przypadkach (np. jeśli strona ma
wciąż poprawną kopię na dysku), jądro
obsłuży taki błąd w sposób
przezroczysty, bez wpływu na pracę aplikacji. Jednak
jeśli nie istnieje inna, zaktualizowana kopia danych, jądro
zabija procesy, aby zapobiec uszkodzeniu danych wynikłego z
propagacji błędu.
Plik posiada jedną z następujących
wartości:
- 1:
- Wszystkie procesy, które posiadają zmapowaną
uszkodzoną i nieprzeładowaną stronę, są
zabijane zaraz po wykryciu uszkodzenia. Proszę
zauważyć, że nie jest to obsługiwane dla
nielicznych typów stron, takich jak wewnętrzne przypisanie
danych przez jądro lub pamięć podręczna na
dysku (swap), ale działa w przypadku większości stron
użytkownika.
- 0:
- Usuwana (unmap) jest jedynie uszkodzona strona, a zabijane są
wyłącznie procesy, które chcą uzyskać
do niej dostęp.
- Zabicie jest wykonywane za pomocą sygnału SIGBUS z
si_code ustawionym na BUS_MCEERR_AO. Procesy mogą
obsłużyć tę sytuację, jeśli
chcą; proszę zapoznać się z
sigaction(2), aby dowiedzieć się więcej.
Funkcja jest aktywna wyłącznie na
architekturach/platformach z zaawansowaną, maszynową
obsługą sprawdzania i zależy od
możliwości sprzętowych.
Aplikacje mogą indywidualnie przesłonić
ustawienie memory_failure_early_kill za pomocą operacji
PR_MCE_KILL prctl(2).
- Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_MEMORY_FAILURE.
- /proc/sys/vm/memory_failure_recovery (od Linuksa 2.6.32)
- Włącza odzyskiwanie po błędzie pamięci
(jeśli jest obsługiwane przez daną
platformę)
- 1:
- Próbuje odzyskiwać.
- 0:
- Zawsze panikuje przy błędzie pamięci.
- Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_MEMORY_FAILURE.
- /proc/sys/vm/oom_dump_tasks (od Linuksa 2.6.25)
- Włącza tworzenie ogólnosystemowego zrzutu zadania
(bez wątków jądra), gdy jądro wykonuje
OOM-killing. Zrzut zawiera następujące informacje o
każdym zadaniu (wątku, procesie): identyfikator
wątku, realny identyfikator użytkownika, identyfikator grupy
wątku (identyfikator procesu), rozmiar pamięci wirtualnej,
rozmiar zestawu rezydentnego, procesor któremu przydzielono
zadanie, wynik oom_adj (patrz opis /proc/[pid]/oom_adj) i
nazwę polecenia. Jest to przydatne do określenia dlaczego
OOM-killer został przywołany i zidentyfikowania zadania,
które to spowodowało.
Jeśli zawiera wartość zero, ta informacja
nie jest zrzucana. Zrobienie zrzutu stanu pamięci każdego
zadania może nie być wykonalne w bardzo dużych
systemach, z tysiącami zadań. Takie systemy nie powinny
być zmuszane do narażania się na dodatkowy spadek
wydajności w sytuacjach braku pamięci, gdy taka informacja
nie może być przydatna.
Jeśli wartość jest niezerowa, ta
informacja jest pokazywana kiedy tylko OOM-killer rzeczywiście
zabija zadanie zajmujące dużo pamięci.
Domyślną wartością jest 0.
- /proc/sys/vm/oom_kill_allocating_task (od Linuksa 2.6.24)
- Włącza lub wyłącza zabijanie zadania
kolejkującego OOM w sytuacjach braku pamięci
(Out-Of-Memory).
Jeśli jest ustawione na zero OOM-killer przeskanuje
całą listę zadań i do zabicia wybierze
zadania na podstawie heurystyki. Z reguły wybierane są
zadania zajmujące wiele pamięci, które
zwalniają dużą ilość pamięci
po zabiciu.
Jeśli jest ustawione na wartość
niezerową, OOM-killer po prostu zabija zadanie, które
wyzwoliło stan braku pamięci. W ten sposób unika
się potencjalnie kosztownego skanowania listy zadań.
Jeśli /proc/sys/vm/panic_on_oom jest niezerowe,
to ma ono pierwszeństwo, niezależnie od wartości
użytej w /proc/sys/vm/oom_kill_allocating_task.
Domyślną wartością jest 0.
- /proc/sys/vm/overcommit_kbytes (od Linuksa 3.14)
- Ten zapisywalny plik zapewnia alternatywę do
/proc/sys/vm/overcommit_ratio do kontrolowania CommitLimit
gdy /proc/sys/vm/overcommit_memory ma wartość 2.
Pozwala na wykonanie overcommittu ilości pamięci w
jednostkach absolutnych (w kB), zamiast w wartościach procentowych,
jak to ma miejsce przy overcommit_ratio. W ten sposób
można osiągnąć lepszą kontrolę
CommitLimit na systemach z ekstremalnie dużą
ilością pamięci.
Tylko jeden z overcommit_kbytes lub
overcommit_ratio może działać: jeśli
overcommit_kbytes ma wartość niezerową, to
jest używane do obliczenia CommitLimit, w przeciwnym razie
używane jest overcommit_ratio. Zapisanie wartości
do któregokolwiek z plików powoduje że
wartość w drugim jest ustawiana na zero.
- /proc/sys/vm/overcommit_memory
- Plik zawiera tryb rozliczeń pamięci wirtualnej jądra.
Dopuszczalne wartości:
- 0: heurystyczny overcommit (domyślnie)
1: zawsze robi overcommit, nigdy nie sprawdza
2: zawsze sprawdza, nigdy nie robi overcommitu
- W trybie 0 nie są sprawdzane wywołania mmap(2) z
MAP_NORESERVE, a domyślne sprawdzenia są bardzo
słabe, prowadząc do ryzyka zabicia procesu przez
"OOM-killera". Pod Linuksem 2.4 jakakolwiek
wartość niezerowa oznacza tryb 1.
W trybie 2 (dostępnym od Linuksa 2.6), całkowity
adres przestrzeni wirtualnej w systemie którą można
przypisać (CommitLimit w /proc/meminfo) jest
obliczany jako
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
gdzie:
- total_RAM jest sumą pamięci RAM w systemie;
- total_huge_TLB jest sumą pamięci przeznaczoną
dla dużych stron;
- overcommit_ratio jest wartością w
/proc/sys/vm/overcommit_ratio i
- total_swap jest wielkością przestrzeni wymiany.
- Na przykład w systemie z 16 GB fizycznej pamięci RAM i 16 GB
pamięci wymiany, brakiem przestrzeni przeznaczonej na duże
strony i z overcommit_ratio równym 50, ta formuła
daje CommitLimit na poziomie 24 GB.
Od Linuksa 3.14, gdy wartość w
/proc/sys/vm/overcommit_kbytes jest niezerowa, to
CommitLimit jest obliczana w następujący
sposób:
CommitLimit = overcommit_kbytes + total_swap
- /proc/sys/vm/overcommit_ratio (od Linuksa 2.6.0)
- Plik zapisywalny definiujący wartość
procentową pamięci, na której można
wykonać overcommit. Domyślną wartością
jest 50. Zob. opis /proc/sys/vm/overcommit_memory.
- /proc/sys/vm/panic_on_oom (od wersji Linuksa 2.6.18)
- Włącza lub wyłącza panikę jądra
w sytuacjach braku pamięci.
Jeśli plik ma ustawioną wartość 0,
OOM-killer jądra zabija któryś z
nieposłusznych procesów. Z reguły OOM-killer jest w
stanie to wykonać i system może pracować dalej.
Jeśli plik ma ustawioną wartość 1,
to jądro zwykle panikuje przy sytuacji braku pamięci.
Jednak jeśli proces limituje przydzielanie do konkretnych
węzłów używając zasad pamięci
(mbind(2) MPOL_BIND) lub cpuset (cpuset(7)) i te
węzły dotknie problem braku pamięci, to taki proces
może być zabity przez OOM-killer. Nie występuje
wówczas panika, ponieważ pamięć innych
węzłów może być wolna, co oznacza
że system jako całość mógł nie
osiągnąć jeszcze sytuacji braku pamięci.
Jeśli ustawiono wartość 2, to
jądro zawsze panikuje w sytuacji braku pamięci.
Domyślną wartość jest 0. 1 i 2
są przeznaczone do poprawnej pracy klastrów mimo
wystąpienia problemów. Proszę wybrać
właściwą z nich, zgodnie z używanymi
zasadami w takich sytuacjach.
- /proc/sys/vm/swappiness
- Wartość w tym pliku kontroluje jak agresywnie jądro
przenosi strony pamięci do pamięci wymiany (swapu).
Wyższe wartości zwiększają
agresywność, mniejsze zmniejszają ją.
Domyślną wartością jest 60.
- /proc/sysrq-trigger (od Linuksa 2.4.21)
- Zapisanie znaków do tego pliku wyzwala tę samą
funkcję SysRq, jaka zostałaby wykonana przy użyciu
kombinacji ALT-SysRq-<znak> (patrz opis
/proc/sys/kernel/sysrq). Plik jest normalnie zapisywalny tylko dla
roota. Aby dowiedzieć się więcej, proszę
zapoznać się z plikiem Documentation/sysrq.txt w
źródłach jądra Linux.
- /proc/sysvipc
- Podkatalog zawierający pseudopliki msg, sem i
shm. Pliki te zawierają obiekty komunikacji
międzyprocesowej (Interprocess Communication - IPC) Systemu V
(odpowiednio: kolejki komunikatów, semafory i pamięć
wspólną) obecnie istniejące w systemie,
udostępniając informacje podobne do tych, które
są dostępne poprzez ipcs(1). Pliki te
zawierają nagłówki i są sformatowane (jeden
obiekt IPC w wierszu) w celu łatwiejszego zrozumienia.
svipc(7) podaje dodatkowe informacje o zawartości tych
plików.
- /proc/thread-self (od Linuksa 3.17)
- Ten katalog odnosi się do wątku korzystającego z
systemu plików /proc i jest identyczny z katalogiem w
/proc/self/task/[tid] o nazwie będącej
identyfikatorem tego wątku ([tid]).
- /proc/timer_list (od Linuksa 2.6.21)
- Plik tylko do odczytu udostępnia listę wszystkich
bieżących czasomierzy (wysokiej rozdzielczości),
wszystkich źródeł zdarzeń zegara i ich
parametrów w formie czytelnej dla człowieka.
- /proc/timer_stats (od Linuksa 2.6.21)
- Jest to funkcja debugowania uwidaczniające (nad)użycia
czasomierzy w systemie Linux deweloperom jądra i przestrzeni
użytkownika. Może być używana przez
deweloperów zajmujących się jądrem i
przestrzenią użytkownika do weryfikacji, czy ich kod nie
używa w nadmiarze czasomierzy. Celem jest zapobieganie
niepotrzebnym wybudzeniom, aby zoptymalizować zużycie
energii.
Jeśli jest to włączone w jądrze
(CONFIG_TIMER_STATS), lecz nie jest używane, ma narzut
bliski zera oraz relatywnie niewielki narzut struktury danych. Nawet gdy
zbieranie danych jest włączone przy rozruchu, narzut jest
niski: wszystkie blokowania następują według CPU, a
wyszukiwanie jest haszowane.
Plik /proc/timer_stats jest używany do
kontrolowania funkcji próbkowania i odczytu próbek
informacji.
Funkcja timer_stats jest nieaktywna przy rozruchu. Okres
próbkowania można uruchomić poleceniem:
# echo 1 > /proc/timer_stats
Następujące polecenie zatrzymuje okres
próbkowania:
# echo 0 > /proc/timer_stats
Statystyki można pozyskać przy pomocy:
$ cat /proc/timer_stats
Gdy próbkowanie jest włączone,
każdy odczyt z /proc/timer_stats daje nowo zaktualizowane
statystyki. Po wyłączeniu próbkowania,
próbki informacji są zachowywane do momentu
włączenia nowego okresu próbkowania. Pozwala to na
wielokrotny odczyt.
Próbka wyniku z /proc/timer_stats:
$ cat /proc/timer_stats
Timer Stats Version: v0.3
Sample period: 1.764 s
Collection: active
255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer)
71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer)
58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer)
4, 1694 gnome-shell mod_delayed_work_on (delayed_work_timer_fn)
17, 7 rcu_sched rcu_gp_kthread (process_timeout)
...
1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn)
1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn)
1029 total events, 583.333 events/sec
- Kolumny wyniku:
- licznik liczby zdarzeń, po którym opcjonalnie (od Linuksa
2.6.23) występuje litera "D", jeśli jest to
licznik odraczalny;
- PID procesu inicjującego czasomierz
- nazwa procesu inicjującego czasomierz;
- funkcja, w której czasomierz został zainicjowany i
- (w nawiasach) funkcja wywołania zwrotnego związanego z
czasomierzem.
- /proc/tty
- Podkatalog zawierający psuedopliki i podkatalogi sterowników
terminali (tty) oraz protokołów sterowania linią
(line discipline).
- /proc/uptime
- Ten plik zawiera dwie liczby: czas pracy systemu (w sekundach) i
ilość czasu spędzonego na wykonywaniu procesu idle (w
sekundach).
- /proc/version
- Ten napis określa wersję obecnie działającego
jądra. Zawiera on w sobie zawartość
/proc/sys/ostype, /proc/sys/osrelease i
/proc/sys/version. Na przykład:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
- /proc/vmstat (od Linuksa 2.6.0)
- Plik ten wyświetla różne statystyki pamięci
wirtualnej. Każdy wiersz pliku zawiera
pojedynczą parę nazwa-wartość,
oddzieloną białym znakiem. Część z tych
plików jest obecnych jedynie gdy jądro skonfigurowano z
odpowiednimi opcjami (w niektórych przypadkach opcja wymagana dla
poszczególnych plików mogła się
zmieniać w różnych wersjach jądra, więc
nie są one wymienione; więcej informacji można
znaleźć sprawdzając kod źródeł
jądra). Mogą być obecne następujące
pola:
- /proc/zoneinfo (od Linuksa 2.6.13)
- Plik zawiera informacje o strefach pamięci. Może być
przydatny podczas analizowania zachowania pamięci wirtualnej.
Wiele łańcuchów znakowych (np.
środowisko czy linia poleceń) występuje w postaci
wewnętrznej, z polami zakończonymi bajtami NUL ('\0'),
więc jeśli do ich czytania użyje się od
-c lub tr "\000" "\n", to mogą
być bardziej czytelne. Alternatywnie, echo `cat <plik>`
działa równie dobrze.
Ta strona podręcznika jest niekompletna, prawdopodobnie
niedokładna i należy do tych, które powinny być
bardzo często poprawiane.
cat(1), dmesg(1), find(1), free(1),
ps(1), tr(1), uptime(1), chroot(2),
mmap(2), readlink(2), syslog(2), slabinfo(5),
hier(7), namespaces(7), time(7), arp(8),
hdparm(8), ifconfig(8), init(1), lsmod(8),
lspci(8), mount(8), netstat(8), procinfo(8),
route(8), sysctl(8)
Pliki w źródłach jądra Linux:
Documentation/filesystems/proc.txt
Documentation/sysctl/fs.txt, Documentation/sysctl/kernel.txt,
Documentation/sysctl/net.txt i
Documentation/sysctl/vm.txt.
Angielska wersja tej strony pochodzi z wydania 4.05 projektu Linux
man-pages. Opis projektu, informacje dotyczące
zgłaszania błędów, oraz najnowszą
wersję oryginału można znaleźć pod
adresem https://www.kernel.org/doc/man-pages/.
Jiffy to wartość wynosząca, w
zależności od architektury, od 1 do 10 ms (4 ms w przypadku
i386).
Autorami polskiego tłumaczenia niniejszej strony
podręcznika man są: Przemek Borys (PTM)
<pborys@p-soft.silesia.linux.org.pl>, Robert Luberda
<robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią
projektu manpages-pl; uwagi, pomoc, zgłaszanie
błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
4.05 oryginału.