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
というか,いずれにしろほとんどの人にとってはがんばるところじゃないですけどね!!