lsb_release -a
Muhtemelen bu bilgiyi bulmak için en iyi seçenek olacak ve bunu tutarlı bir şekilde yapabilmeniz mümkün olacaktır.
LSB Tarihçesi
Bu lsb
komut , Linux Vakfı'nın sponsorluğunu yaptığı ve çeşitli Linux dağıtımlarında temel şeyler yapmak için genel yöntemler sağlayan bir şemsiye proje olan Linux Standartları Bazını ifade eder.
Proje isteğe bağlıdır ve satıcılar projeye yalnızca bir kullanıcı olarak ve ayrıca farklı Linux dağıtımlarında standardizasyonu sağlamada yardımcı olan farklı modüllerin etrafındaki çeşitli özelliklerin kolaylaştırıcıları olarak katılabilirler.
sözleşmeden alıntı
LSB çalışma grubunun, asıl amacı olarak, bu iki kaygıyı ele alması gerekir. Bir dağıtımın desteklemesi gereken asıl API setini tanımlayan bir standart yayınlıyoruz, ana dağıtım satıcılarıyla istişare içinde. Ayrıca, standart için desteği ölçen ve uygulama geliştiricilerin ortak kümeyi hedeflemelerini sağlayan testler ve araçlar sunuyoruz. Son olarak, test çalışmalarımız sayesinde dağıtımlar arasında gereksiz yere ayrışmayı önlemeye çalışıyoruz.
LSB ile ilgili faydalı linkler
eleştiriler
Debian gibi dağıtımlarda LSB ile ilgili sorunlu kılan bazı sorunlar var. RPM'nin zorunlu kullanımı birdir. Konuyla ilgili daha fazla bilgi için Wikipedia makalesine bakın .
Novell
Arama yaparsanız, muhtemelen başlıklı oldukça tarihli bir görünen sayfaya rastlarsınız: Alttaki Linux Distro'yu Novell'den Algılama . Bu, belli başlı dağıtımların birkaçını ve gerçekte ne kullandığınızı nasıl tespit edebileceğinizi gösteren gerçek bir liste gördüğüm yerlerden biri.
alıntı
Novell SUSE /etc/SUSE-release
Red Hat /etc/redhat-release, /etc/redhat_version
Fedora /etc/fedora-release
Slackware /etc/slackware-release, /etc/slackware-version
Debian /etc/debian_release, /etc/debian_version,
Mandrake /etc/mandrake-release
Yellow dog /etc/yellowdog-release
Sun JDS /etc/sun-release
Solaris/Sparc /etc/release
Gentoo /etc/gentoo-release
UnitedLinux /etc/UnitedLinux-release
ubuntu /etc/lsb-release
Aynı sayfa, sadece vanilya uname
komutlarını kullanarak yukarıdakileri kodlamaya çalışan kullanışlı bir komut dosyası ve yukarıdaki dosyalardan birinin varlığını da içerir.
NOT: Bu liste tarihlidir, ancak Mandrake gibi tarihli dağıtımları kolayca listeden çıkarabilir ve alternatiflerle değiştirebilirsiniz. Solaris ve Linux değişkenlerinin büyük bir bölümünü desteklemeye çalışıyorsanız, bu tür bir komut dosyası bir yaklaşım olabilir.
Linux Mafyası
Daha fazla arama, Linuxmafia.com sitesinde tutulan ve aşağıdaki muhtelif Linux (ve diğer Unix) dağıtımları için / etc / release denkleri başlıklı aşağıdaki sayfayı açacaktır . Bu muhtemelen şu ana kadar gördüğüm en kapsamlı liste. Bu listeyi bir case / switch ifadesi ile kodlayabilir ve yazılım dağıtımınızın bir parçası olarak ekleyebilirsiniz.
Aslında o sayfanın altında tam olarak bunu yapan bir betik var. Böylece senaryoyu yazılım dağıtımına üçüncü taraf olarak indirebilir ve kullanabilirsin.
senaryo
#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`
GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ] ; then
DIST='RedHat'
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DIST='Mandrake'
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi
OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
echo ${OSSTR}
NOT: Bu senaryo tanıdık gelmeli, Novell'in güncel bir sürümü!
Legroom betiği
Kullandığım bir diğer yöntem, yukarıdaki Novell yöntemine benzer olan ancak bunun yerine LSB'yi kullanan kendi komut dosyanızı döndürmektir. Bu makalede: Linux (veya UNIX) Dağıtım Adını Belirlemeye Genel Yöntem , böyle bir yöntem gösterilmektedir.
# 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
Bu kod parçası, bir sistemin içine /etc/bashrc
veya daha sonra ortam değişkenini ayarlayacak bir dosyaya dahil edilebilir $DISTRO
.
gcc
İster inanın ister inanmayın başka bir yöntem kullanmaktır gcc
. Komutu sorgularsanız, gcc --version
gcc'nin yapıldığı dağıtımı elde edersiniz, bu, üzerinde çalıştığı sistemle aynıdır.
Fedora 14
$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.
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.
TL; DR;
Peki hangisini kullanmalıyım? lsb_release -a
Sık kullanacağım herhangi bir Linux dağıtımı için gitmeye meyilliyim (RedHat, Debian, Ubuntu, vs.). Desteklemediğiniz sistemleri desteklediğiniz durumlar lsb_release
için, yukarıdaki komut dosyalarından birine benzer şekilde, sağladığım yazılım dağıtımının bir parçası olarak kendimi atacağım.
GÜNCELLEME # 1: SuSE ile takip
Aşağıdaki açıklamalarda @Nils ile konuşurken, SLES11'in LSB'nin varsayılan olarak kurulmasını engellediği görülmüştür. Yalnızca bu tür bir anahtar özellik sağlayan bir paket için sayaç gibi görünen isteğe bağlı bir kurulumdu.
Bu yüzden, nedenini anlamak için OpenSuSE projesinden birisiyle bağlantı kurma fırsatını yakaladım.
e-postanın alıntı
Hi Rob,
I hope you don't mind me contacting you directly but I found your info here:
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange
sites, Unix & Linux and a question recently came up regarding the best option
for determining the underlying OS.
http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218
In my answer I suggested using lsb_release, but one of the other users mentioned
that this command wasn't installed as part of SLES11 which kind of surprised me.
Anyway we were looking for some way to confirm whether this was intentionally
dropped from SLES or it was accidental.
Would you know how we could go about confirming this one way or another?
Thanks for reading this, appreciate any help and/or guidance on this.
-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm
İşte Rob'un cevabı
Hi,
On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -
lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.
At present almost every distribution has an entry in /etc such as
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and
others there is a standardization effort going on driven by the convergence to
systemd. The standard location for distribution information in the future will
be /etc/os-release, although Ubuntu will probably do something different.
HTH,
Robert
-- Robert Schweikert MAY THE SOURCE BE WITH YOU
SUSE-IBM Software Integration Center LINUX
Tech Lead
Public Cloud Architect
uname -s
Linux dışında yeterli olmalıdır (BSD'ler için muhtemelen bekleyin).