Einführung
In diesem Lab erlernen Sie die grundlegenden Fähigkeiten, um Hardware-Geräte in einer Linux-Umgebung zu identifizieren, zu untersuchen und zu verwalten. Sie sammeln praktische Erfahrungen mit leistungsstarken Befehlszeilen-Dienstprogrammen, um zu verstehen, wie das Betriebssystem mit physischen Komponenten interagiert. Ziel ist es, ein fundiertes Verständnis für das Hardware-Management unter Linux aufzubauen, was für die Systemadministration, Leistungsoptimierung und Fehlerbehebung unerlässlich ist.
Sie beginnen damit, Blockgeräte mit lsblk und lshw aufzulisten, um einen Überblick über den Speicher zu erhalten. Anschließend verwenden Sie udevadm, um detaillierte Geräteeigenschaften und Regeln zu prüfen. Das Lab führt Sie dann durch die Anzeige der PCI- und SCSI-Bus-Hierarchien, um zu sehen, wie Geräte miteinander verbunden sind. Abschließend tauchen Sie in die systemnahen Informationen ein, indem Sie die virtuellen Dateisysteme /proc und /sys untersuchen, was Ihnen einen umfassenden Blick auf die Hardware Ihres Systems aus der Perspektive des Kernels ermöglicht.
Blockgeräte mit lsblk und lshw auflisten
In diesem Schritt lernen Sie, wie Sie die an Ihr System angeschlossenen Blockgeräte identifizieren und auflisten. Blockgeräte sind Speichergeräte, die Daten in Blöcken fester Größe übertragen, wie z. B. Festplatten, Solid-State-Laufwerke (SSDs) und USB-Sticks. Wir verwenden hierfür zwei gängige Befehle: lsblk und lshw.
Zuerst verwenden wir den Befehl lsblk, um eine baumartige Ansicht aller verfügbaren Blockgeräte zu erhalten. Dieser Befehl liest das sysfs-Dateisystem und die udev-Datenbank aus, um Informationen zu sammeln.
Führen Sie den Befehl lsblk in Ihrem Terminal aus:
lsblk
Sie sehen eine Ausgabe ähnlich der folgenden, die die Geräte und die darauf enthaltenen Partitionen auflistet.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 89.4M 1 loop /snap/lxd/31333
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 63.9M 1 loop /snap/core20/2318
loop3 7:3 0 242.9M 1 loop /snap/firefox/2710
loop4 7:4 0 244.5M 1 loop /snap/firefox/2800
loop5 7:5 0 349.7M 1 loop /snap/gnome-3-38-2004/140
loop6 7:6 0 349.7M 1 loop /snap/gnome-3-38-2004/143
loop7 7:7 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop9 7:9 0 87M 1 loop /snap/lxd/28373
loop10 7:10 0 73.9M 1 loop /snap/core22/2010
loop11 7:11 0 38.8M 1 loop /snap/snapd/21759
loop12 7:12 0 50.9M 1 loop /snap/snapd/24718
loop13 7:13 0 63.8M 1 loop /snap/core20/2599
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
└─vda3 252:3 0 39.8G 0 part /var/snap/firefox/common/host-hunspell
/
Der Name Ihrer primären Festplatte kann je nach VM-Image vda, sda oder nvme0n1 lauten. Verwenden Sie in den nächsten Schritten immer den Festplattennamen, den lsblk für das unter / eingehängte Gerät anzeigt.
Hier ist eine kurze Erläuterung der Spalten:
NAME: Der Gerätename.MAJ:MIN: Die Major- und Minor-Gerätenummern, die vom Kernel zur Identifizierung des Geräts verwendet werden.RM: Wechselmedium (1 für ja, 0 für nein).SIZE: Die Größe des Geräts.RO: Schreibgeschütztes Gerät (1 für ja, 0 für nein).TYPE: Der Gerätetyp (z. B. disk, part, loop).MOUNTPOINTS: Wo das Gerät im Dateisystem eingehängt ist.
Während lsblk hervorragend für einen schnellen Überblick geeignet ist, kann der Befehl lshw (list hardware) wesentlich detailliertere Informationen liefern. Der Befehl lshw ist möglicherweise nicht standardmäßig installiert. Lassen Sie uns ihn zuerst installieren.
sudo apt-get update && sudo apt-get install -y lshw
Sobald die Installation abgeschlossen ist, können Sie lshw verwenden, um detaillierte Informationen zu bestimmten Hardwareklassen zu erhalten. Um beispielsweise Details zu Speichercontrollern (wie Ihrem SATA- oder NVMe-Controller) anzuzeigen, können Sie die Option -class storage verwenden.
sudo lshw -class storage
Die Ausgabe zeigt Informationen über die Speicherschnittstelle selbst.
*-pnp00:03
product: PnP device PNP0700
physical id: 3
capabilities: pnp
*-ide
description: IDE interface
product: 82371SB PIIX3 IDE [Natoma/Triton II]
vendor: Intel Corporation
physical id: 1.1
bus info: pci@0000:00:01.1
version: 00
width: 32 bits
clock: 33MHz
capabilities: ide isa_compat_mode bus_master
configuration: driver=ata_piix latency=0
resources: irq:0 ioport:1f0(size=8) ioport:3f6 ioport:170(size=8) ioport:376 ioport:c060(size=16)
*-scsi
description: SCSI storage controller
product: Virtio block device
vendor: Red Hat, Inc.
physical id: 4
bus info: pci@0000:00:04.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: scsi msix bus_master cap_list
configuration: driver=virtio-pci latency=0
resources: irq:0 memory:fe000000-fe000fff memory:fe001000-fe001fff
Um detailliertere Informationen zu Partitionen und logischen Volumes zu erhalten, die mit lsblk vergleichbar, aber ausführlicher sind, verwenden Sie die Option -class volume.
sudo lshw -class volume
Dieser Befehl liefert eine Fülle von Informationen, einschließlich logischer Namen, Seriennummern und Fähigkeiten jeder Partition.
*-volume:0
description: BIOS Boot partition
vendor: EFI
physical id: 1
bus info: scsi@0:0.0.0,1
logical name: /dev/vda1
serial: xxxx-xxxx
size: 1MiB
capacity: 1MiB
capabilities: primary
*-volume:1
description: EFI partition
vendor: EFI
physical id: 2
bus info: scsi@0:0.0.0,2
logical name: /dev/vda2
serial: XXXX-XXXX
size: 200MiB
capacity: 200MiB
capabilities: boot fat initialized
configuration: FATs=32 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro state=mounted
*-volume:2
description: Linux filesystem
physical id: 3
bus info: scsi@0:0.0.0,3
logical name: /dev/vda3
size: 39GiB
capacity: 39GiB
capabilities: primary ext4 initialized
configuration: filesystem=ext4 lastmountpoint=/ modified=2024-xx-xx mounted=2024-xx-xx state=mounted
Durch die Verwendung von lsblk und lshw erhalten Sie sowohl einen Überblick als auch eine detaillierte, systemnahe Ansicht der Speichergeräte auf Ihrem Linux-System.
Geräteeigenschaften mit udevadm untersuchen
Im vorherigen Schritt haben Sie gelernt, wie man Blockgeräte auflistet. Jetzt gehen wir einen Schritt weiter und untersuchen die spezifischen Eigenschaften dieser Geräte mit dem Befehl udevadm. udev ist der Geräte-Manager für den Linux-Kernel, der Geräteknoten im Verzeichnis /dev dynamisch verwaltet. Der Befehl udevadm ist das Kontrollwerkzeug für udev, mit dem Sie die udev-Datenbank nach detaillierten Geräteinformationen abfragen können. Dies ist besonders nützlich, bevor Sie benutzerdefinierte udev-Regeln erstellen, um Geräte automatisch zu verwalten.
Lassen Sie uns die Eigenschaften der Hauptfestplatte untersuchen, die Ihr Root-Dateisystem enthält. Identifizieren Sie zuerst die Root-Partition und die zugehörige Festplatte:
ROOT_PARTITION=$(findmnt -n -o SOURCE /)
DISK_NAME=$(lsblk -no PKNAME "$ROOT_PARTITION")
echo "$ROOT_PARTITION -> /dev/$DISK_NAME"
Um die Eigenschaften dieser Festplatte in einem einfachen Schlüssel-Wert-Format anzuzeigen, führen Sie den folgenden Befehl aus. Das Flag -q property weist udevadm an, die Datenbank nach allen bekannten Eigenschaften des Geräts abzufragen, und -n "/dev/$DISK_NAME" gibt den Namen des Geräteknotens an.
udevadm info -q property -n "/dev/$DISK_NAME"
Die Ausgabe ist eine Liste von Umgebungsvariablen, die das Gerät beschreiben. Ihre genauen Werte werden abweichen, aber die Ausgabe sollte in etwa so aussehen:
DEVPATH=/devices/pci0000:00/0000:00:04.0/nvme/nvme0/nvme0n1
DEVNAME=/dev/nvme0n1
DEVTYPE=disk
MAJOR=259
MINOR=0
SUBSYSTEM=block
USEC_INITIALIZED=xxxxxxxxx
ID_MODEL=Alibaba Cloud Elastic Block Storage
ID_REVISION=1.0
ID_SERIAL=Alibaba_Cloud_Elastic_Block_Storage_xxxxxxxxxxxx
ID_SERIAL_SHORT=xxxxxxxxxxxx
ID_TYPE=disk
ID_PATH=pci-0000:00:04.0-nvme-1
ID_PATH_TAG=pci-0000_00_04_0-nvme-1
DEVLINKS=/dev/disk/by-id/nvme-... /dev/disk/by-path/pci-0000:00:04.0-nvme-1
TAGS=:systemd:
Diese Ausgabe liefert wertvolle Details wie ID_MODEL, ID_PATH und eine eindeutige ID_SERIAL. Diese Eigenschaften werden häufig verwendet, um udev-Regeln zu schreiben, die auf ein bestimmtes Gerät angewendet werden, unabhängig von der Reihenfolge, in der es vom Kernel erkannt wurde.
Für eine noch detailliertere, hierarchische Ansicht können Sie das Gerät über seinen sysfs-Pfad abfragen. Suchen Sie zuerst den sysfs-Pfad für die von Ihnen ausgewählte Festplatte:
udevadm info -q path -n "/dev/$DISK_NAME"
Die Ausgabe ist der Pfad des Geräts innerhalb des /sys-Dateisystems:
/devices/pci0000:00/0000:00:04.0/nvme/nvme0/nvme0n1
Verwenden Sie nun diesen Pfad mit den Flags -a (attribute walk) und -p (path), um alle Geräteattribute von den übergeordneten Geräten bis hin zum angegebenen Gerät anzuzeigen. Dies vermittelt ein vollständiges Bild des Geräts und seiner übergeordneten Controller.
udevadm info -a -p "$(udevadm info -q path -n "/dev/$DISK_NAME")"
Dieser Befehl erzeugt eine wesentlich längere Ausgabe, die Attribute für das Blockgerät selbst sowie für den übergeordneten Speichercontroller und das PCI-Gerät anzeigt. Dieser Detailgrad ist für fortgeschrittene Geräteverwaltung und Fehlerbehebung unerlässlich. Wir zeigen hier aufgrund der Länge nicht die vollständige Ausgabe, aber fühlen Sie sich frei, sie zu erkunden.
Die PCI- und SCSI-Bus-Hierarchie anzeigen
In diesem Schritt erkunden Sie, wie Geräte auf Systembussen organisiert sind. Ein Bus ist ein Kommunikationssystem, das Daten zwischen Komponenten innerhalb eines Computers überträgt. Wir konzentrieren uns auf zwei wichtige Busse: PCI (Peripheral Component Interconnect) und SCSI (Small Computer System Interface). Das Verständnis ihrer Hierarchie hilft bei der Diagnose von Hardwareproblemen und beim Verständnis, wie Geräte wie Ihre Festplatte mit dem System verbunden sind.
Untersuchen wir zuerst den PCI-Bus, der die meisten Hochgeschwindigkeitskomponenten auf dem Motherboard verbindet. Der Befehl lspci ist das Standardwerkzeug hierfür. Das Paket pciutils, das diesen Befehl bereitstellt, ist normalerweise vorinstalliert, aber wir stellen sicher, dass es vorhanden ist.
sudo apt-get update && sudo apt-get install -y pciutils
Um nun die PCI-Bus-Hierarchie in einer baumartigen Struktur anzuzeigen, verwenden Sie den Befehl lspci mit der Option -t.
lspci -t
Die Ausgabe sieht in etwa so aus und zeigt die Verbindungen zwischen Bussen und Geräten:
-[0000:00]-+-00.0
+-01.0
+-01.1
+-01.3
+-04.0
\-05.0
Dieser Baum zeigt die Verbindungen, aber nicht, um welche Geräte es sich handelt. Um die Ausgabe nützlicher zu machen, fügen Sie die Option -v (verbose) hinzu. Dies schließt Gerätenamen und den für jedes Gerät verwendeten Kernel-Treiber ein. Da die Ausgabe lang sein kann, leiten wir sie an more weiter, damit Sie durchblättern können. Drücken Sie die Leertaste zum Scrollen und q zum Beenden.
lspci -tv | more
Die Ausgabe wird wesentlich detaillierter sein:
-[0000:00]-+-00.0 Intel Corporation 440FX - 82441FX PMC [Natoma]
+-01.0 Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
+-01.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI
+-02.0 Cirrus Logic GD 5446
+-03.0 Red Hat, Inc. Virtio console
+-04.0 Intel Corporation QEMU NVM Express Controller
+-05.0 Red Hat, Inc. Virtio network device
\-06.0 Red Hat, Inc. Virtio memory balloon
Aus dieser Ausgabe können Sie die spezifischen Hardwarekomponenten sehen, die mit dem PCI-Bus verbunden sind, wie z. B. den NVMe-Speichercontroller und andere virtuelle Geräte.
Schauen wir uns als Nächstes den SCSI-Bus an. In dieser VM ist die Hauptfestplatte möglicherweise über NVMe statt über Virtio oder SCSI angebunden, aber Sie können dennoch alle vorhandenen SCSI-Geräte erkunden. Eine benutzerfreundliche Möglichkeit, diese Informationen anzuzeigen, ist der Befehl systool. Installieren wir das Paket sysfsutils, das diesen bereitstellt.
sudo apt-get install -y sysfsutils
Verwenden Sie nun systool mit der Option -b scsi, um Geräte auf dem SCSI-Bus aufzulisten.
systool -b scsi
Dieser Befehl zeigt die am SCSI-Bus angeschlossenen Geräte an:
Bus = "scsi"
Device = "host0"
Device = "host1"
Systemnahe Ressourcen in /proc untersuchen
In diesem Schritt tauchen Sie in das virtuelle Dateisystem /proc ein, um systemnahe Ressourcen zu untersuchen. Das /proc-Dateisystem enthält keine echten Dateien auf der Festplatte; stattdessen ist es eine direkte Schnittstelle zu den Datenstrukturen des Kernels. Durch das Lesen von Dateien in /proc erhalten Sie einen Echtzeit-Einblick, wie das System Hardwareressourcen wie DMA-Kanäle, Interrupts und E/A-Ports verwaltet.
Schauen wir uns zuerst die DMA-Kanäle (Direct Memory Access) an. DMA ermöglicht es bestimmten Hardwaregeräten, direkt auf den Systemspeicher zuzugreifen, ohne die CPU zu belasten, was die Leistung verbessert. Um zu sehen, welche DMA-Kanäle derzeit verwendet werden, können Sie den Inhalt der Datei /proc/dma anzeigen.
cat /proc/dma
Die Ausgabe ist in der Regel sehr einfach, insbesondere auf modernen oder virtualisierten Systemen.
4: cascade
Diese Ausgabe zeigt die registrierten DMA-Kanäle. Der cascade-Kanal wird verwendet, um Interrupt-Controller älterer Bauart zu verketten, und ist auf moderner Hardware oft der einzige, der aufgelistet wird.
Untersuchen wir als Nächstes die Interrupt-Anforderungen (IRQs). Wenn ein Hardwaregerät die Aufmerksamkeit der CPU benötigt, sendet es ein Interrupt-Signal. Die Datei /proc/interrupts liefert Statistiken darüber, wie viele Interrupts für jede IRQ-Nummer empfangen wurden.
cat /proc/interrupts
Die Ausgabe zeigt eine detaillierte Aufschlüsselung der Interrupt-Aktivität pro CPU-Kern.
CPU0
0: 10 IO-APIC 2-edge timer
1: 2 IO-APIC 1-edge i8042
8: 1 IO-APIC 8-edge rtc0
9: 0 IO-APIC 9-fasteoi acpi
11: ... IO-APIC 11-fasteoi ata_piix, uhci_hcd
12: 4 IO-APIC 12-edge i8042
NMI: 0 Non-maskable interrupts
LOC: ... Local timer interrupts
...
Hier ist die Bedeutung der Spalten:
- Die erste Spalte ist die IRQ-Nummer.
- Die Spalte
CPU0(und andere CPU-Spalten, falls vorhanden) zeigt die Anzahl der von diesem CPU-Kern verarbeiteten Interrupts. - Die letzte Spalte zeigt den Namen des Gerätetreibers, der diesem Interrupt zugeordnet ist. Dies ist sehr nützlich für die Fehlersuche bei Hardwarekonflikten.
Schauen wir uns abschließend die E/A-Ports (I/O ports) an. Dies sind spezielle Speicheradressen, die die CPU verwendet, um direkt mit Hardwaregeräten zu kommunizieren. Die Datei /proc/ioports listet die E/A-Port-Bereiche auf, die derzeit für Geräte reserviert sind. Da die Liste lang sein kann, ist es am besten, sie mit less zu betrachten. Sie können mit den Pfeiltasten scrollen und q zum Beenden drücken.
less /proc/ioports
Sie sehen eine Liste von Speicherbereichen und die Geräte, die sie verwenden.
0000-0cf7 : PCI Bus 0000:00
0020-0021 : PIC1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : PIC2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:01.1
0170-0177 : ata_piix
01f0-01f7 : 0000:00:01.1
01f0-01f7 : ata_piix
...
Diese Ausgabe zeigt den Speicheradressbereich und das Gerät, das ihn beansprucht hat. Sie können beispielsweise Bereiche für die Tastatur, Timer und den ata_piix-Festplattencontroller sehen, den wir im vorherigen Schritt gesehen haben.
Geräteinformationen im /sys-Dateisystem erkunden
In diesem letzten Schritt erkunden Sie das sysfs-Dateisystem, das unter /sys eingehängt ist. Während /proc Informationen über Prozesse und einige Hardwareressourcen bereitstellt, bietet /sys eine strukturiertere Sicht auf das Gerätemodell des Systems. Es exportiert eine hierarchische Darstellung von Kernel-Objekten, Geräten und Treibern. Viele der Werkzeuge, die Sie in den vorherigen Schritten verwendet haben, wie lsblk und udevadm, beziehen ihre Informationen durch das Lesen aus /sys.
Schauen wir uns zuerst an, wie Blockgeräte dargestellt werden. Das Verzeichnis /sys/block enthält ein Unterverzeichnis für jedes dem System bekannte Blockgerät.
Listen Sie den Inhalt von /sys/block auf, um die Geräte zu sehen:
ls -l /sys/block
Die Ausgabe zeigt die Blockgeräte, einschließlich der Loop-Geräte und Ihrer Hauptfestplatte. Beachten Sie, dass es sich hierbei um symbolische Links handelt, die auf ihre tatsächlichen Speicherorte innerhalb der /sys/devices-Hierarchie verweisen.
total 0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 loop1 -> ../devices/virtual/block/loop1
...
lrwxrwxrwx 1 root root 0 Jan 1 00:00 nvme0n1 -> ../devices/pci0000:00/0000:00:04.0/nvme/nvme0/nvme0n1
Suchen Sie erneut die übergeordnete Festplatte für Ihr Root-Dateisystem und untersuchen Sie dann dieses Verzeichnis. Dieses Verzeichnis enthält verschiedene Dateien, die die Attribute des Geräts darstellen.
ROOT_PARTITION=$(findmnt -n -o SOURCE /)
DISK_NAME=$(lsblk -no PKNAME "$ROOT_PARTITION")
ls /sys/block/"$DISK_NAME"
Sie sehen eine Liste von Dateien und Verzeichnissen:
alignment_offset diskseq holders nvme0n1p2 ro uevent
bdi events inflight nvme0n1p3 size wwid
capability events_async integrity power slaves
dev events_poll_msecs mq queue stat
device ext_range nsid range subsystem
discard_alignment hidden nvme0n1p1 removable trace
Jede Datei enthält eine spezifische Information. Um beispielsweise die Größe der Festplatte zu ermitteln, können Sie die Datei size lesen.
cat /sys/block/"$DISK_NAME"/size
Die Ausgabe ist eine Zahl:
83886080
Diese Zahl stellt die Größe des Geräts in 512-Byte-Sektoren dar. Sie können auch Verzeichnisse für jede Partition sehen, wie nvme0n1p1, nvme0n1p2 und nvme0n1p3, die ihre eigenen Attributsätze enthalten. Bei anderen Images können die Partitionsnamen ein anderes Gerätepräfix verwenden.
Erkunden wir als Nächstes, wie Geräte nach Bustyp im Verzeichnis /sys/bus organisiert sind. Dies bietet eine alternative Möglichkeit, durch die Gerätehierarchie zu navigieren.
ls /sys/bus
Sie sehen eine Liste verschiedener Bustypen, die vom Kernel unterstützt werden:
acpi amba clocksource container cpu event_source hid i2c i8042 ide mdio_bus memory pci pci_express platform scsi serial serio soc system usb virtio workqueue
Auch wenn Ihre Festplatte kein Virtio-Blockgerät ist, stellt die VM möglicherweise andere Virtio-Geräte bereit. Schauen wir in das Verzeichnis /sys/bus/virtio/devices, um sie aufzulisten.
ls -l /sys/bus/virtio/devices
Die Ausgabe zeigt die Virtio-Geräte, identifiziert durch ihre Geräte-IDs. Dies sind ebenfalls symbolische Links, die zurück auf den Hauptgerätebaum verweisen.
total 0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 virtio0 -> ../../../devices/pci0000:00/0000:00:05.0/virtio0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 virtio1 -> ../../../devices/pci0000:00/0000:00:04.0/virtio1
Durch das Erkunden von /sys können Sie direkt auf die Rohdaten zugreifen, die höherwertige Werkzeuge verwenden, um über Systemhardware zu berichten. Es ist eine leistungsstarke Methode, um zu verstehen, wie der Linux-Kernel Geräte sieht und organisiert.
Zusammenfassung
In diesem Lab haben Sie gelernt, Hardware-Geräte in einer Linux-Umgebung zu identifizieren und zu untersuchen. Sie haben geübt, den Befehl lsblk zu verwenden, um Blockgeräte und deren Partitionen in einem baumartigen Format aufzulisten, sowie den Befehl lshw, um detailliertere Hardwarespezifikationen zu erhalten. Das Lab behandelte zudem die Verwendung von udevadm, um Geräteeigenschaften zu prüfen, die vom udev-Subsystem verwaltet werden, sowie die Anzeige der Bus-Hierarchien des Systems für PCI- und SCSI-Geräte.
Darüber hinaus haben Sie die systemnahen Informationen erkundet, die der Kernel über Pseudo-Dateisysteme bereitstellt. Sie haben das /proc-Dateisystem untersucht, um Rohdaten zu Systemressourcen anzuzeigen, und sind durch das /sys-Dateisystem navigiert, um eine strukturierte Darstellung der Geräte und ihrer Attribute zu erkunden. Dies vermittelte ein umfassendes Verständnis dafür, wie Hardwareinformationen direkt vom Betriebssystem gefunden und interpretiert werden können.



