Каталог /proc в Linux

В этой статье мы заглянем внутрь каталога /proc и познакомимся с его содержимым. Каталог /proc присутствует во всех системах Linux, независимо от версии или архитектуры.

Первое на чем хотелось бы остановиться, это развеять одно распространенное заблуждение. Оно заключается в том, что каталог /proc НЕ является настоящей файловой системой в прямом смысле этого слова. Это, так называемая, виртуальная файловая система. В procfs содержится информация о процессах и другая системная информация. Он сопоставляется с /proc и монтируется во время загрузки операционной системы.

Итак, давайте перейдем в этот каталог.

# cd /proc

Теперь взглянем на содержимое этого каталог

# ls
1        14       183  193  202  213      30       3743385  3777742  40   513  6    649     761810  946   buddyinfo  execdomains  key-users    mounts        stat           vmstat
10       15       184  194  203  215      31       3743387  3780600  41   526  607  76      803     961   bus        fb           kmsg         mtrr          swaps          zoneinfo
1001     1501881  185  195  204  216      32       3743393  3782157  42   529  616  761801  825     962   cgroups    filesystems  kpagecgroup  net           sys
1006     16       186  196  205  22       33       3743394  3783226  43   532  639  761802  826     967   cmdline    fs           kpagecount   pagetypeinfo  sysrq-trigger
11       17       187  197  206  2339526  34       3743396  3785210  506  533  641  761803  9       968   consoles   interrupts   kpageflags   partitions    sysvipc
12       178      188  198  207  25       35       3743431  3785391  507  534  642  761804  915     969   cpuinfo    iomem        loadavg      sched_debug   thread-self
1275     179      189  199  208  26       3590607  3743432  3786575  508  535  643  761805  916     970   crypto     ioports      locks        schedstat     timer_list
1287     18       19   2    209  27       36       3743457  3786576  509  536  644  761806  919     971   devices    irq          mdstat       scsi          tty
1288230  180      190  20   210  29       37       3755133  38       510  537  645  761807  920     994   diskstats  kallsyms     meminfo      self          uptime
1291     181      191  200  211  296      3743372  3771306  39       511  538  646  761808  921     999   dma        kcore        misc         slabinfo      version
13       182      192  201  212  3        3743379  3774937  4        512  542  648  761809  927     acpi  driver     keys         modules      softirqs      vmallocinfo

Первое, что можно заметить, это то, что есть несколько знакомых по названиям файлов, а также куча пронумерованных каталогов. Эти каталоги представляют собой процессы, более известные как PID, и внутри них команду, которая их занимает. Файлы содержат системную информацию, такую ​​как память (meminfo), информацию о процессоре (cpuinfo) и доступные файловые системы.

Заглянем в один из файлов:

$ cat /proc/meminfo
MemTotal:        5885640 kB
MemFree:         3411236 kB
MemAvailable:    5208636 kB
Buffers:            5020 kB
Cached:          1866900 kB
SwapCached:            0 kB
Active:           823052 kB
Inactive:        1219040 kB
Active(anon):        640 kB
Inactive(anon):   170408 kB
Active(file):     822412 kB
Inactive(file):  1048632 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB
...

Как можно видеть, файл /proc/meminfo содержит много информации о памяти вашей системы, включая общий доступный объем (в КБ) и свободный объем. Выполнение команды cat для любого из файлов в /proc выведет их содержимое. Информацию о файлах можно получить на страницах руководств, выполнив:

# man 5 /proc/имя_файла

Краткое описание этих файлов следующее:

  • /proc/cmdline — параметры загрузки ОС
  • /proc/consoles — информация об используемой консоли
  • /proc/devices — драйверы устройств, работающие в данный момент
  • /proc/dma — информация о текущих каналах DMA
  • /proc/fb — устройства фреймбуфера
  • /proc/filesystems — файловые системы, поддерживаемые текущей версией ядра
  • /proc/iomem — здесь содержится текущая карта системной памяти для устройств
  • /proc/ioports — зарегистрированные диапазоны портов и устройства, которые их используют.
  • /proc/loadavg — показывает нагрузку на систему в разрезе времени, а так же количество запущенных процессов и PID последнего процесса.
  • /proc/locks — файлы заблокированные ядром
  • /proc/meminfo — информация о системной памяти.
  • /proc/misc — драйверы для подключаемых устройств.
  • /proc/modules — загруженные в данный момент модули ядра.
  • /proc/mounts — точки монтирования, используемые системой.
  • /proc/partitions — информация о разделах, доступных системе.
  • /proc/pci — информация о pci-устройствах.
  • /proc/stat — записи и различная статистическая информация, хранящаяся с момента последней перезагрузки.
  • /proc/swaps — информация о месте в разделе Swap.
  • /proc/uptime — информация о времени работы с момента запуска системы ( в секундах)
  • /proc/version — версия ядра, версия GCC и установленный дистрибутив Linux.

В пронумерованных каталогах /proc находится несколько файлов и ссылок. Номера этих каталогов соответствуют PID выполняемой в них команды. Давайте рассмотрим пример. В моей системе есть имя папки /proc/507:

# cd /proc/507
# ls
attr       clear_refs       cpu_resctrl_groups  exe      io         maps       mountstats  oom_adj        patch_state  sched      smaps         statm    timens_offsets  wchan
autogroup  cmdline          cpuset              fd       limits     mem        net         oom_score      personality  schedstat  smaps_rollup  status   timers
auxv       comm             cwd                 fdinfo   loginuid   mountinfo  ns          oom_score_adj  projid_map   sessionid  stack         syscall  timerslack_ns
cgroup     coredump_filter  environ             gid_map  map_files  mounts     numa_maps   pagemap        root         setgroups  stat          task     uid_map

Давайте заглянем в файл status

$ cat status
Name:   scsi_tmf_0
Umask:  0000
State:  I (idle)
Tgid:   507
Ngid:   0
Pid:    507
PPid:   2
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups:
NStgid: 507
NSpid:  507
NSpgid: 0
NSsid:  0
Threads:        1
SigQ:   7/22833
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 000001ffffffffff
CapEff: 000001ffffffffff
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Speculation_Store_Bypass:       thread vulnerable
Cpus_allowed:   3
Cpus_allowed_list:      0-1
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        2
nonvoluntary_ctxt_switches:     0

Разберем, что все это значит? Важная часть находится наверху. Из файла состояния видно, что этот процесс принадлежит scsi_tmf_0. Находится в состоянии простоя, и его идентификатор процесса, равен 507. Мы также можем видеть, кто запустил процесс. Здесь UID и GID равны 0, что указывает на то, что этот процесс принадлежит пользователю root.

Во всех пронумерованных каталога набор файлов одинаковый, но самые интересные для работы следующие:

  • cmdline — командная строка процесса;
  • environ — переменные окружения;
  • fd — файловые дискрипторы;
  • limits — информация о лимитах процесса;
  • mounts — сопутствующая информация о монтировании

В каталоге также присутствую несколько ссылок:

  • cwd — ссылка на текущий рабочий каталог;
  • exe — ссылка на исполняемый файл процесса
  • root — ссылка на рабочий каталог процесса

Заключение

Данная статья поможет начать знакомство с каталогом /proc. Именно из этого каталога берут свою информацию такие команлы, как uptime, lsof, mount, ps и так далее.

Was this helpful?

0 / 0

Добавить комментарий 0