Come faccio a sapere quale versione di Linux sto eseguendo?
C'è un modo per determinare quale versione (distribuzione e versione del kernel, suppongo) di Linux è in esecuzione (da riga di comando), che funziona su qualsiasi sistema Linux?
C'è un modo per determinare quale versione (distribuzione e versione del kernel, suppongo) di Linux è in esecuzione (da riga di comando), che funziona su qualsiasi sistema Linux?
Il kernel viene rilevato universalmente con uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
``` ```
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
Non c'è davvero un modo di distribuzione incrociata per determinare su quale distribuzione e versione ci si trova. Ci sono stati tentativi di renderla coerente, ma alla fine varia, purtroppo. Gli strumenti LSB forniscono queste informazioni, ma per ironia della sorte non sono installati di default ovunque. Esempio su un sistema Ubuntu 9.04 con il pacchetto lsb-release
installato:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Altrimenti, il metodo più vicino e ampiamente disponibile è il controllo dei file /etc/something-release
. Questi esistono sulla maggior parte delle piattaforme comuni, e sui loro derivati (cioè Red Hat e CentOS).
Ecco alcuni esempi.
Ubuntu ha /etc/lsb-release
:
$ cat /etc/debian_version
5.0.2
``` ```
Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)
Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)
newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Ma Debian ha /etc/debian_version
:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
``` ```
$ cat /etc/*{release,version}
Fedora, Red Hat e CentOS hanno:
&001 &001
Gentoo:
&001 &001
Non ho un sistema SUSE disponibile al momento, ma credo che sia /etc/SuSE-release
.
Slackware ha /etc/slackware-release
e/o /etc/slackware-version
.
Mandriva ha /etc/mandriva-release
.
Per la maggior parte delle distribuzioni popolari, quindi,
&001 &001
funzionerà più spesso. Le installazioni “server” spogliate e senza ossa potrebbero non avere installato il pacchetto “release” per la distribuzione.
Inoltre, due programmi di terze parti che puoi usare per ottenere automaticamente queste informazioni sono Ohai e Facter .
Si noti che molte distribuzioni hanno questo tipo di informazioni in /etc/issue
o /etc/motd
, ma alcune politiche di sicurezza e best practice indicano che questi file dovrebbero contenere banner di notifica di accesso.
Relativi Come scoprire la versione del pacchetto software installato sul nodo? puppet .
Si potrebbe anche provare:
$ cat /etc/issue
``` &001
Di solito (non sempre, però) vi dirà quale distribuzione state usando. `/etc/issue` è il file utilizzato per la schermata di login.
cat /etc/os-release
come minimo per Ubuntu, Fedora e OpenSUSE.
Non funziona per OS X almeno fino a 10,9 (Mavericks). Utilizzare sw_vers invece.
OpenSUSE ha cat /etc/SuSE-release fino al 13.1 ma è deprecato a favore di os-release.
Redhat 6.1 ha cat /etc/redhat-release
lsb_release -a && uname -r
Questo problema può anche essere risolto usando * Python con il modulo platform
**:
Usando la funzione platform()
:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
Il comando di cui sopra _restituisce una singola stringa che identifica la piattaforma sottostante con quante più informazioni utili possibile. _
O utilizzando la funzione uname()
:
python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-amd64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')
Il comando di cui sopra _restituisce un namedtuple()
contenente sei attributi: system
, node
, release
, version
, machine
, processor
, dist()
, &007, e &007. _
O utilizzando la funzione &007:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
``` &001
L'ultimo comando _prova a determinare il nome del nome della distribuzione del sistema operativo Linux_, ma è **_depreciso da Python 3.5_** e _sarà **rimosso in Python 3.8** _.