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
- Exploring procfs
- procfs (wikipedia.org)
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 ;-)