Egal, ob beim Kauf gebrauchter Hardware, dem Einbinden neuer Rechnerkomponenten oder einer Inventarisierung: Es ist wichtig, zu wissen, was sich im und rund um das Rechnergehäuse tatsächlich verbirgt.
PC-Prospekte und Aufkleber auf einem Rechner können, müssen aber nicht unbedingt zutreffende Angaben über verbaute Hardware machen. Auf Computerflohmärkten oder bei der Gebrauchtgeräteabgabe von Betrieben schützen Sie sich deshalb besser vor dem Kauf vermeintlicher Schnäppchen. Nehmen Sie bei solchen Gelegenheiten einen USB-Stick mit einem darauf installierten Linux zum Einkauf mit. Booten Sie den fraglichen Rechner damit und untersuchen Sie, was wirklich in dem Gerät steckt.
Linux bringt dazu eine ganze Reihe von Bordmitteln mit. Mit den Kommandozeilenprogrammen Lscpu, Lspci, Lshw und Lsblk erhalten Sie detaillierte Informationen über die inneren Werte eines Rechners. Mit Lsusb listen Sie USB-Geräte auf. Die Werkzeuge helfen nicht nur dabei, bei der Übernahme oder Erfassung unbekannter Rechnerhardware Aussagen über deren Leistung und Verwendbarkeit zu treffen. Sie unterstützen Sie zudem später bei Konfigurationsarbeiten und der Fehlersuche.
Die Befehle helfen Ihnen außerdem dabei, ausgefallenere Hardware wie Scanner, SDR-Empfänger, Messgeräte oder Controller in ein System einzubinden. Auch für Sicherheitsaufgaben taugen einige der Kommandos: Mit Lsusb etwa bleibt ein unbefugt angesteckter USB-Stick nicht lange unbemerkt. Alle im Folgenden gezeigten Aufrufe funktionieren sowohl auf aktuellen PCs als auch auf dem Raspberry Pi.
Prozessorinformationen
Durch die Eingabe des Kommandos cat /proc/cpuinfo lesen Sie sämtliche Informationen über die eingebaute CPU aus. Allerdings läuft bei den heutzutage üblichen Mehrkern-CPUs für jeden Kern mehr oder weniger dieselbe Information über das Terminal. Mit Less blättern Sie in der Ausgabe, mit Grep filtern Sie Informationen gezielt heraus. Abbildung 1 zeigt ein Beispiel.

Abbildung 1: Das Auslesen von /proc/cpuinfo/ liefert ausführliche Infos zu den im Rechner verbauten Prozessoren.
Mit dem Kommandozeilenprogramm Lscpu ermitteln Sie einzelne Daten zu den CPUs bei Bedarf gezielter. Gegenüber dem Auslesen mit /proc/cpuinfo/ lässt sich die Ausgabe hinsichtlich Informationen und Darstellung nach den eigenen Bedürfnissen gestalten. Einige wichtige Optionen von Lscpu führt die Tabelle “Lscpu: Optionen” auf.
|
Aktion |
Option |
Parameter |
|---|---|---|
|
besser lesbare Ausgabe |
|
Beschränkung auf Einzelangaben mit |
|
Angaben zum Cache |
|
– |
|
Ausgabeliste für Skripte |
|
Beschränkung auf Einzelangaben mit |
|
Ausgabe im JSON-Format |
|
– |
Beim Eingrenzen auf einzelne Angaben schreiben Sie Option und Angabe bündig, ohne Leerstelle, also beispielsweise lscpu -e=cpu,mhz. Groß- und Kleinschreibung spielen bei den Parametern keine Rolle. Das zeigt auch Abbildung 2. Das Programm gibt in einem Rutsch zahlreiche Angaben aus, die meisten sind selbsterklärend. Die Tabelle “Lscpu: Ausgabedetails” erklärt einige Punkte.
|
Eintrag |
Bedeutung |
|---|---|
|
|
Prozessorarchitektur, |
|
|
Verarbeitungsbreite (32 oder 64 Bit), moderne CPUs können beides nutzen. |
|
|
Anzahl der logischen CPUs (Threads) |
|
|
Zahl der verwendeten CPUs |
|
|
Hersteller der CPU |
|
|
Produktbezeichnung des Prozessors |
|
|
Modellnummer der CPU |
|
|
Zahl der Prozessoren je Hardwarekern |
|
|
Zahl der Hardwarekerne im Prozessor |
|
|
maximaler CPU-Takt |
|
|
minimaler CPU-Takt |
|
|
ergänzende Angaben zu Prozessoreigenschaften |
|
|
Unterstützung für Virtualisierung, beispielsweise Intel VT-x |
|
|
Cache-Speicherausstattung |
|
|
|
|
|
System ist vom Problem betroffen |
|
|
Problem wurde entschärft |
|
|
System ist nicht betroffen |
PCI-Bus auslesen
Am PCI-Bus arbeitet ein Großteil der wichtigen Baugruppen eines Rechnersystems. Die entsprechende Busbelegung fragen Sie mittels des Kommandos lspci ab. Abbildung 3 zeigt den grundsätzlichen Aufbau einer Ausgabezeile von Lspci. Ganz links finden Sie die Busnummer, den von einem Gerät belegten Platz (Gerät) sowie die Funktion. Alle drei zusammen bezeichnet man als Domain oder als Steckplatz.

