Ausgabe der Kernel-Version von "uname" nicht zufriedenstellend

Hinweis: In dem Thema Ausgabe der Kernel-Version von "uname" nicht zufriedenstellend gibt es 20 Antworten auf 3 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Alter deutscher Spruch: Der Ton macht die Musik. Damit wären wir wieder bei deinem.... Ich will! Und wieso dein "Problem" ein Problem ist erschließt sich mir immer noch nicht.


    Gesendet von meinem SM-T530 mit Tapatalk

  • dmesg | sed -rn 's/.*(Linux version [^[:blank:]]+).*/\1/p'
    oder die komplette Zeile mit dmesg | sed -rn '/Linux version/p', was etwas unlesbar wäre.


    Eine solche Zeile kann ungefähr so aussehen:


    [ 0.000000] Linux version 4.4.87-25-default (geeko@buildhost) (gcc version 4.8.5 (SUSE Linux) ) #1 S
    MP Wed Sep 13 07:19:13 UTC 2017 (3927ef5)


    Wir wollen aber eine leicht lesbare Ausgabe, und filtern deshalb das Wesentliche heraus.


    Erklärung:
    dmesg  Zeige mir die Meldungen (DisplayMESsaGe oder auch DriverMESsaGe) seit dem letzten Boot.
    | und schicke diesen Output weiter zu
    sed dem StreamEDitor sed
    -rn bei dem wir mit -r die ExtendedRegexes einschalten, aber das automatische Ausgeben aller gelesenen Zeilen -nicht wollen
    's/.*(Linux version [^[:blank:]]+).*/\1/p' und führe diesen Befehl substitute/suche/ersetze/printe das Ergebnis davon aus.


    Der /suche/ Teil:
    Wir suchen im Output von dmesg nach einer Zeile, die
    ^ am Zeilenanfang (Das Hütchen meint Anfang einer Zeile)
    . steht ein beliebiges Zeichen
    * und dieses beliebige Zeichen darf beliebig oft vorkommen, danach kommt das, was wir in unserer Ausgabe haben wollen.
    ( wir sammeln diese Zeichen in der ersten Gruppe. Gruppen sind schlicht runde Klammerpaare, die auch verschachtelt sein dürfen. Sie werden einfach von links nach rechts durchnummiert. Diese erste runde Klammer ist also die erste Gruppe von Zeichen bis zur ersten schließenden runden Klammer.
    Linux version die Zeichenkette Linux<leer>version dient als Suchmuster, da sie innerhalb der ersten (Gruppe) steht, wird sie mitausgegeben werden. Kann man leicht ändern, indem man die runde Klammer verschiebt.
    <einLeerzeichen> zwischen "version" und der Versionsbezeichung ist noch ein Leerzeichen.
    [^[:blank:]]+ und dann folgt eine Zeichenklasse [...] , die mindestens + einmal vorkommen muss. Innerhalb der Zeichenklasse kommt zuerst ein ^, was jetzt eine Verneinung ist, und nicht Anfang von irgendetwas meint. Danach kommt eine benannte [: :] Zeichenklasse, nämlich blank. Und damit heißt [^[:blank]]+ jede beliebige Zeichenfolge von beliebiger Länge, außer Leerzeichen (tab, space, ....)
    ) hier endet nun endlich unsere erste Gruppe. Sie enthält nun "Linux version 4.4.87-25-default ".
    .* danach können noch beliebig viele Zeichen folgen, die uns aber nicht mehr interessieren.


    Nun fehlt nur noch der /ersetze/ Teil:
    Er ist einfach: Wir ersetzen die gesamte Zeile mit dem Inhalt von
    \1 Gruppe eins.
    Der s// Befehl kennt noch einige Optionen. Eine davon ist p, die dann letztlich unsere ersetzte Zeile printet.


    Die reine Versionsbezeichnung wäre:
    dmesg | sed -rn 's/.*Linux version ([^[:blank:]]+).*/\1/p'
    Die runde Klammer für die Gruppe eins wurde schlicht vor die FolgeVonNichtleerzeichen verschoben.

  • Am Rande: Man kann diverse Kernels am Start halten und nach Gusto beim Booten irgendeinen auswählen.
    Nennt sich multi-version. und kann -wie immer- ebenfalls nach Gusto konfiguriert werden.


    openSUSE behält per Defaulteinstellung immer zwei Kernel. Den aktuellen und dessen Vorgänger.

  • OK.


    Für Alero noch ein Versuch der Erklärung:
    Ich finde die Versions-Bezeichnung des Kernels mit "4.14.15-1-default" ist falsch. Und sollte in meinem Fall "4.14.15-1.6" lauten. Ich wollte wissen, ob es einen Weg gibt genau diese Bezeichnung aus dem laufenden Kernel herauszubekommen (und nicht aus den Repositories). Es handelt sich hierbei um reine Benennung, keine Funktionalität.


    Aber:
    Ein wenig Suche bei z.B. ubuntu hat mich darüber informiert, dass es bei denen genauso läuft. Nicht unbedingt mit einem "-default" am Ende der Bezeichnung, sondern z.B. auch einem "-generic". Soweit ich das sehe ist das die Bezeichnung, die der Kernel sich selbst gibt und von daher nicht für mich "editierbar", wenn ich den Kernel nicht gerade selbst kompiliere. Von daher müsste ich mich damit tatsächlich mit einem Bugreport äußern, was ich in dem Fall aber nicht tun werde, da es ein größeres allgemeines Interesse an der Bezeichnung mit "-default" und dergleichen gibt.


    Wie Sauerland treffend bemerkte ist der Unterschied zwischen den Subversionen die sich hinter dem "-default" und Co verbergen können sehr gering. Also werde ich wohl damit leben müssen.


    Insofern danke für eure Mühen, wenn auch leider vergeblich. Ich markiere das hier dann mal als erledigt.


    Und an dieser Stelle möchte ich mich noch für meine Haarspalterei entschuldigen. Ich kann mich sehr gut an Kleinigkeiten stören. Es tut mir Leid, dass ich euch damit belästigt habe.


    Berichtigung: Thumbs up for regex! Leider kann aber auch dieser gut gemeinte Versuch nur das nutzen, was der Kernel ihm liefert. Nebenbei bekomme ich immer Ärger mit meinen Kommilitonen, wenn ich Regular Expressions in der Uni verwende

    Für den Inhalt des Beitrages 117902 haftet ausdrücklich der jeweilige Autor: Antarctris

  • Dann solltest du mal __präzise__ beschreiben, was du sehen möchtest.
    Bei mir gibt obiger Befehl das aus:


    Bash
    looser@computer:~> dmesg | sed -rn 's/.*Linux version ([^[:blank:]]+).*/\1/p'
    4.4.87-25-default

    Und das ist die exakte Versionsnummer des gerade laufenden Kernels. Egal, wie viele installiert sind.



    Ohne RegExes macht keine Konsole wirklich viel Sinn.


    Linux ist nicht umsonst das größte Haus, in dem in jedem Zimmer ein anderer RegEx- Dialekt wohnt.
    Sie sind wesenziell.
    (geklaut von Kästner oder Tucholsky. Oder gar Morgenstern?)

  • Ich mag diese "-default"-Ungenauigkeit nicht.

    Hallo Antarctris, hier ist glaube ich was Du möchtest:


    zeigt alle auf dem System vorhandenen Kernel:
    rpm -qa '*kernel*' | sort


    bei mir ergibt es
    caro@caro:~> rpm -qa '*kernel*' | sort
    kernel-default-4.14.14-1.1.geef6178.x86_64
    kernel-default-4.14.15-1.1.gfe1d712.x86_64
    kernel-default-4.14.15-4.1.g12e5c10.x86_64
    kernel-default-4.14.15-5.1.g9a6fca5.x86_64
    kernel-default-4.4.103-36.1.x86_64
    kernel-default-4.4.104-39.1.x86_64
    kernel-firmware-20180104-35.2.noarch


    zeigt nur den auf dem System aktiven Kernel:
    uname -r
    caro@caro:~> uname -r
    4.14.15-5.g9a6fca5-default


    genaue Infos zeigen Dir die 3 Ziffern vor dem "-default". Diese sind Dein ID.


    war es das ? :) Caroline

    Grüße
    Caroline :)

    Für den Inhalt des Beitrages 117909 haftet ausdrücklich der jeweilige Autor: caroline

  • war es das ? Carolin

    Bestimmt nicht, denn es erscheint noch immer das unerwünschte „default“ in der Ausgabe, genau wie bei dem Versuch von Berichtigung. Wenn ich es denn jetzt richtig verstanden habe, ist gerade dieses nicht erwünscht.

    Für den Inhalt des Beitrages 117925 haftet ausdrücklich der jeweilige Autor: tomfa-ng

  • habe es so verstanden, das er den Kernel identifizieren wollte. >Darüber ist es eindeutig.


    Ein schönes Tool ist für sowas auch


    inxi


    Gruß Caroline :)

    Grüße
    Caroline :)

    Für den Inhalt des Beitrages 117926 haftet ausdrücklich der jeweilige Autor: caroline