Jak dowiedzieć się, którą wersję systemu Linux używam?

209

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?

Daryl Spitzer
źródło

Odpowiedzi:

267

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-releasezainstalowanym 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-releasei / 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/issuelub /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? , .

jtimberman
źródło
3
Lol tutaj myślałem, aby zasugerować: poszukaj O!
Ivo Flipse,
2
Slackware jest / etc / Slackware-wersja
Ken Keenan
Dzięki Ken, ja też nie mam systemu Slackware.
jtimberman
4
IOW: ls / etc / * {release, version} i sprawdź, co wróci ...
freiheit
1
Większość ma także / etc / problem
Drew Stephens,
41

Możesz także spróbować:

$ cat /etc/issue

Zwykle (choć nie zawsze) powie ci, jakiej dystrybucji używasz. /etc/issueto plik używany do ekranu logowania.

Pablo Santa Cruz
źródło
2
Jest to jedyny, który przybił go dla mnie na wspólnym serwerze Media Temple. Dzięki!!
TryTryAgain
2
Ha, na RedHat, to po prostu\S[newline]Kernel \r on an \m
ruffin
20

Jądro: uname -a

raspi
źródło
+1. W przypadku podobnych systemów, takich jak MinGW , wymagane jest „-a”, aby uzyskać informacje o wersji, na przykład „MINGW32_NT-5.1 LAP065 1.0.17 (0.48 / 3/2) 2011-04-24 23:39 i686 Msys”.
Peter Mortensen
15
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

sweetfa
źródło
14

lsb_release -a, jeśli jest dostępny, jest przydatny.

CesarB
źródło
12

cat /proc/version znalazłem mnie Red Hat na udostępnionym VPS.

Iono
źródło
6

Jądro: uname -r

Distro: lsb_release -a

Będą działać na większości systemów Linux

Albert Z.
źródło
5

Jednowarstwowa

lsb_release -a && uname -r
Serge Stroobandt
źródło
1
Może to być bardziej odpowiednie jako komentarz do odpowiedzi Alberta Z.
fixer1234
1
potężna odpowiedź na zakończenie wszystkich odpowiedzi! Muszę głosować za wysiłek :)
B.Kocis
1

Ten problem można również rozwiązać za pomocą Pythona z platformmoduł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 .

simhumileco
źródło