Czy istnieje sposób na określenie, która wersja (dystrybucja i jądro, jak sądzę) działa na Linuksie (z wiersza poleceń), która działa na dowolnym systemie Linux?
Czy istnieje sposób na określenie, która wersja (dystrybucja i jądro, jak sądzę) działa na Linuksie (z wiersza poleceń), która działa na dowolnym systemie Linux?
Odpowiedzi:
Jądro jest powszechnie wykrywane za pomocą uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
Naprawdę nie ma sposobu na cross-dystrybucję, aby określić, na jakiej dystrybucji i wersji jesteś. Próbowano uczynić to spójnym, ale ostatecznie jest niestety różne. Narzędzia LSB dostarczają tych informacji, ale jak na ironię nie wszędzie są instalowane domyślnie. Przykład w systemie Ubuntu 9.04 z lsb-release
zainstalowanym pakietem:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
W przeciwnym razie najbliższą powszechnie dostępną metodą jest sprawdzanie plików. Istnieją one na większości popularnych platform i na ich pochodnych (tj. Red Hat i CentOS)./etc/something-release
Oto kilka przykładów.
Ubuntu ma /etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Ale Debian ma /etc/debian_version
:
$ cat /etc/debian_version
5.0.2
Fedora, Red Hat i CentOS mają:
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
Obecnie nie mam dostępnego systemu SUSE, ale wydaje mi się, że tak /etc/SuSE-release
.
Slackware ma /etc/slackware-release
i / lub /etc/slackware-version
.
Mandriva ma /etc/mandriva-release
.
W przypadku większości popularnych dystrybucji
$ cat /etc/*{release,version}
najczęściej będzie działać. W przypadku instalacji „serwerowych” uproszczonych i pozbawionych kości może nie być zainstalowany pakiet „release” dla dystrybucji.
Ponadto dwa programy innych firm, których można użyć do automatycznego uzyskania tych informacji, to Ohai i Facter .
Należy pamiętać, że wiele dystrybucji zawiera tego rodzaju informacje w /etc/issue
lub /etc/motd
, ale niektóre zasady bezpieczeństwa i najlepsze praktyki wskazują, że pliki te powinny zawierać banery powiadomień o dostępie.
Powiązane: Jak znaleźć wersję pakietu oprogramowania zainstalowanego w węźle? , Lalek .
Możesz także spróbować:
$ cat /etc/issue
Zwykle (choć nie zawsze) powie ci, jakiej dystrybucji używasz. /etc/issue
to plik używany do ekranu logowania.
\S[newline]Kernel \r on an \m
Jądro: uname -a
cat /etc/os-release
co najmniej dla Ubuntu, Fedory i OpenSUSE.
Nie działa w systemie OS X przynajmniej do 10.9 (Mavericks). Zamiast tego użyj sw_vers .
OpenSUSE miał wydanie cat / etc / SuSE do 13.1, ale jest przestarzałe na rzecz wydania os.
Redhat 6.1 ma wydanie cat / etc / redhat
Ten problem można również rozwiązać za pomocą Pythona z platform
modułem :
Korzystanie z platform()
funkcji:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
Powyższe polecenie zwraca pojedynczy ciąg identyfikujący platformę bazową z jak największą ilością użytecznych informacji.
Lub używając uname()
funkcji:
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', '')
Powyższe polecenie Zwraca namedtuple()
zawierających sześć cech: system
, node
, release
, version
, machine
, i processor
.
Lub używając dist()
funkcji:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
Ostatnie polecenie próbuje określić nazwę nazwy dystrybucji systemu operacyjnego Linux , ale jest ona przestarzała od Python 3.5 i zostanie usunięta w Python 3.8 .