Woher uname -i
bezieht man die Informationen?
Existieren die Details in /etc/
?
Existieren die Details in /proc/
?
Wenn ja, auf welche Datei wird verwiesen, um diese Details auszugeben?
command-line
kernel
Roy Hernandez
quelle
quelle
Antworten:
uname
Verwendet den Systemaufrufuname(2)
, um die angezeigten kernelbezogenen Informationen abzurufen.Die Zusammenfassung ist:
Dabei werden
uname(2)
Informationen in der Struktur zurückgegeben, auf die von verwiesen wirdbuf
. Sie können auch die Header-Dateiutsname.h
von lesen/usr/include/"$(arch)"-linux-gnu/sys/utsname.h
, um tiefer zu graben.Schauen Sie sich das an
man 2 uname
, um mehr darüber zu erfahren.quelle
locate --regex '^/usr/include/.*/sys/utsname.h$'
?uname -i
die Ausgabex86_64
. Wenn ich laufenlocate --regex '^/usr/include/.*/sys/utsname.h$'
die Ausgangs kehrt/usr/include/x86_64-linux-gnu/sys/utsname.h
Das Programm
strace
ermöglicht es uns, die Systemaufrufe einer Anwendung anzuzeigen. Mituname -a
offensichtlich ist , dass nur dieopen
Anrufe über Systembibliotheken, so technisch keine Datei dort auf dem Dateisystem ist , dass dieuname
zum Lesen geöffnet. Vielmehr werden Systemaufrufe unter Verwendung der C-Bibliotheken durchgeführt.Wie er richtig ausgeführt hat, gibt es einen Systemaufruf zum Abrufen der in der
uname
Struktur gespeicherten Informationen . Die Manpage schlägt Folgendes vor:/proc
Das Dateisystem ist jedoch virtuell, was bedeutet, dass es nur existiert, während das Betriebssystem ausgeführt wird. In gewissem Umfang ist es also in Kernel- oder Systembibliotheken festgelegt.Schließlich
uname.c
könnenapt-get source coreutils
wir beim Durchlesen des Quellcodes, mit dem er abgerufen werden kann , feststellen, dass dieutsname.h
Bibliothek tatsächlich verwendet wird (gedruckt mit Zeilennummern):strace
Ausgabe:quelle
uname.c
also nicht unbedingt eine Bibliothek verwenden - wir können uns natürlich den Quellcode ansehen, um sicherzugehen.machine.h
machine.h
scheint im ganzen System gespickt zu sein. Welchemachine.h
Datei stützt es sich?machine.h
auf meinem System aufgeführten scheinen in dem/usr/src/linux-headers-3.19.0-33
Verzeichnis zu sein. Es ist sehr wahrscheinlich, dass die vom aktuell ausgeführten Kernel bereitgestellte Bibliothek verwendet wirdNatürlich ist Heemayls Antwort richtig.
Aus Spaß ist hier ein funktionierender C-Ausschnitt, der die von zurückgegebenen Daten zeigt
uname()
(eine Art hausgemachtes,uname
wenn Sie möchten): Kompilieren Sie es mitgcc uname.c -o uname
und führen Sie es aus mit./uname
:quelle
printf("%\n", utsname.machine);
Information?utsname
, die beim Aufruf von aufgefüllt wirduname()
. Das Beispiel ist für jemanden ohne C-Grundkenntnisse wahrscheinlich nicht so einfach, aber hier ist mehr oder weniger, was passiert: Einstruct
(C-Datentyp) vom Typutsname
namedutsname
(Typ definiert in<sys/utsname.h>
) wird deklariert; dann wird ein Zeiger auf den Namenutsname_ptr
deklariert (dauname()
ein Zeiger auf einenstruct
Typutsname
als Argument akzeptiert wird , obwohl dies in diesem Fall hätte vermieden werden können, aber das ist eine andere Geschichte).uname()
bewirkt dann, dass die Struktur aufgefüllt wirdutsname
, die zum Zeitpunkt desprintf()
Aufrufs die verschiedenen Werte in den verschiedenen Feldern enthält. Wenn Sie mit C nicht vertraut sind, ist dies wahrscheinlich nicht leicht im Detail zu erfassen, aber der Punkt ist, dassuname()
eine absichtlich aufgebaute Datenstruktur aufgefüllt wird , über deren Felder später gedruckt wirdprintf()
.Als Ergänzung zu Heemayls Antwort erhalten Sie Informationen wie in der
uname
Befehl von/proc/version
.quelle