Podstawą jest posiadanie dostępu do konta root -a systemie operacyjnym Linuks Fedora na maszynie, której będziemy musieli zidentyfikować poszczególne zasoby sprzętowe. Bez tego oczywiście da się odnaleźć różne informacje, ale nie do wszystkich ma dostęp zwykły użytkownik, chyba, że posiada śrubokręt i młotek.
Większość informacji w systemie Linuks Fedora można odczytać z procfs. Jest to to wirtualny system plików, który pozwala na komunikację z jądrem uniksowego systemu operacyjnego poprzez interfejs VFS. Jego struktura plików i katalogów nie jest związana z żadnym nośnikiem danych, a występuje jedynie w pamięci operacyjnej komputera.
Rozpoznanie procesora
Jest to nie wątpliwie najprostsza rzecz jaką możemy zidentyfikować w systemie Linux. Wystarczy jako root wpisać następujące czerwome polecenie:root@adam-desktop:/home/adam# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 67
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+
stepping : 3
cpu MHz : 3000.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
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 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 6027.49
clflush size : 64
power management: ts fid vid ttp tm stc
processor : 1
vendor_id : AuthenticAMD
cpu family : 15
model : 67
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+
stepping : 3
cpu MHz : 3000.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
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 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 6027.49
clflush size : 64
power management: ts fid vid ttp tm stc
Jeżeli nasz procesor jest wielordzeniowy, lub nasza maszyna posiada kilka fizycznych procesorów, to taki układ danych:
procesor: rdzeń_id
…
Bogomips: bogomips_rdzenia
zostanie wyświetlony kilka razy jeden za drugim, i będą się różnić tylko pierwszym i ostatnim wierszem.
O ile w przypadku maszyn z maksymalnie jednym procesorem najbardziej istotną informacją są obsługiwane flagi - wspiera sprzętowe wirtualizację (flaga vmx dla Intela i svm dla AMD), 64 bitowy procesor (flaga lm), tak w przypadku płyt dwu i więcej procesorowych różnica chociaż jednego z tych elementów:
vendor_id
cpu family
model
model name
stepping
flags
może spowodować wiele problemów. Między innymi:
- niestabilnej pracy usług i aplikacji
- maszyny wirtualne lub usługa je nadzorująca może się nie uruchomić
- niestabilnej pracy systemu
- nie możności uruchomienia systemu
Innym sposobem na pozyskanie informacji o procesorze jest wykorzystanie pliku logu dmesg znajdującego się domyślnie w
/var/log
. W tym celu posłużymy się poleceniem: cat /var/log/dmesg | grep -i cpu
root@adam-desktop:/home/adam# cat /var/log/dmesg | grep -i cpu
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Transmeta TransmetaCPU
[ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs
[ 0.000000] PERCPU: Allocating 45056 bytes of per cpu data
[ 0.000000] NR_CPUS: 64, nr_cpu_ids: 2, nr_node_ids 1
[ 0.000000] Initializing CPU#0
[ 0.004000] SLUB: Genslabs=12, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[ 0.004000] HPET: 3 timers in total, 0 timers will be used for per-cpu timer
[ 0.004000] Initializing cgroup subsys cpuacct
[ 0.004000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[ 0.004000] CPU: L2 Cache: 1024K (64 bytes/line)
[ 0.004000] CPU: Physical Processor ID: 0
[ 0.004000] CPU: Processor Core ID: 0
[ 0.251533] CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03
[ 0.004000] Initializing CPU#1
[ 0.004000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[ 0.004000] CPU: L2 Cache: 1024K (64 bytes/line)
[ 0.004000] CPU: Physical Processor ID: 0
[ 0.004000] CPU: Processor Core ID: 1
[ 0.336193] CPU1: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03
[ 0.336229] Brought up 2 CPUs
[ 0.336329] CPU0 attaching sched-domain:
[ 0.336330] domain 0: span 0-1 level CPU
[ 0.336336] CPU1 attaching sched-domain:
[ 0.336337] domain 0: span 0-1 level CPU
[ 0.440013] Switched to high resolution mode on CPU 0
[ 0.440242] Switched to high resolution mode on CPU 1
[ 0.885651] cpufreq: No nForce2 chipset.
[ 0.915950] processor ACPI_CPU:00: registered as cooling_device1
[ 0.915973] processor ACPI_CPU:01: registered as cooling_device2
[ 10.469541] cpuidle: using governor ladder
[ 10.469542] cpuidle: using governor menu
[ 10.470477] powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ processors (2 cpu cores) (version 2.20.00)
root@adam-desktop:/home/adam#
Jak widać ilość danych jest spora, ale jeżeli weźmiemy pod uwagę ich użyteczność to jest bardzo niska. Z całego liseningu najistotniejsze wpisy to:
CPU: Processor Core ID: 0
CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03
CPU: Processor Core ID: 1
CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03
CPU: Processor Core ID: 0 CPU: Processor Core ID: 1 informują, iż procesor jest dwurdzeniowy. W przypadku gdyby to były dwa niezależne procesory tych wpisów by nie było.
Rozpoznanie dysków twardych
W celu identyfikacji dysków zainstalowanych w naszej maszynie posłużymy się poleceniem:
hdparm
. Jednakże ze względu na różny sposób prezentacji urządzeń w systemie, który jest zależny od między innymi rodzaju interfejsu polecenie wyjściowe może się różnić Aby zidentyfikować sposób prezentacji dysku (nie partycji) wykorzystamy polecenie: fdisk
z odpowiednim filtrowaniem, które ostatecznie będzie wyglądać tak:root@adam-desktop:/home/adam# fdisk -l | grep -i disk
Disk /dev/sda: 320.0 GB, 320072933376 bytes
Disk identifier: 0xdcfddcfd
Disk /dev/sdb: 80.0 GB, 80026361856 bytes
Disk identifier: 0x05720571
root@adam-desktop:/home/adam#
Widzimy 2 dyski /dev/sda: 320.0 GB i /dev/sdb: 80.0 GB
Skoro już znamy ścieżkę do naszych urządzeń to możemy przystąpić do ich identyfikacji. Do tego celu wykorzystamy polecenie:
root@adam-desktop:/home/adam# hdparm -i /dev/sda |grep -i model
Model=ST3320620AS , FwRev=3.AAK , SerialNo= 9QF55JBD
root@adam-desktop:/home/adam#
W powyższym przypadku bez problemu pozyskaliśmy informację o dysku twardym. Znamy dokładny model dysku wraz z rewizją oraz numerem seryjnym. W ten sposób uzyskane dane w zupełności wystarczą do znalezienia wszelkich informacji na temat naszego dysku.
Rozpoznanie napędów optycznych
W celu identyfikacji napędu optycznego w naszym komputerze posłużymy się poleceniem:
cat /var/log/dmesg | grep -i rom
root@adam-desktop:/home/adam# cat /var/log/dmesg | grep -i rom
[ 0.000000] Move RAMDISK from 00000000378b9000 - 0000000037fef9e9 to 0087b000 - 00fb19e9
[ 0.356457] pci 0000:00:04.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.356663] pci 0000:00:09.1: PME# supported from D3hot D3cold
[ 0.356740] pci 0000:00:0a.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.356783] pci 0000:00:0a.1: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.357034] pci 0000:00:0e.1: PME# supported from D3hot D3cold
[ 0.357099] pci 0000:00:10.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.357161] pci 0000:00:11.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.357198] pci 0000:00:16.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.357427] pci 0000:02:0b.0: PME# supported from D0 D1 D2 D3hot
[ 10.379846] scsi 8:0:1:0: CD-ROM HL-DT-ST DVD-RAM GSA-H54L 1.00 PQ: 0 ANSI: 5
[ 10.384013] Uniform CD-ROM driver Revision: 3.20
[ 10.384067] sr 8:0:1:0: Attached scsi CD-ROM sr0 "sr0 nazwa napedu scieżka do niego wygląda tak /dev/sr0"
[ 10.392063] usb usb1: configuration #1 chosen from 1 choice
[ 10.450031] usb usb2: configuration #1 chosen from 1 choice
[ 10.465058] rtc_cmos 00:05: RTC can wake from S4
[ 11.103410] usb 1-9: configuration #1 chosen from 1 choice
[ 11.620084] usb 2-1: configuration #1 chosen from 1 choice
[ 12.139075] usb 2-2: configuration #1 chosen from 1 choice
[ 21.470034] ck804xrom ck804xrom_init_one(): Unable to register resource 0x00000000ff000000-0x00000000ffffffff - kernel bug?
root@adam-desktop:/home/adam#
Uzyskaliśmi informacje o napędzie
Znając ścieżkę systemową możemy teraz sprawdzić również nasz napęd optyczny za pomocą polecenia:
root@adam-desktop:/home/adam# hdparm -i /dev/sr0 | grep -i model
Model=HL-DT-STDVD-RAM GSA-H54L , FwRev=1.00 , SerialNo=
root@adam-desktop:/home/adam#
Rozpoznanie płyty głównej
Żeby zidentyfikować płytę główną wydajemy polecenie z pod roota :
root@adam-desktop:/home/adam# dmidecode -t baseboard
# dmidecode 2.9
SMBIOS 2.4 present.
Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
Manufacturer: ASUSTeK Computer INC.
Product Name: M2N32-SLI DELUXE
Version: 1.XX
Serial Number: 123456789000
root@adam-desktop:/home/adam#
Moja płyta główna to :
Manufacturer: ASUSTeK Computer INC.
Product Name: M2N32-SLI DELUXE
Serial Number: 123456789000
Z pierwszej lini odczytamy nazwę producenta, z drugiej dokładny model, a z trzeciego numer rewizji płyty. W rzeczywistości ostatni wiersz, w przypadku nie firmowych zestawów możemy pominąć. Powodem tego jest fakt, iż płyty główne do tzw. składaków, rzadko kiedy mają uzupełniony numer seryjny. W przypadku markowych zestawów identyfikacja podzespołu odbywa się po przez numer seryjny.
Dodatkowe informacje o płycie głównej (np. kontroler USB, informacje o chipsecie mostka południowego) można odczytać używając polecenia
lspci
.Rozpoznanie biosu
Aby odczytać informacje o wersji naszego biosu w systemie Linux wykorzystamy polecenie:dmidecode -t bios
root@adam-desktop:/home/adam# dmidecode -t bios
# dmidecode 2.9
SMBIOS 2.4 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies, LTD
Version: ASUS M2N32-SLI DELUXE ACPI BIOS Revision 1201
Release Date: 06/20/2007
Address: 0xE0000
Runtime Size: 128 kB
ROM Size: 1024 kB
Characteristics:
PCI is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/360 KB floppy services are supported (int 13h)
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 KB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported
Targeted content distribution is supported
Handle 0x003E, DMI type 13, 22 bytes
BIOS Language Information
Installable Languages: 3
n|US|iso8859-1
n|US|iso8859-1
r|CA|iso8859-1
Currently Installed Language: n|US|iso8859-1
root@adam-desktop:/home/adam#
Na ekran została wypisana pokaźna liczba danych. Jednak interesujące nas fragmenty znajdują się głównie tuż przy wywołaniu polecenia, i są to:
BIOS Information
Vendor: Phoenix Technologies, LTD
Version: ASUS M2N32-SLI DELUXE ACPI BIOS Revision 1201
Release Date: 06/20/2007
Co to znaczy:
Vendor: Phoenix Technologies, LTD -> rodzaj biosu
Version: ASUS M2N32-SLI DELUXE ACPI "BIOS Revision 1201 -> wersja biosu"
Release Date: 06/20/2007 -> data wydania biosu
Rozpoznanie pamięci
Pamięci sprawdzamy wydając polecenie :
dmidecode -t memory
Konsola wyrzuciła nam dość sporo informacji ale najważniejsze są linie wyglądające tak:
Handle 0x0040, DMI type 17, 27 bytes
Memory Device
Array Handle: 0x003F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM_A1
Bank Locator: Bank0/1
Type: Unknown
Type Detail: None
Speed: 800 MHz (1.2 ns)
Manufacturer: None
Serial Number: None
Asset Tag: None
Part Number: None
Handle 0x0041, DMI type 17, 27 bytes
Memory Device
Array Handle: 0x003F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM_B1
Bank Locator: Bank2/3
Type: Unknown
Type Detail: None
Speed: 800 MHz (1.2 ns)
Manufacturer: None
Serial Number: None
Asset Tag: None
Part Number: None
Handle 0x0042, DMI type 17, 27 bytes
Memory Device
Array Handle: 0x003F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM_A2
Bank Locator: Bank4/5
Type: Unknown
Type Detail: None
Speed: 800 MHz (1.2 ns)
Manufacturer: None
Serial Number: None
Asset Tag: None
Part Number: None
Handle 0x0043, DMI type 17, 27 bytes
Memory Device
Array Handle: 0x003F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM_B2
Bank Locator: Bank6/7
Type: Unknown
Type Detail: None
Speed: 800 MHz (1.2 ns)
Manufacturer: None
Serial Number: None
Asset Tag: None
Part Number: None
Można odczytać że posiadam 4 kości pamięci po 1024 Mb pojemności o pracujące z częstotliwością 800 Mhz
Rozpoznanie karty sieciowej
Informacje o karcie sieciowej możemy uzyskać na dwa sposoby. Pierwszym z nich jest wykorzystanie polecenia
lspci | grep -i ethZ powyższego listingu bez problemu jesteśmy w stanie zidentyfikować karty sieciowe znajdującej się w naszej maszynie. Są to dwie karty sieciowe:root@adam-desktop:/home/adam# lspci | grep -i eth 00:10.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:11.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) root@adam-desktop:/home/adam#
nVidia Corporation MCP55 Ethernet (rev a3)
Drugim sposobem jest przejrzenie logu dmesg. Jednak podobnie jak w poprzednich przypadkach trzeba użyć odpowiedniego filtrowania aby nie zostać zalanym zbędnymi danymi, które w tym przypadku nas nie interesują. A zatem wykorzystamy polecenie:
cat /var/log/dmesg | grep -i eth
A za tym które polecenie wyświetla więcej przydatnych informacji? W tym przypadku będzie to lspci. Powodem jest fakt, iż oprócz dokładnej identyfikacji producenta i chipsetu karty sieciowej, możemy również odczytać numer jej rewizji.
W remoncie post.
Rozpoznanie karty graficznej
Najszybszym i w miarę dokładnym sposobem na określenie rodzaju i modelu karty graficznej jest użycie polecenia:
lspci | grep -i vga
root@adam-desktop:/home/adam# lspci | grep -i vga
01:00.0 VGA compatible controller: ATI Technologies Inc RV570 [Radeon X1950 Pro]
root@adam-desktop:/home/adam#
W tym przykładzie z wyniku wykonania polecenia oprócz informacji o producencie, modelu GPU oraz rodzinie do której należy karta graficzna nie uzyskamy nic więcej. Ilość i typ pamięci czy interfejs komunikacji PCI/AGP nadal są nieznane.
Rozpoznanie karty dźwiękowej
W celu określenia karty dźwiękowej jaka została zainstalowana w naszej maszynie, posłużymy się poleceniem:lspci | grep -i audio
root@adam-desktop:/home/adam# lspci | grep -i audio
00:0e.1 Audio device: nVidia Corporation MCP55 High Definition Audio (rev a2)
root@adam-desktop:/home/adam#
Wynik polecenia, a co za tym idzie w ten sposób pozyskane dane są ogólnikowe i mogą nie wystarczyć do poprawnej identyfikacji. Jednakże bez większych problemów jesteśmy w stanie określić producenta oraz rodzinę, do której przynależy nasz dźwiękówka.
Rozpoznanie innych komponentów
W przypadku urządzeń podłączanych np. przez USB, czyli między innymi:- napędy USB
- drukarki
- skanery
- kamery
cat /var/log/messages
. Jednakże ilość pozyskanych w ten sposób danych jest bardzo duża, wyłowienie interesujących nas kawałków może być bardzo trudne.Polecenie rozpoznające użądzenia podłączone pod USB:
lsusb
root@adam-desktop:/home/adam# lsusb
Bus 001 Device 006: ID 054c:0243 Sony Corp. MicroVault Flash Drive
Bus 001 Device 004: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 06b9:4061 Alcatel Telecom SpeedTouch ISDN or ADSL Modem
Bus 002 Device 002: ID 041e:4052 Creative Technology, Ltd Live! Cam Vista IM
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@adam-desktop:/home/adam#