私のマシンで実行されているLinuxマシンの名前を確認するコマンドを知っています。例えば:
Ubuntu
cat /etc/version
CentOS
cat /etc/issue
ターミナルから出力を取得し、UBUNTUまたはCENTOSであるかどうかを確認して、次のコマンドを実行するにはどうすればよいですか?
apt-get install updates
または
yum update
Ubuntu 14.04
cat /etc/issue
私のマシンで実行されているLinuxマシンの名前を確認するコマンドを知っています。例えば:
cat /etc/version
cat /etc/issue
ターミナルから出力を取得し、UBUNTUまたはCENTOSであるかどうかを確認して、次のコマンドを実行するにはどうすればよいですか?
apt-get install updates
または
yum update
cat /etc/issue
回答:
残念ながら、ディストリビューション名を取得する簡単で確実な方法はありません。ほとんどの主要なディストリビューションは、/etc/os-release
この情報を保存するために使用するシステムに移行しています。最新のディストリビューションのほとんどにもlsb_release
ツールが含まれていますが、これらは常にデフォルトでインストールされるわけではありません。そのため、使用できるいくつかのアプローチを以下に示します。
つかいます /etc/os-release
awk -F= '/^NAME/{print $2}' /etc/os-release
利用lsb_release
可能な場合はツールを使用します
lsb_release -d | awk -F"\t" '{print $2}'
大部分のディストリビューションで機能するより複雑なスクリプトを使用します。
# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
# If available, use LSB to identify distribution
if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
# Otherwise, use release info file
else
export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME
gcc
インストールされている場合のバージョン情報を解析します。
CentOS 5.x
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
CentOS 6.x
$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
Ubuntu 12.04
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Ubuntu 14.04
$ gcc --version
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<—
これはまったく当てはまりません。 例えば、Sylvain Pineauは、ほとんどのプラットフォーム(Ubuntuを含む)にプリインストールされているPythonを延期することにより、現在のプラットフォームタイプを確実に照会する些細なワンライナーを展示しました。シェルスクリプトは、この回答に実装されている種類の低レベルで移植性のないテストで、プラットフォームメタデータを手動でクエリしようとしないでください。
awk
、mawk
他の実装も同様に機能します。
lsb_release
:lsb_release -d | awk -F"\t" '{print $2}' | awk -F " " '{print $1}'
lsb_release -d | awk '{print $3}'
またはgrep -oP 'VERSION="\K\S+' /etc/os-release
、awkへの二重パイプは不要です。
あなたは、このようなタスクを行うためにはbashを必要としない、と私のようなファイルを扱う避けるために、高レベルのアプローチを使用してお勧めしたい/etc/version
と/etc/issue
(私は13.10の/ etc /バージョンを持っていません)。
したがって、代わりにこのコマンドを使用することをお勧めします。
python -mplatform | grep -qi Ubuntu && sudo apt-get update || sudo yum update
python プラットフォームモジュールは両方のシステムで動作しapt-get
ますyum
。残りのコマンドは、Ubuntuがpythonから返されたかどうかを確認し、else を実行します。
-i
するgrep
ことができます。
これは、ファイルが存在するだけで、Ubuntu / CentOS / RHELのすべてのバージョンで機能する簡単な答えです(もちろん、Ubuntuボックスに/ etc / redhat-releaseをランダムにドロップした場合、フェイルセーフではありません)。
if [ -f /etc/redhat-release ]; then
yum update
fi
if [ -f /etc/lsb-release ]; then
apt-get update
fi
/etc/lsb-release
、それは両方を返しますので、6.8をCloudLinux(CentOSの)上に存在するyum
とapt-get
。
これらのタスクにChefを使用します。;-)
Chefでは、次のplatform?
メソッドを使用できます。
if platform?("redhat", "centos", "fedora")
# Code for only Red Hat Linux family systems.
end
または:
if platform?("ubuntu")
# Code for only Ubuntu systems
end
または:
if platform?("ubuntu")
# Do Ubuntu things
end
または:
if platform?("freebsd", "openbsd")
# Do BSD things
end
lsb_release
、/etc/os-release
)、この溶液は、シェフを必要とする明確な欠点を有する-コード(IAC)フレームワークとしてヘビーインフラではないほとんどのプラットフォームにデフォルトでインストールの使用を必要とします独自のドメイン固有言語(DSL)。要するに、ほとんどのユーザーは、おそらくしたいのPythonに延期する、されるシェルスクリプトでも(Ubuntuのを含む)ほとんどのプラットフォームにデフォルトでインストールおよびインタフェース。
次のスクリプトは、Ubuntuかどうかを判断する必要があります。そうでなく、あなたが持っている唯一の他のオプションがCentOSである場合、あなたはelse
句にそれを持つべきです:
dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
if [ "$dist" == "Ubuntu" ]; then
echo "ubuntu"
else
echo "not ubuntu"
fi
lsb_release
同じファイルを読み取るツールを使用して簡素化できます。またはこれらの場合にlsb_release -i
報告します。Distributor ID: Ubuntu
Distributor ID: CentOS
このコマンドを使用すると、CentOS、Ubuntu、Debianで機能します。
grep "^NAME=" /etc/os-release |cut -d "=" -f 2 | sed -e 's/^"//' -e 's/"$//'
Debianではそれが得られDebian GNU/Linux
、Ubuntuではそれが得られUbuntu
、CentOSではそれが得られCentOS Linux
ます。
gawkの代わりにgrep、cut、sedを使用する利点は明らかです。Debianにはデフォルトでgawkがインストールされていないため、ランダムなDebianボックスに依存することはできません。