Pracując z terminalem, czasem potrzebujemy odczytać informacje o sprzęcie z jakiego składa się maszyna na jakiej pracujemy. Na szczęście te informacje w Linuksie udostępnione są w bardzo prosty sposób dzięki procfs (od ang. process file system, system plików procesów). Jest to pseudo-system plików lub po prostu wirtualny system plików. Pozwala ona na komunikację użytkownika z jądrem Linuksa poprzez interfejs VFS.

Ten wirtualny system plików domyślnie jest montowany podczas uruchamiania systemu. Jeśli nie został on zamontowany, możemy wykonać to ręcznie wydając polecenie:

mount -t proc proc /proc

Z punktu widzenia użytkownika mamy dostęp do ciekawych plików w katalogu /proc. Katalogi oraz pliki w /proc nie są powiązane z żadnym nośnikiem danych i występują tylko w pamięci operacyjnej. Zawartość plików oraz katalogów jakie się tam znajdują, jest generowana na bieżąco przez specjalne struktury danych jądra systemu. Reprezentują one stan systemu w danej chwili.

Dane te najczęściej są widoczne w postaci plików tekstowych. Dzięki temu możemy odczytać informacje na temat działających procesów:

[zenfir@dune ~]$ cat /proc/5388/status
Name:   java
State:  S (sleeping)
SleepAVG:       88%
Tgid:   5388
Pid:    5388
PPid:   5379
TracerPid:      0
Uid:    7003    7003    7003    7003
Gid:    7000    7000    7000    7000
FDSize: 256
Groups: 300 7000
VmSize:  1947856 kB
VmLck:         0 kB
VmRSS:   1365816 kB
VmData:  1863560 kB
VmStk:        40 kB
VmExe:        42 kB
VmLib:   1815482 kB
StaBrk: 08055000 kB
Brk:    0a28f000 kB
StaStk: bffff640 kB
ExecLim:        ffffffff
Threads:        500
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000081001
SigCgt: 1000000180004cce
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000

W innych plikach znajdziemy następujące informacje:

  • /proc/pid/cmdline – zawiera polecenie jakie zostało wydane do uruchomienia procesu. Znajduje się tu także lista parametrów dodana do polecenia.
  • /proc/pid/cwd – jest to dowiązanie symboliczne, które kieruje do katalogu roboczego procesu.
  • /proc/pid/environ – zawiera listę zmiennych środowiskowych z jakich korzysta proces.
  • /proc/pid/exe – jest to dowiązanie symboliczne do programu, który stworzył ten proces.
  • /proc/pid/fd/ – w tym katalogu znajdują się dowiązania do plików, które otworzył proces.
  • /proc/pid/mem – zawiera pamięć zaalokowaną przez proces.
  • /proc/pid/stat – informacje na temat statusu procesu.
  • /proc/pid/statm – informacje na temat statusu użycia pamięci przez proces.

Wystarczy odczytać odpowiedni plik z podkatalogu o nazwie reprezentowanej przez numer identyfikacyjny procesu (PID). Do niektórych plików również można zapisywać dane. W ten sposób przekazujemy komendy bezpośrednio do działającego jądra.

Informacje o systemie

Jądro systemu, od momentu startu, prowadzi różnego rodzaju statystyki, które zapisuje do pliku: /proc/stat. Możemy dzięki niemu dowiedzieć się ile aktualnie przetwarzanych jest procesów, oraz jaka ich liczba została stworzona od czasu startu systemu. Przykładowa zawartość pliku:

cpu  2166624532 3768773 269277449 7976513937 467370938 2624892 0
cpu0 736783532 484162 112879704 1825044715 43307026 2253920 0
cpu1 404062846 811281 53602688 2209090371 53156469 29343 0
cpu2 452806084 1394625 51279276 2028816516 187874859 165868 0
cpu3 572972069 1078703 51515781 1913562333 183032583 175759 0
intr 14396813661 1705418717 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2962956409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1065644447 0 0 0 0 0 0 0 1757 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72857706 0 0 0 0 0
ctxt 333782462608
btime 1203692335
processes 24751955
procs_running 3
procs_blocked 0

Informacje na temat Swapu znajdują się w:

[paszczak000@muszelka ~]$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda5                               partition       2008084 228     -1
/dev/sda6                               partition       2008084 0       -2

Informacje o sprzęcie

