C'è un modo per determinare quale versione (distribuzione e versione del kernel, suppongo) di Linux è in esecuzione (dalla riga di comando), che funziona su qualsiasi sistema Linux?
Il kernel è riconosciuto universalmente con uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
Non c'è davvero un modo di distribuzione incrociata per determinare la distribuzione e la versione in cui ti trovi. Ci sono stati tentativi di renderlo coerente, ma alla fine varia, sfortunatamente. Gli strumenti LSB forniscono queste informazioni, ma ironicamente non vengono installate di default ovunque. Esempio su un sistema Ubuntu 9.04 con il pacchetto lsb-release
installato:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
In caso contrario, il metodo più ampiamente disponibile è il controllo dei file /etc/something-release
. Esistono sulla maggior parte delle piattaforme comuni e sui loro derivati (ad es. Red Hat e CentOS).
Ecco alcuni esempi.
Ubuntu ha /etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Ma Debian ha /etc/debian_version
:
$ cat /etc/debian_version
5.0.2
Fedora, Red Hat e CentOS hanno:
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)
Gentoo:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
Al momento non ho un sistema SUSE disponibile, 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,
$ cat /etc/*{release,version}
molto spesso funzionerà. Le installazioni "server" storte e barebone potrebbero non avere il pacchetto "release" per la distribuzione installata.
Inoltre, due programmi di terze parti che è possibile utilizzare per ottenere automaticamente queste informazioni sono Ohai e Facter .
Nota 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.
Correlati: Come trovare la versione del pacchetto software installata sul nodo? , fantoccio .
Puoi anche provare:
$ cat /etc/issue
Di solito (non sempre, però) ti dirà quale distribuzione stai usando. /etc/issue
è il file utilizzato per la schermata di accesso.
Kernel: uname -a
cat /etc/os-release
come minimo per Ubuntu, Fedora e OpenSUSE.
Non funziona per OS X almeno fino al 10.9 (Mavericks). Usa sw_vers invece.
OpenSUSE aveva cat/etc/SuSE-release up fino a 13.1 ma è deprecato a favore di os-release.
Redhat 6.1 ha cat/etc/redhat-release
lsb_release -a
, quando disponibile, è utile.
cat /proc/version
mi ha trovato Red Hat su un VPS condiviso.
Kernel: uname -r
Distro: lsb_release -a
Questi verranno eseguiti sulla maggior parte dei sistemi Linux
lsb_release -a && uname -r
Questo problema può anche essere risolto usingPython con il modulo platform
:
Utilizzando la funzione platform()
:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-AMD64-x86_64-with-debian-9.6
Il comando precedente restituisce una singola stringa che identifica la piattaforma sottostante con quante più informazioni utili possibili.
O usando 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 precedente restituisce una namedtuple()
contenente sei attributi: system
, node
, release
, version
, machine
e processor
.
O usando la funzione dist()
:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
L'ultimo comando cerca di determinare il nome del nome di distribuzione del sistema operativo Linux, ma èdeprecato poiché Python 3.5e sarà rimosso in Python 3.8 .