$ lsb_release -c
Codename: trusty
$ cat /etc/issue
Ubuntu 14.04 LTS \n \l
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
Die Ausgaben der obigen Befehle zeigen nur den Teilcodenamen (dh trusty
). Wie erhalte ich den vollständigen Codenamen ( Trusty Tahr ) meines installierten Ubuntu-Systems?
command-line
release-management
Avinash Raj
quelle
quelle
/etc/os-release
. Vielleicht solltest du angeben, was du damit meinst. Wie erhalte ich den vollständigen Codenamen (Trusty Tahr) meines installierten Ubuntu-Systems? . Möchten Sie es nur auf dem Terminal wiedergeben oder müssen Sie es einer Variablen zuordnen? Wird dies auf einigen Nicht-{Ubuntu, Debian} -Systemen verwendet?Antworten:
Verwenden Sie keine externen Tools:
Sie können einfach eine Quelle angeben (der Befehl source ist ein Punkt
.
),/etc/os-release
und Sie haben Zugriff auf alle dort definierten Variablen:Bearbeiten. Wenn Sie das
14.04,
Teil entfernen möchten (wie von Terdon verlangt), können Sie:Beachten Sie, dass dies etwas umständlich ist, da das
VERSION
Feld bei anderen Distributionen ein anderes Format haben kann. ZB auf meinem Debian,Dann könnten Sie sich so etwas vorstellen (in einem Skript):
quelle
. /etc/os-release && echo ${VERSION//[0-9,. ]/ }
?;D
.Meine Variante zu dem, was bereits angeboten wird:
Die bisher kürzeste und pessimistischste Antwort.
Wenn Sie den
/etc/os-release
Inhalt nicht in Ihre aktuelle Umgebung laden möchten, können Sie sich vorstellen, dass ein Skript ziemlich einfach geladen werden kann:quelle
:D
.( . /etc/os-release && echo ${VERSION/*, /} )
.Grep:
Erläuterung:
lsb_release -rs
-> Druckt Ihre installierte Ubuntu-Version.grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info
-> Besorgen Sie sich alle Zeilen, die Ihre Release-Version enthalten, in meinem Fall ist es 14.04.grep -m 1 "Description: Ubuntu "
-> Greift wieder nur die übereinstimmende erste Zeile (wegen-m
Flag), die den String enthältDescription: Ubuntu
.cut -d "'" -f2
-> druckt das Feld Nummer 2 in Anführungszeichen'
Awk:
Erläuterung:
Das Deklarieren und Zuweisen von Variablen in awk erfolgt über den
-v
Parameter. Derlsb_release -rs
Befehlswert wird also der Variablen zugewiesen, dievar
beim Drucken von Feld 4 helfen soll. Feld 5 aus den Zeilen enthält die Zeichenfolge14.04
und existiert, wenn eine Eins gefunden wird. Schließlichcut
hilft der Befehl entfernen Sie die einfachen Anführungszeichen.quelle
Der gesuchte Befehl lautet:
Das ist sehr hässlich und nicht optimiert. Ich bin sicher, dass es eine einfachere Methode geben sollte, und dies hat einige Probleme.
quelle
quelle
Hier sind einige weitere Optionen. Sie alle analysieren die
/etc/os-release
Datei, die in meinem 13.10 so aussieht:Alle unten aufgeführten Lösungen analysieren die zweite zu erzeugende Zeile
Saucy Salamander
.grep
Das
-o
bedeutet "Nur den passenden Teil der Zeile drucken" und-P
aktiviert Perl-kompatible reguläre Ausdrücke. Auf diese Weise können wir verwenden\K
, was bis zu diesem Punkt gelöscht wurde. In Kombination mit-o
bedeutet dies, dass nur das ausgegeben wird, was nach dem übereinstimmt\K
. Der tatsächlich verwendete reguläre Ausdruck stimmt also mit den letzten beiden Wörtern einer Zeile überein, die enthältVERSION=
.awk
Das Setzen des Feldtrennzeichens auf
"
undspace
bedeutet, dass das 3d- und das 4. Feld der Zeile, die enthält,VERSION=
die Zeichenfolge sind, nach der wir suchen .sed
Der
-n
Schalter unterdrückt die normale Ausgabe, es werden keine Zeilen gedruckt. Das-r
erlaubt erweiterte reguläre Ausdrücke. In übereinstimmenden ZeilenVERSION=
löschen wir dann alles außer den letzten beiden Wörtern. Dasp
am Ende bedeutet Drucken.perl
Die
-n
Mittel 'verarbeiten jede Eingabezeile mit dem von-e
" gegebenen Skript . Das-l
fügt jedem Druckaufruf ein Zeilenumbruchzeichen hinzu (und einige andere Dinge, die hier nicht relevant sind). Der reguläre Ausdruck entspricht den letzten beiden Wörtern (\b
ist eine Wortgrenze) und druckt sie aus, wenn die Zeile enthältVERSION=
.coreutils
Hier geben wir nur
grep
die relevante Zeile ein und setzencut
das Feldtrennzeichen aufspace
(-d ' '
) und drucken alles vom 2. Feld bis zum Ende der Zeile. Dertr -d
Befehl löscht das"
vom Ende.Pure Shell (schamlos die clevere
source
Idee von @ gniourf_gniourf stehlen ):Die
.
Quelle ist die Datei, die die Variablen der Shell zur Verfügung stellt, und ich verwende die String-Manipulationsfunktionen von bash , um die Versionsnummern zu entfernen.quelle
Mit Regex können Sie dies tun:
Erläuterung:
Dies durchsucht die Zeile mit
VERSION
in der Datei/etc/os-release
. Dann findet es 2 aufeinanderfolgende Wörter, die durch ein Leerzeichen getrennt sind (Perl-Regex). Das Flag -o behält nur das bei, was der Suche entspricht.Sie müssen
[a-zA-Z]
anstelle von "w" verwenden, um das Einfügen von Ziffern zu vermeiden.quelle