Znając już katalog /proc, możemy pokusić się o poszukanie informacji na temat sprzętu jaki znajduje się na maszynie. W prosty i szybki sposób możemy dostać się do informacji na procesora czy pamięci.

Procesor
Odczytując dane z pliku /proc/cpuinfo, możemy dowiedzieć się wielu informacji na temat procesora(ów) zainstalowanych w maszynie.

[paszczak000@muszelka ~]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 10
model name      : AMD Athlon(tm) XP 2600+
stepping        : 0
cpu MHz         : 2079.845
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse pni syscall mmxext 3dnowext 3dnow
bogomips        : 4120.57

Korzystając z poleceń Basha możemy wyciągnąć interesujące nas parametry np:

Prędkość procesora

cat /proc/cpuinfo | grep 'cpu MHz' | sed -e 's/.*: //'

Model

cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //'

Pamięć
Odczytując dane z pliku /proc/meminfo, możemy dowiedzieć się wielu informacji na temat pamięci zainstalowanej w maszynie.

[paszczak000@muszelka ~]$ cat /proc/meminfo
MemTotal:       515528 kB
MemFree:          8564 kB
Buffers:         11396 kB
Cached:         266144 kB
SwapCached:          0 kB
Active:         305280 kB
Inactive:       164832 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       515528 kB
LowFree:          8564 kB
SwapTotal:     1124508 kB
SwapFree:      1121780 kB
Dirty:             476 kB
Writeback:           0 kB
Mapped:         268384 kB
Slab:            23164 kB
CommitLimit:   1382272 kB
Committed_AS:   480904 kB
PageTables:       2956 kB
VmallocTotal:   511992 kB
VmallocUsed:     29864 kB
VmallocChunk:   477684 kB

Jeśli interesują nas dane na temat wolnej pamięci możemy wydać polecenie:

cat /proc/meminfo | grep MemFree

Pamięci masowe
Aby odczytać informacje na temat urządzeń podłączonych do IDE, musimy przejrzeć pliki w podkatalogach katalogu /proc/ide/. Znajdziemy tam katalogi o nazwach hda, hdb, a w nich model, capacity, cache. Aby obejrzeć dane na temat dysku twardego możemy wydać polecenie:

cat /proc/ide/hda/model

Urządzenia typu SCSI oraz SATA mają identyfikatory sda, sdb i tak dalej. Aby obejrzeć listę podłączonych dysków do wykrytych kontrolerów można przejrzeć plik /proc/scsi/scsi. Znajdziemy tam podstawowe informacje na temat modeli dysków.

[paszczak000@muszelka ~]$ cat /proc/scsi/scsi
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST360015A        Rev: 3.53
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: HL-DT-ST Model: DVDRAM GSA-4163B Rev: A100
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: Maxtor 6Y120M0   Rev: YAR5
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi17 Channel: 00 Id: 00 Lun: 00
  Vendor: Seagate  Model: FreeAgent Go     Rev: 100F
  Type:   Direct-Access                    ANSI  SCSI revision: 02

Informacje na temat partycji znajdziemy w pliku:

[paszczak000@muszelka ~]$ cat /proc/partitions
major minor  #blocks  name

   8     0  143374000 sda
   8     1     200781 sda1
   8     2    1004062 sda2
   8     3   10008495 sda3
   8     4          1 sda4
   8     5    2008093 sda5
   8     6    2008093 sda6
   8     7    2008093 sda7
   8     8    2008093 sda8
   8     9    4008186 sda9
   8    10   15783831 sda10
   8    11  104334111 sda11
   8    16  143374000 sdb/

Natomiast zamontowane partycje można podejrzeć w /proc/mounts.

Więcej ciekawych informacji można wyciągnąć z manuala proc(5).

Linki

Podobne artykuły

  • Nadmierne używanie cat'a prowadzi do osteoporozy. Zamiast:

    <code>cat /proc/cpuinfo | grep 'cpu MHz' | sed -e 's/.*: //'</code>

    należy użyć:

    <code>grep 'cpu MHz' /proc/cpuinfo| sed -e 's/.*: //'</code>

    Podobnie należy postąpić w każdym innym przypadku.

  • Jasne ;-) Słuszna uwaga ;-)

  • hyhyhy

    jak w matriksie: Czy widzisz kobiete w czerwieni posrod cyferek ?

  • Hahahaha ;-)