1. 概要

このチュートリアルでは、コンピューターで実行されているLinuxディストリビューションを学習します。 最も人気のある2つのLinuxファミリであるDebianとRedHatEnterprise Linux(RHEL)でテストされています。 ただし、Linuxエコシステム全体で機能することを目的としています。

2. / etc /os-releaseファイル

まず、 / etc /os-releaseファイルについて説明します。

Ubuntuを搭載したコンピューターでどのように表示されるかを見てみましょう。

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

出力は、 VARIABLE =value構造に従います。

  • ID :ディストリビューション名( ubuntu
  • VERSION_ID :ディストリビューションメジャーバージョン( 18.04
  • ID_LIKE :ディストリビューションファミリ( Debian
  • PRETTY_NAME :ディストリビューション名( Ubuntu )とフルバージョン( 18.04.6 LTS )を1つの変数に結合します
  • VERSION_CODENAME :コードネーム( bionic )、つまり、Debianベースのディストリビューションのリリース番号のエイリアス

RHELファミリーのディストリビューションでどのように見えるかを調べてみましょう。

$ cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

これは、Ubuntuマシンからの出力と非常によく似た出力を示します。 PRETTY_NAMEの値CentOSLinux 7(コア)は、Debianベースのシステムとは少し異なることに注意してください。

また、このような VARIABLE = value 構造を利用して、 / etc /os-releaseファイルを入手することもできます。 変数をシェル環境で使用できるようにします。

$ . /etc/os-release 
$ echo $ID
ubuntu
$ echo $VERSION_ID
20.04

この例では、 / etc /os-releaseを調達した後にOSバージョンの値にアクセスします。

3. その他の/etc /*-releaseファイル

os-release とは別に、 /etcディレクトリ内に-releaseサフィックスが付いた他のファイルが存在する可能性があります。

CentOSでは、次のことがわかります。

$ ls -l /etc/*-release
-rw-r--r--. 1 root root 37 nov 23  2020 /etc/centos-release
lrwxrwxrwx. 1 root root 21 feb 26  2021 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx. 1 root root 14 feb 26  2021 /etc/redhat-release -> centos-release
lrwxrwxrwx. 1 root root 14 feb 26  2021 /etc/system-release -> centos-release

実際、 / etc / centos-release / etc / redhat-release 、および / etc / system-release には、すべてがポイントであるため、同じ情報が含まれています。同じファイルに:

$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

このようにして、システムに関する基本的な情報を取得できます。 上記のコマンドは、ディストリビューション( CentOS Linux )、メジャー( 7 )、マイナーリリース( 9 )、および日付コード( 2009 )マイナーバージョンの。

4. lsb_releaseコマンド

lsb_release コマンドは、Linuxディストリビューションに関する情報も提供します。 ただし、通常はデフォルトでインストールされません。 したがって、手動でインストールする必要があります。

Debianベースのディストリビューション:

$ sudo apt install -y lsb_release

RHEL / CentOSの場合:

$ yum -y install redhat-lsb-core

-a オプションを使用して、Ubuntuマシンで利用可能なすべての情報を表示してみましょう。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.6 LTS
Release:	18.04
Codename:	bionic

-rオプションを使用してリリースのみを選択してみましょう。

$ lsb_release -r
Release:	18.04

シェルスクリプトを実行する場合は、 -s を追加して、生の数値のみを取得します。

$ release=$(lsb_release -rs)<br />$ echo $release
<br />18.04

このコマンドは、リリース番号を抽出し、それをreleaseという変数に割り当てるだけです。

実際、 lsb_release は、 / etc /lsb_releaseファイルの内容をフォーマットして出力します。 Ubuntuコンピューターでそれを見てみましょう:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"

/ etc /os-releaseファイルに似たVARIABLE=value構造が再び表示されます。 同様に、このファイルをソースにして、シェル環境で変数を使用できるようにすることができます。

5. hostnamectlコマンド

hostnamectlコマンドはsystemdの一部です。 基本的に、ユーザーはシステムのホスト名やその他の関連情報を照会および変更できます。

たとえば、Ubuntuマシンでは次のように表示されます。

$ hostnamectl 
   Static hostname: ubuntu
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 0fb7ce66968341cc97b76d1b24426881
           Boot ID: 5d39cbf8fa4f470db74aada29a2ef6b4
  Operating System: Ubuntu 18.04.6 LTS
            Kernel: Linux 5.4.0-109-generic
      Architecture: x86-64

その出力は、lsb_releaseコマンドとuname-aコマンドの組み合わせです。 後者は、とりわけ、カーネル名、ノード名(ホスト名)、カーネルのリリースとバージョン、およびシステムアーキテクチャを提供します。

$ uname -a
Linux ubuntu 5.13.0-41-generic #46~20.04.1-Ubuntu SMP Wed Apr 20 13:16:21 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

uname の出力と、ホスト名( ubuntu )、カーネルリリース( 5.13)などのhostnamectlからの情報との類似点を確認できます。 0-41-generic )、およびカーネルアーキテクチャ( x86_64 )。

CentOSマシンの出力を確認してみましょう。

$ hostnamectl 
   Static hostname: centos
         Icon name: computer-server
           Chassis: server
        Machine ID: 9ceb2494f7844e90b51e436b38872021
           Boot ID: 20d3d7b05e024420b46aa799db5e239a
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.15.2.el7.x86_64
      Architecture: x86-64

DebianベースのディストリビューションとRHELベースのディストリビューションの出力は非常に似ていることがわかります。

6. rpmコマンド

最後に、RHELファミリのディストリビューションでrpmコマンドを使用します。 これはパッケージマネージャーですが、一部のシステムデータのクエリにも使用できます。

ディストリビューションがわからない場合は、RHELメジャーバージョンを見つけます。

$ rpm --eval '%{rhel}'
7

前のコマンドは、rpm構成ファイルで定義されたマクロの値をチェックします。 この場合、マクロ( %r hel )は/etc/rpm/macros.distファイルに保存されます。 マクロの詳細については、マクロ構文マニュアルを参照してください。

一方、ディストリビューションがわかっている場合は、-qオプションを使用できます。

$ rpm -q centos-release
centos-release-7-9.2009.1.el7.centos.x86_64

パッケージcentos-releaseがインストールされているかどうかを照会します( -q )。 その結果、メジャーバージョンとマイナーバージョン、および同期リリース番号とアーキテクチャが取得されます。 Red Hatでは、代わりにパッケージredhat-releaseを照会します。

さらに、 -i オプションを使用すると、OSに関するもう少し多くの情報を取得できます。

$ rpm -q centos-release -i
Name        : centos-release
Version     : 7
Release     : 9.2009.1.el7.centos
Architecture: x86_64
Install Date: Fri 26 Feb 2021 17:11:33 CET
Group       : System Environment/Base
Size        : 44787
License     : GPLv2
Signature   : RSA/SHA256, Wed 02 Dic 2020 17:35:28 CET, Key ID 24c6a8a7f4a80eb5
Source RPM  : centos-release-7-9.2009.1.el7.centos.src.rpm
Build Date  : Mon 23 Nov 2020 16:08:41 PM CET
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
Summary     : CentOS Linux release file
Description :
CentOS Linux release files

hostnamectl の出力と同様に、名前、バージョン、リリース、アーキテクチャ、インストール日とビルド日など、非常に包括的な説明が表示されます。

7. 結論

コマンドラインでLinuxディストリビューションをチェックする複数の方法を学びました。 どちらの場合でも、1つの方法の選択は私たちの目標に依存します。

ディストリビューションとシステムの機能をすばやく確認するには、 hostnamectl また rpm -qi -リリース (RHELファミリーのディストリビューションを使用する場合)。

一方、Bashスクリプトを実行する必要がある場合は、どちらかを調達するのが最善です。 / etc / os-release また / etc/lsb_release。