使用している Linux ボックスのカーネル名、バージョン、ホスト名などの詳細をすばやく確認する必要がある場合があります。
これらすべての詳細は、proc ファイルシステムの下にあるそれぞれのファイルで確認できますが、これらの情報をすばやく取得するには、uname ユーティリティを使用する方が簡単です。
uname コマンドの基本的な構文は次のとおりです。
uname [OPTION]...
次に、「uname」コマンドの使用法を示すいくつかの例を見てみましょう。
オプションなしで名前を付ける
オプションなしで「uname」コマンドを実行すると、カーネル名だけが出力されます。したがって、以下の出力は、このシステムで使用される「Linux」カーネルであることを示しています。
$ uname Linux
カーネル名も表示する uname -s を使用することもできます。
$ uname -s Linux
-n オプションを使用してネットワーク ノードのホスト名を取得
uname -n オプションを使用して、Linux ボックスのネットワーク ノード ホスト名を取得します。
$ uname -n dev-server
上記の出力は、hostname コマンドの出力と同じになります。
-r オプションを使用してカーネル リリースを取得
uname コマンドを使用して、カーネルのリリース情報を取得することもできます。オプション -r をこの目的で使用できます。
$ uname -r 2.6.32-100.28.5.el6.x86_64
-v オプションを使用してカーネル バージョンを取得する
uname コマンドを使用して、カーネルのバージョン情報を取得することもできます。この目的のためにオプション -v を使用できます。
$ uname -v #1 SMP Wed Feb 2 18:40:23 EST 2011
-m オプションを使用してマシンのハードウェア名を取得
uname コマンドを使用して、マシンのハードウェア名を取得することもできます。この目的には、オプション -m を使用できます。これは、64 ビット システムであることを示します。
$ uname -m x86_64
-p オプションを使用してプロセッサ タイプを取得
uname コマンドを使用して、プロセッサ タイプ情報を取得することもできます。この目的には、オプション -p を使用できます。 uname コマンドがプロセッサ タイプ情報を取得できない場合、出力に「unknown」が生成されます。
$ uname -p x86_64
uname がプロセッサの種類に関する情報を取得できなかった場合、このコマンドの出力として「unknown」が表示されることがあります。
-i オプションを使用してハードウェア プラットフォームを取得
uname コマンドを使用して、ハードウェア プラットフォーム情報を取得することもできます。この目的のためにオプション -i を使用できます。 uname コマンドがハードウェア プラットフォーム情報を取得できない場合、出力に「unknown」が生成されます。
$ uname -i x86_64
uname がプラットフォームに関する情報を取得できなかった場合、このコマンドの出力として「unknown」が表示されることがあります。
-o オプションを使用してオペレーティング システム名を取得する
uname コマンドを使用して、オペレーティング システム名を取得することもできます。この目的のためにオプション -o を使用できます。
例:
$ uname -o GNU/Linux
uname -a オプションを使用してすべての情報を取得
さまざまなフラグを使用してアクセスすることをこれまでに学んだすべての情報は、一度に取得できます。オプション -a をこの目的で使用できます。
$ uname -a Linux dev-server 2.6.32-100.28.5.el6.x86_64 #1 SMP Wed Feb 2 18:40:23 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
uname 出力の不明な値
この記事を書いているときに、uname ユーティリティが、Ubuntu を実行しているラップトップのプロセッサ タイプ (-p) とハードウェア プラットフォーム (-i) に対して「unknown」を返す理由に少し興味がありました。この問題について少し調べました。
私が見つけた 1 つの説明は、uname コマンドが次のカーネル構造からすべての情報を読み取る uname() 関数 (man 2 uname) を使用することでした:
struct utsname { char sysname[]; /* Operating system name (e.g., "Linux") */ char nodename[]; /* Name within "some implementation-defined network" */ char release[]; /* OS release (e.g., "2.6.28") */ char version[]; /* OS version */ char machine[]; /* Hardware identifier */ #ifdef _GNU_SOURCE char domainname[]; /* NIS or YP domain name */ #endif };
プロセッサ タイプとハードウェア プラットフォームに関する情報がこの構造体に存在しないため、uname コマンドはそれらに対して「unknown」を返します。
私が見つけた他の説明は、uname.c 内で -p オプションの処理が次のようになっているというものでした:
... ... ... char const *element = unknown; #if HAVE_SYSINFO && defined SI_ARCHITECTURE { static char processor[257]; if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) element = processor; } #endif ... ... ...
マクロ HAVE_SYSINFO および SI_ARCHITECTURE はカーネルのどこにも定義されていないため、unknown が返されます。オプション -i についても同様です。
正確な問題についてはわかりませんが、 -p および -i オプションは標準ではなく単なる拡張機能であるため、スクリプトで uname コマンドを使用している間は避けるべきであると安全に推測できます.