Abbildung 3: Eine Ausgabezeile von Lspci enthält zahlreiche Informationen zum Gerät und seiner Funktion.
Es folgen die Geräteklasse, der Hersteller, die Funktion und Bezeichnung des Geräts sowie die Revisionsnummer. Vor der Busnummer kann noch die PCI-Domain-Nummer stehen, wenn Sie das explizit mit der Option -D abfragen. Eine Aufschlüsselung der Geräteklassen und Hersteller finden Sie in der Datei /usr/share/misc/pci.ids, aus der auch Lspci seine Informationen bezieht.
Für die Abfrage einiger der Daten benötigen Sie Root-Rechte. Nicht privilegierte Nutzer erhalten die Meldung Capabilities: <access denied>, was keine Fehlermeldung darstellt. In der Abbildung 4 sehen Sie den Unterschied zwischen den Ausgaben bei einem ansonsten identischen Aufruf mit User- und Root-Rechten.

Abbildung 4: Bei einer Anfrage mit Root-Rechten (unten) spuckt ein ansonsten identischer Lspci-Aufruf zusätzliche Informationen aus.
Die PCI-Daten lassen sich bei Bedarf auch in Listenform ausgeben, was einen besseren Überblick über das Gesamtsystem liefert. Lspci ermöglicht eine gezielte Suche nach der Bus-Adresse, dem Vendor- und dem Device-Code. Ansonsten stehen die üblichen Shell-Mittel wie Grep zur Filterung bereit. Häufiger benötigte Optionen finden Sie in der Tabelle “Lspci: Optionen”.
|
Anweisung |
Option |
Hinweise |
|---|---|---|
|
Baumansicht |
|
– |
|
Detailgrad |
|
erfordert teilweise Root-Rechte |
|
Begrenzung auf eine Domain |
|
|
|
Ausgabe des Kernel-Treibers |
|
– |
|
Ausgabe für Shell-Skripte |
|
– |
|
Anzeige mit Pfad durch PCI-Bridge |
|
– |
|
Hersteller und Gerätebezeichnung |
|
numerisch, numerisch plus Text |
Für den Alltagseinsatz packen Sie das Ganze am besten in zwei kleine Skripte, unsere Versionen heißen pciguck.sh (Listing 1) und pcihwsuche.sh (Listing 2). Beim ersten Skript wählen Sie das Gerät anhand des Platzes am PCI-Bus aus, beim zweiten anhand des Typs. Volle Auskunft erhalten Sie mit Root-Rechten. Beide Skripts verwenden für die Auswahl das Werkzeug Smenu [1]. Möchten Sie weniger Details zu sehen bekommen, entfernen Sie beim Lspci-Befehl ein oder zwei v. Den Ablauf von pciguck.sh zeigt Abbildung 5, den von pcihwsuche.sh Abbildung 6. Im zweiten Skript haben wir für den Screenshot zur klareren Darstellung des Ablaufs den Clear-Befehl im Code auskommentiert.
Listing 1
pciguck.sh
#! /bin/bash
# pciguck.sh
echo "Anzeige PCI-Gerät"
wahl=$(lspci | \
cut -d " " -f 1 | \
smenu -c -n 10)
echo "--------------------------"
lspci -s $wahl -kvvvmm
echo "--------------------------"
lspci -s $wahl -kvvv
Listing 2
pcihwsuche.sh
#! /bin/bash
# pcihwsuche.sh
hw=$(lspci -nnmm | \
cut -d \" -f 1-2 | \
cut -d \[ -f 1 | \
tr -d \" | tr " " \_ | \
smenu -c -n 15)
dm=$(echo $hw | cut -d \_ -f 1)
clear
echo "--------------------------"
echo "Ausgewählt: $hw"
echo "--------------------------"
lspci -s $dm -kvmm
echo "--------------------------"
lspci -s $dm -kvvv

Abbildung 5: Beim Ausleseskript pciguck.sh (Listing 1) wählen Sie das Gerät anhand des Platzes am PCI-Bus aus.

Abbildung 6: Das Auslesen von Infos zu Geräten eines bestimmten Typs erledigt das Skript pcihwsuche.sh (Listing *2).
Speichergeräte
Das Programm Lsblk kommt in der Praxis häufig zum Einsatz, um zu prüfen, ob ein von einem Serienfehler betroffenes Speichergerät (sofern der Seriennummernkreis oder das Modell bekannt ist) im System verbaut ist. Zudem erhalten Sie damit Informationen über den Einhängepunkt, das Dateisystem und dessen Belegung sowie den Anschluss. Neu eingebaute Speichergeräte identifizieren Sie damit eindeutig, bevor Sie Partitionen und Dateisysteme darauf einrichten.
Der Lsblk-Aufruf listet alle Speichergeräte (siehe Kasten “Blockgeräte”) auf, auch solche ohne eine gültige Partitionstabelle. Sie finden damit sowohl interne als auch extern angeschlossene Massenspeichergeräte. Bei der Ausgabe stoßen Sie abhängig von der gewählten Option auch auf die Major und Minor Numbers des Geräts; diese Auskunft stellt der Kernel zur Verfügung. Die Major Number bezeichnet den benutzten Gerätetreiber, dem der Kernel eine feste Nummer zuordnet. Die Minor Number gibt (für Speichergeräte) die Partition an. Tiefergehende Informationen zu Gerätedateien sowie Major und Minor Numbers finden Sie in der Kernel-Dokumentation [2].
Blockgeräte
Allgemein bezeichnet man als Blockgerät alle Geräte, mit denen das System Daten blockweise austauscht, wobei es jeden Datenblock einzeln adressiert. Das ermöglicht sowohl einen sequenziellen als auch einen wahlfreien Datenzugriff. Ein Blockgerät identifizieren Sie mithilfe der Anweisung ls -l unter anderem im Geräteverzeichnis /dev: Bei ihnen steht an der ersten Stelle des Attributblocks der Ls-Ausgabe ein b. Abbildung 7 zeigt das Beispiel für /dev/sda, die erste SATA-Platte eines Linux-Systems.
Beim Aufruf von Lsblk begegnen Ihnen verschiedene Gerätebezeichnungen. Eine Auswahl bezüglich aktueller Hardware finden Sie in der Tabelle “Lsblk: Gerätenamen”. Für den SATA-Anschluss verwendet Linux keine gesonderte Bezeichnung. Vielmehr handhabt es SATA-Festplatten und externe USB-Datenträger mittels einer SCSI-Emulation. Das führt zu einem Problem: Alle diese Geräte tragen einen Namen, der mit sd beginnt (Abbildung 8). Auf den ersten Blick lässt sich ein USB-Stick nicht so einfach erkennen.
|
Gerät |
Bezeichnung |
|---|---|
|
CD/DVD-Gerät |
|
|
Festplatte (SATA, SCSI) |
|
|
USB-Stick |
|
|
externe USB-Festplatte |
|
|
NVMe-Speicher |
|
Erst durch die Nutzung der Option -o und der Angabe der Felder TRAN und RM erhalten Sie die notwendigen Informationen (Tabelle “Lsblk: Ausgabefelder”). Sie erkennen den USB-Stick am Eintrag usb in der Spalte TRAN und dem Wert 1 (für entfernbar) in der Spalte RM (Abbildung 9). In der Tabelle “Lsblk: Optionen” stehen einige Hinweise für die Gestaltung der Programmausgabe. Die Baumansicht, die Sie beim Programmaufruf ohne weitere Optionen erhalten, fordern Sie bei der Verwendung weiterer Parameter gegebenenfalls mit -T an.
|
Spalte |
Inhalt |
|---|---|
|
|
Gerätename |
|
|
Anschlussart ( |
|
|
im laufenden Betrieb entfernbar ( |
|
|
nur lesbar ( |
|
|
Universally Unique Identifier nach RFC 4122 (eindeutiger Bezeichner für das Speichergerät) |
|
|
Dateisystemtyp |
|
|
Größe des Dateisystems |
|
|
Belegung des Dateisystems |
|
|
Einhängepunkt |
|
|
alle Einhängepunkte des Geräts |
|
|
Seriennummer des Geräts |
|
|
Hersteller/Anbieter |
|
|
Modellbezeichnung |
|
Anweisung |
Option |
|---|---|
|
mögliche Spalten auflisten |
|
|
Spalten anzeigen |
|
|
Baumansicht |
|
|
Listenansicht |
|
|
alle Blockgeräte anzeigen |
|
|
JSON-Format |
|
|
Rohformat für Shell-Skripte |
|
|
Angaben zum Dateisystem |
|
|
Pfad der Gerätedatei |
|
USB-Geräte
Mit Lsusb listen Sie angeschlossene USB-Hardware auf. Dabei sehen Sie auch im Rechner verbaute, am USB-Bus platzierte Geräte. Sie erkennen schnell, ob sich betriebsintern nicht erlaubte oder unsichere Geräte am Rechner befinden. Auch für das Einrichten eines Scanners erweist sich Lsusb unter Umständen als nützlich, wenn er nicht automatisch erkannt wird und Sie ihn manuell einrichten müssen.
Beim Aufruf ohne weitere Optionen (siehe Tabelle “Lsusb: Optionen”) zeigt das Werkzeug eine Tabelle an. Sie enthält Spalten für den Bus, die laufende Gerätenummer am Bus, die ID (bestehend aus Hersteller- und Produktkennung) sowie Hersteller und Funktion (Abbildung 10).
|
Aktion |
Option |
|---|---|
|
Baumansicht mit weiteren Angaben |
|
|
ausführliche Ausgabe |
|
|
Ausgabe nach Gerätedatei |
|
|
an |
|
|
Abfrage nach |
|
|
Gerätesuche nach Hersteller |
|
|
Abfrage mit |
|
Mit der Option -t erhalten Sie die Ausgabe in Baumansicht mit zusätzlichen Angaben zum Anschluss, der Geräteklasse und dem Treiber. Oft helfen diese Angaben weiter, wenn ein USB-Gerät nicht so funktioniert, wie es soll. Anhand der Angabe des Treibers sehen Sie, ob das System das Gerät passend unterstützt (Abbildung 11).
Die Option -v ohne präzisierende Angaben überschwemmt das Terminal mit allerlei Informationen. Für die vollumfängliche Ausgabe benötigen Sie in der Regel Root-Rechte. Im Zusammenspiel mit der Option -t erhalten Sie eine übersichtliche Ausgabe, die zusätzlich die Gerätefunktion (Maus, Tastatur etc.) nennt (Abbildung 12).
Für die gezielte Abfrage eines einzelnen USB-Geräts haben Sie mehrere Möglichkeiten. Mit der Option -D beziehen Sie sich auf die Gerätedatei. In Abbildung 13 sehen Sie ein Beispiel für die Angabe der Gerätedatei und darunter die (per Head gekürzte) Ausgabe. Wie Sie sehen, müssen Sie für diese Abfrage die Gerätedatei mit ihrem vollständigen Pfad angeben. Der Umfang der Ausgabe entspricht jenem mit der Option -v.

Abbildung 13: Mit der Option -D erhalten Sie bei Bedarf ausführliche Informationen zu einem einzelnen Gerät.
Die Gerätesuche mit Angabe des Anschlusses (-s) gestaltet sich einfacher: Bei Verwendung dieser Option geben Sie lediglich den Bus und gegebenenfalls die Gerätenummer an (Abbildung 14, erstes und zweites Beispiel). Für eine Suche mit dem Hersteller- oder dem Produktcode in hexadezimaler Schreibweise nutzen Sie -d Hex-Code:. Der Doppelpunkt an der richtigen Stelle ist zwingend notwendig (Abbildung 14, drittes und viertes Beispiel).

Abbildung 14: Mit Lsusb ermitteln Sie USB-Geräte bei Bedarf anhand des Anschlusses oder des Hersteller- respektive Produktcodes.
Mit diesen Mechanismen spüren Sie im Handumdrehen unerlaubt angesteckte USB-Sticks auf. Auf diese Weise können Sie Datenklau und das Einschleusen von Schadsoftware oder sonstigen unerwünschten Dingen unterbinden. Das kleine Shell-Skript usbstick.sh (Listing 3) meldet das Problem sofort. Binden Sie es als Init-Skript oder Dienst (via Systemd) ein und passen Sie es an Ihre Anforderungen hinsichtlich des Abfragezeitraums (sleep Sekunden) und der gewünschten Aktion an. Möglich wäre beispielsweise das Abspielen eines lauten Tons, ein sofortiges Aushängen des Datenträgers, ein Herunterfahren des Systems oder der Versand einer E-Mail an die zentrale Systembetreuung. Abbildung 15 zeigt ein Beispiel für den Ablauf des Skripts.
Listing 3
usbstick.sh
#! /bin/bash
# usbstick.sh
while true; do
sleep 10
lsusb -tv | grep -q usb-storage
if [ $? -eq 0 ]; then
# Beliebige Aktion möglich
echo "############### Alarm ###############"
echo "Speichermedium unbefugt angeschlossen"
else
# optionale Aktion, solange alles in Ordnung
echo "............ passt alles ............"
fi
done
Die Funktionalität lässt sich aber auch für ganz andere Zwecke nutzen: So ermöglichen Sie damit beispielsweise nicht privilegierten Benutzern, durch schlichtes Anstecken eines USB-Sticks einen lokalen Server ohne Anmeldung herunterzufahren, falls Wartungsarbeiten oder geplante Stromabschaltungen stattfinden. Das funktioniert ohne Root-Kennwort, und es bleibt sichergestellt, dass Nicht-Admins keinen Unsinn auf der Maschine anrichten.
Hardware auslesen
Mit dem Programm Lshw erhalten Sie eine Komplettübersicht über das Rechnersystem. Laut der Manpage (im Abschnitt BUGS) erkennt es allerdings weder Firewire-Geräte noch werden alle Architekturen voll unterstützt. Eine vollständige Auskunft erhalten Sie nur mit Root-Rechten.
Ohne Angabe weiterer Optionen, liefert Lshw eine sehr umfangreiche Ausgabe, die es statt als Reintext bei Bedarf in den Formaten HTML, XML und JSON ausspuckt. Die HTML-Ausgabe bietet eine sehr übersichtliche Darstellung. Bei der Textausgabe schränken Sie mittels Grep den Ausgabeumfang nach Ihren Bedürfnissen ein. Für die Arbeit mit dem XML-Format verwenden Sie beispielsweise Xmlstarlet [3] zum Auslesen einzelner Knoten.
Die Tabelle “Lshw: Optionen” listet eine Auswahl der Möglichkeiten für die tägliche Arbeit auf. Abbildung 16 zeigt den Aufruf einer Klasse (network) zusammen mit dem Verbergen (-sanitize) eventuell kritischer Daten wie MAC- und IP-Adresse. An ihrer Stelle steht stattdessen lediglich REMOVED.
|
Aktion |
Option |
|---|---|
|
verkürzte Auskunft |
|
|
Geräteliste mit Informationen zum jeweiligen Bus |
|
|
Abfrage nach Geräteklasse |
|
|
Verbergen sensibler Daten wie MAC-Adresse oder Seriennummer |
|
|
Ausgabe im HTML-Format |
|
|
Ausgabe im XML-Format |
|
|
Ausgabe im JSON-Format |
|
Die umfangreiche Ausgabe filtern Sie gegebenenfalls mit Grep, was besonders beim Auflisten der Busstruktur hilft (Abbildung 17). Bei Verwendung der Option -businfo finden Sie in der Ausgabespalte Class die entsprechenden Klassenbezeichnungen. Diese benötigen Sie für die Abfrage nach Klassen (-C Klasse).
Fazit
Mit den in diesem Artikel vorgestellten Programmen erhalten Sie tiefe Einblicke in die Hardware eines Rechners und identifizieren die verwendeten Treiber. Beim Einbinden problematischer Hardware hilft es zu sehen, ob das System sie überhaupt und falls ja korrekt erkennt.
Während Lscpu, Lspci, Lsusb und Lsblk auf die Abfrage von Informationen bestimmter Teilbereiche eines Rechnersystems abzielen, betätigt sich Lshw als Generalist. Zu Lshw finden sich Alternativen wie Hwinfo [4], Neofetch [5] oder CPU-X [6], die sich in Handhabung und Übersichtlichkeit der Ergebnisse unterscheiden. (jlu)
Der Autor
Harald Zisler beschäftigt sich seit rund 35 Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Bücher und Zeitschriftenbeiträge.
Infos
-
Smenu: Harald Zisler, “Keine Qual der Wahl”, LU 06/2017, S. 84, https://www.linux-community.de/38772
-
Informationen zu Major Numbers: https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
-
Xmlstarlet: https://xmlstar.sourceforge.net
-
Neofetch: https://github.com/dylanaraps/neofetch
-
CPU-X: https://github.com/TheTumultuousUnicornOfDarkness/CPU-X















