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?
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?
Risposte:
Il kernel è universalmente rilevato con uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
Non esiste davvero un modo di distribuzione incrociata per determinare la distribuzione e la versione in uso. Ci sono stati tentativi di renderlo coerente, ma alla fine varia, sfortunatamente. Gli strumenti LSB forniscono queste informazioni, ma ironicamente non sono installati di default ovunque. Esempio su un sistema Ubuntu 9.04 con il lsb-release
pacchetto installato:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
Altrimenti, il metodo ampiamente disponibile più vicino è il controllo dei file. Questi esistono sulla maggior parte delle piattaforme comuni e sui loro derivati (ad esempio, Red Hat e CentOS)./etc/something-release
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
Non ho un sistema SUSE disponibile al momento, ma credo che lo 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}
funzionerà molto spesso. Le installazioni "server" spogliate 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 .
Si noti che molte distribuzioni contengono questo tipo di informazioni in /etc/issue
o /etc/motd
, ma alcune politiche di sicurezza e best practice indicano che questi file devono contenere banner di notifica di accesso.
Correlati: Come scoprire la versione del pacchetto software installato sul nodo? , Burattino .
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.
\S[newline]Kernel \r on an \m
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 invece sw_vers .
OpenSUSE ha rilasciato cat / etc / SuSE fino alla 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 platform
modulo :
Utilizzando la platform()
funzione:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
Il comando sopra restituisce una singola stringa che identifica la piattaforma sottostante con quante più informazioni utili possibili.
O usando la uname()
funzione:
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 un namedtuple()
contenenti sei attributi: system
, node
, release
, version
, machine
, e processor
.
O usando la dist()
funzione:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
L'ultimo comando tenta di determinare il nome del nome di distribuzione del sistema operativo Linux , ma è obsoleto da Python 3.5 e verrà rimosso in Python 3.8 .