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:

[bash][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[/bash]

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:

[bash]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[/bash]

Informacje na temat Swapu znajdują się w:

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

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.

[bash][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[/bash]

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.

[bash][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[/bash]

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.

[bash][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[/bash]

Informacje na temat partycji znajdziemy w pliku:

[bash][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/[/bash]

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

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

Linki

4 Komentarze

  1. 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.

Odpowiedz