Izpētīt/proc failu sistēmu Linux


Šodien mēs ieskatīsimies/proc direktorijā un iepazīsimies ar to./Proc direktorijs atrodas visās Linux sistēmās, neatkarīgi no garšas vai arhitektūras.

Viens nepareizs uzskats, kas mums nekavējoties jānoskaidro, ir tas, ka/proc direktorijs NAV īsta failu sistēma šī termina nozīmē. Tā ir virtuālā failu sistēma. Procfs satur informāciju par procesiem un citu informāciju par sistēmu. Tas ir saistīts ar/proc un uzstādīts sāknēšanas laikā.

Pirmkārt, ļaujiet nokļūt/proc direktorijā un apskatīt:

# cd /proc

Pirmā lieta, ko pamanīsit, ir tā, ka ir daži pazīstami skanoši faili un pēc tam vesela virkne numurētu direktoriju. Numerētie direktoriji attēlo procesus, labāk zināmus kā PID, un tajos - komandu, kas tos aizņem. Faili satur tādu sistēmas informāciju kā atmiņa (meminfo), CPU informācija (cpuinfo) un pieejamās failu sistēmas.

Lasiet arī: Linux bezmaksas komanda, lai pārbaudītu fizisko atmiņu un mainītu atmiņu

Vispirms apskatīsim vienu no failiem:

# cat /proc/meminfo

kas atgriež kaut ko līdzīgu šim:

MemTotal:         604340 kB
MemFree:           54240 kB
Buffers:           18700 kB
Cached:           369020 kB
SwapCached:            0 kB
Active:           312556 kB
Inactive:         164856 kB
Active(anon):      89744 kB
Inactive(anon):      360 kB
Active(file):     222812 kB
Inactive(file):   164496 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         89724 kB
Mapped:            18012 kB
Shmem:               412 kB
Slab:              50104 kB
SReclaimable:      40224 kB
...

Kā redzat,/proc/meminfo satur virkni informācijas par jūsu sistēmas atmiņu, ieskaitot kopējo pieejamo daudzumu (kb) un brīvo daudzumu augšējās divās rindiņās.

Palaižot komandu cat jebkuram failam/proc, tiks izvadīts to saturs. Informācija par visiem failiem ir pieejama man lapā, palaižot:

# man 5 /proc/<filename>

Es jums ātri uzzināšu/proc failos:

  1. /proc/cmdline - kodola komandrindas informācija.
  2. /proc/console - informācija par pašreizējām konsolēm, ieskaitot tty.
  3. /proc/devices - ierīču draiveri, kas pašlaik ir konfigurēti darbojošajam kodolam.
  4. /proc/dma - informācija par pašreizējiem DMA kanāliem.
  5. /proc/fb - kadru bufera ierīces.
  6. /proc/filesystems - pašreizējās failu sistēmas, kuras atbalsta kodols.
  7. /proc/iomem - pašreizējā ierīču sistēmas atmiņas karte.
  8. /proc/ioports - reģistrēti ostas reģioni ieejas izvades saziņai ar ierīci.
  9. /proc/loadavg - vidējā sistēmas slodze.
  10. /proc/locks - faili, kurus pašlaik bloķē kodols.
  11. /proc/meminfo - informācija par sistēmas atmiņu (skat. iepriekš minēto piemēru).
  12. /proc/misc - dažādi draiveri, kas reģistrēti dažādām galvenajām ierīcēm.
  13. /proc/modules - Pašlaik ielādētie kodola moduļi.
  14. /proc/mounts - visu sistēmas izmantoto stiprinājumu saraksts.
  15. /proc/partitions - detalizēta informācija par sistēmai pieejamo nodalījumiem.
  16. /proc/pci - informācija par katru PCI ierīci.
  17. /proc/stat - ieraksts vai dažāda statistika, kas tiek glabāta no pēdējās atsāknēšanas.
  18. /proc/swap - informācija par vietu maiņu.
  19. /proc/uptime - informācija par darbalaiku (sekundēs).
  20. /proc/version - instalēta kodola versija, gcc versija un Linux izplatīšana.

/ Proc numurētajos direktorijos atradīsit dažus failus un saites. Atcerieties, ka šo direktoriju numuri korelē ar tajos palaistās komandas PID. Izmantosim piemēru. Manā sistēmā ir mapes nosaukums/proc/12:

# cd /proc/12
# ls
attr        coredump_filter  io         mounts      oom_score_adj  smaps    wchan
autogroup   cpuset           latency    mountstats  pagemap        stack
auxv        cwd              limits     net         personality    stat
cgroup      environ          loginuid   ns          root           statm
clear_refs  exe              maps       numa_maps   sched          status
cmdline     fd               mem        oom_adj     schedstat      syscall
comm        fdinfo           mountinfo  oom_score   sessionid      task

Ja es skrienu:

# cat /proc/12/status

Es saņemu sekojošo:

Name:	xenwatch
State:	S (sleeping)
Tgid:	12
Pid:	12
PPid:	2
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:
Threads:	1
SigQ:	1/4592
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	ffffffffffffffff
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	1
Cpus_allowed_list:	0
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	84
nonvoluntary_ctxt_switches:	0

Tātad, ko tas nozīmē? Nu, svarīgā daļa ir augšpusē. No statusa faila mēs varam redzēt, ka šis process pieder xenwatch. Pašreizējais stāvoklis guļ, un procesa ID ir acīmredzami 12. Mēs arī varam redzēt, kas to darbojas, jo UID un GID ir 0, kas norāda, ka šis process pieder root lietotājam.

Jebkurā numurētā direktorijā jums būs līdzīga failu struktūra. Vissvarīgākie un to apraksti ir šādi:

  1. cmdline - procesa komandrinda
  2. vide - vides mainīgie
  3. fd - failu deskriptori
  4. robežas - satur informāciju par procesa robežām
  5. ar stiprinājumiem saistīta informācija

Numurētajā direktorijā pamanīsit arī vairākas saites:

  1. cwd - saite uz pašreizējo procesa direktoriju
  2. exe - saite uz procesa izpildāmo failu
  3. sakne - saite uz procesa darba direktoriju

Tādējādi jums vajadzētu sākt iepazīties ar/proc direktoriju. Tam vajadzētu arī sniegt ieskatu par to, kā vairākas komandas iegūst informāciju, piemēram, uptime, lsof, mount un ps, lai tikai nosauktu dažus.