どのバージョンのLinux(ディストリビューションとカーネルのバージョン)を(コマンドラインから)実行しているかを判断する方法はありますか。これはどのLinuxシステムでも機能しますか?
カーネルはuname
で普遍的に検出されます。
$ uname -or
2.6.18-128.el5 GNU/Linux
実際にどのディストリビューションやバージョンを使っているかを判断するためのクロスディストリビューション方法はありません。これを一貫性のあるものにするための試みがありました、しかし結局それは変わります、残念ながら。 LSBツールはこの情報を提供しますが、皮肉なことにデフォルトではどこにでもインストールされていません。 lsb-release
パッケージがインストールされているUbuntu 9.04システムでの例:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
そうでなければ、最も広く利用可能な方法は/etc/something-release
ファイルをチェックすることです。これらは、ほとんどの一般的なプラットフォーム上およびそれらの派生物(すなわち、Red HatおよびCentOS)上に存在する。
下記は用例です。
Ubuntuには/etc/lsb-release
があります。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
しかしDebianには/etc/debian_version
があります。
$ cat /etc/debian_version
5.0.2
Fedora、Red Hat、CentOSには以下のものがあります。
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
現時点でSUSEシステムは利用できませんが、/etc/SuSE-release
だと思います。
Slackwareは/etc/slackware-release
や/etc/slackware-version
を持っています。
Mandrivaは/etc/mandriva-release
を持っています。
人気のあるディストリビューションのほとんどでは、
$ cat /etc/*{release,version}
ほとんどの場合うまくいきます。削除されたベアボーンの「サーバー」インストールには、ディストリビューション用の「リリース」パッケージがインストールされていない可能性があります。
また、この情報を自動的に取得するために使用できる2つのサードパーティプログラムは Ohai および Facter 。
多くのディストリビューションは/etc/issue
や/etc/motd
にこの種の情報を持っていますが、いくつかのセキュリティポリシーと ベストプラクティス はこれらのファイルがアクセス通知バナーを含むべきであることを示します.
あなたも試すことができます:
$ cat /etc/issue
それは通常(いつもではありませんが)どのディストリビューションを使っているかを教えてくれます。 /etc/issue
はログイン画面に使用されるファイルです。
カーネル:uname -a
cat /etc/os-release
ubuntu、Fedora、OpenSUSEでは最低でも。
OS Xでは少なくとも10.9までは動作しません(Mavericks)。代わりにsw_versを使用してください。
OpenSUSEは13.1までcat/etc/SuSE-releaseを持っていましたが、os-のために廃止予定ですリリース。
Redhat 6.1にはcat/etc/redhat-releaseがあります。
可能であれば、lsb_release -a
が便利です。
cat /proc/version
は私に共有VPSでRed Hatを見つけました。
カーネル:uname -r
ディストリビューション:lsb_release -a
これらはほとんどのLinuxシステムで動作します
lsb_release -a && uname -r
この問題はPythonとplatform
モジュールを使って解決することもできます:
platform()
関数を使う:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-AMD64-x86_64-with-debian-9.6
上記のコマンド は、基盤となるプラットフォームを識別する単一の文字列と、できるだけ有用な情報を返します。
あるいは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', '')
上記のコマンド は、system
、node
、release
、version
、machine
、およびprocessor
の6つの属性を含むnamedtuple()
を返します。
あるいはdist()
関数を使う:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
最後のコマンド は、Linux OSディストリビューション名 を決定しようとしますが、 Python 3.5以降では非推奨です および はPython 3.8では削除されます).