lsb準拠のLinuxならディストリビューションやバージョンの識別はパッケージ情報やlsb_releaseを使おう

よく/etc/redhat-releaseの内容でOSの種類やバージョンを調べているスクリプトを見かけますが,10年前ならともかく,今となってはいまいちなやり方です.
ということで別の手段を紹介したいと思います.

/etc/redhat-releaseの持ち主パッケージの情報を調べる.

rpm系なら/etc/redhat-releaseの持ち主の情報でそれらを識別する方がまだモアベターです.
おそらく少なくともRed Hat Linux 7.0やRed Hat Enterprise Linux 2.1,Miraclelinux,Turbolinux 6.0前後から通用すると思います(以前勤務していたベンダーで,実際にディストリビューション,バージョンの識別に使っていた方法です).

$ rpm -qif /etc/redhat-release 
Name        : fedora-release               Relocations: (not relocatable)
Version     : 13                                Vendor: Fedora Project
Release     : 1                             Build Date: 2010年05月07日 13時24分24秒
Install Date: 2010年08月17日 20時51分39秒      Build Host: x86-06.phx2.fedoraproject.org
Group       : System Environment/Base       Source RPM: fedora-release-13-1.src.rpm
Size        : 27452                            License: GPLv2
Signature   : RSA/8, 2010年05月07日 14時24分58秒, Key ID 7edc6ad6e8e40fde
Packager    : Fedora Project
URL         : http://fedoraproject.org
Summary     : Fedora release files
Description :
Fedora release files such as yum configs and various /etc/ files that
define the release.
$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: Fedora Project
Packager: Fedora Project
Version: 13
Release: 1

CentOS 5,6でも試してみました.

$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: CentOS
Packager: (none)
Version: 5
Release: 6.el5.centos.1
$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: CentOS
Packager: CentOS BuildSystem <http://bugs.centos.org>
Version: 6
Release: 0.el6.centos.5

lsb_releaseを使う

もしくはlsb_releaseを使う方法もあります.シンプルに情報が欲しい場合,下記のようにするといいでしょう.
#lsb_releaseはredhat-lsbというパッケージが入っていなければ使用できません(ただし最小構成でのインストールなどでなければほぼ入っていると思います).

$ lsb_release --id --short
Fedora
$ lsb_release --release --short
13
$ lsb_release --id --release --short
Fedora 13
$ lsb_release --release --short
5.6
$ lsb_release --id --short
CentOS
$ lsb_release --id --release --short
CentOS 5.6
$ lsb_release --id --short
CentOS
$ lsb_release --release --short
6.0
$ lsb_release --id --release --short
CentOS 6.0
$ lsb_release --id --release --short
CentOS 6.0

その他

lsb_releaseはより多くの情報を取り出せるのですが,アーキテクチャ情報だけを取り出すことができない…のが微妙なところです.versionという情報から抜き出すか,他のコマンドを用いるしかないかもしれません(誰かアーキテクチャだけ出す方法を知ってたらおせーて).

$ lsb_release 
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch

というか,いずれにしろほとんどの人にとってはがんばるところじゃないですけどね!!