私は この投稿 どのディストリビューションがインストールされているかを見つけるためのさまざまな方法を見たので、それらすべてを試すスクリプトを書こうとしています。可能なコマンドは次のとおりです。
$ cat /etc/lsb-release
$ cat /etc/issue
$ dmesg | head -1
$ cat /proc/version
$ cat /etc/slackware-version
$ cat/etc/debian-verion
私はこのようなものを書いてみました(私は通常スペイン語を話すので、スペイン語です):
function Nombre_SO()
{
DistroName="Linux"
if [ $DistroName = Linux ] ;
then
# Debian
debian=`cat /etc/debian_version | cut -d " " -f01 | tr '[:upper:]' '[:lower:]'`
if [ "$debian" = "debian" || "squeeze/sid" || "lenny" ];
then
DistroName="debian"
else
echo "Esto no es debian"
fi
# Slackware
slackware=`cat /etc/slackware-version | cut -d " " -f01` | tr '[:upper:]' '[:lower:]'`
if [ "$slackware" = "slackware" || "slackware-x86_64" ];
then
DistroName="slackware"
else
echo "Esto no es Slackware"
}
誰かが私がディストリビューションの名前を取得するために他のすべての方法を組み込むのを手伝ってもらえますか?
各ディストリビューションは(lsbの努力にもかかわらず)、その名前とバージョンを宣言するために/ etc /内の異なるファイルを使用するか、使用する可能性があります(またはそれがない場合もあります)。
それぞれのスクリプトに条件を追加する必要があります。また、一部のディストリビューションは他の主要なディストリビューションから派生しており、バージョンファイルを適合させる場合と適合させない場合があることも考慮に入れてください。
車輪の再発明をしたくない場合は、他の人の仕事を使ってあなたが探しているものを達成することができます。たとえば、モジュールのpython platform には、分布を推測する方法があります。
Help on function linux_distribution in module platform:
linux_distribution(distname='', version='', id='', supported_dists=('SuSE', 'debian', 'Fedora', 'redhat', 'centos', 'Mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo', 'UnitedLinux', 'turbolinux'), full_distribution_name=1)
Tries to determine the name of the Linux OS distribution name.
The function first looks for a distribution release file in
/etc and then reverts to _dist_try_harder() in case no
suitable files are found.
supported_dists may be given to define the set of Linux
distributions to look for. It defaults to a list of currently
supported Linux distributions identified by their release file
name.
If full_distribution_name is true (default), the full
distribution read from the OS is returned. Otherwise the short
name taken from supported_dists is used.
Returns a Tuple (distname,version,id) which default to the
args given as parameters.
例えば:
In [1]: import platform
In [2]: platform.linux_distribution()
Out[2]: ('Ubuntu', '11.10', 'oneiric')
Linux Standard Base は、そのためのコマンドを指定します。
lsb_release -si
これは常にデフォルトのインストールの一部であるとは限らないため、スクリプトをすべてのシステムで機能させる場合は、ルックアンドゲスルートにフォールバックする必要があります。
これは、物事を達成するための少し「力ずくの」方法ですが、迅速であり、bashを使用して、ほとんどのディストリビューションで機能するはずです。
ver=$(cat /etc/*{issues,release,version} 2> /dev/null)
if [[ $(echo $ver | grep DISTRIB_ID) ]]; then
lsb_release -si
else
echo $ver | cut -d ' ' -f 1 | sort -u | head -1
fi
追加の依存関係を恐れていない場合は、 facter を使用できます。 lsb_releaseがインストールされていなくても、ディストリビューションの名前とバージョンに関する情報を提供します。