lsb_release -a
kemungkinan akan menjadi pilihan terbaik Anda untuk mencari tahu informasi ini, dan mampu melakukannya secara konsisten.
Sejarah LSB
The lsb
dalam perintah yang berdiri untuk proyek Linux Standar Basis yang merupakan proyek payung yang disponsori oleh Yayasan Linux untuk menyediakan metode generik untuk melakukan jenis dasar hal-hal di berbagai distro Linux.
Proyek ini bersifat sukarela dan vendor dapat berpartisipasi dalam proyek hanya sebagai pengguna dan juga sebagai fasilitator dari berbagai spesifikasi di sekitar modul yang berbeda yang membantu mendorong standardisasi dalam distribusi Linux yang berbeda.
kutipan dari piagam
Kelompok kerja LSB memiliki, sebagai tujuan intinya, untuk mengatasi dua masalah ini. Kami menerbitkan standar yang menjelaskan tentang set minimum API yang harus didukung oleh distribusi, dengan berkonsultasi dengan vendor distribusi utama. Kami juga menyediakan tes dan alat yang mengukur dukungan untuk standar, dan memungkinkan pengembang aplikasi untuk menargetkan perangkat umum. Akhirnya, melalui pekerjaan pengujian kami, kami berusaha untuk mencegah perbedaan yang tidak perlu antara distribusi.
Tautan bermanfaat yang terkait dengan LSB
Kritik
Ada sejumlah masalah dengan LSB yang membuatnya bermasalah untuk distro seperti Debian. Pemaksaan penggunaan RPM menjadi satu. Lihat artikel Wikipedia untuk informasi lebih lanjut .
Novell
Jika Anda mencari, Anda mungkin akan menemukan halaman yang cukup bertanggal berjudul: Mendeteksi Distro Linux yang Mendasari dari Novell. Ini adalah salah satu dari sedikit tempat saya telah melihat daftar aktual yang menunjukkan beberapa distro utama dan bagaimana Anda dapat mendeteksi apa yang mendasarinya yang Anda gunakan.
kutipan
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
Halaman yang sama ini juga termasuk skrip praktis yang mencoba mengkodifikasikan untuk yang di atas menggunakan uname
perintah vanilla saja , dan keberadaan salah satu file di atas.
CATATAN: Daftar ini bertanggal tetapi Anda dapat dengan mudah menjatuhkan distro tanggal seperti Mandrake dari daftar dan menggantinya dengan alternatif. Jenis skrip ini mungkin merupakan salah satu pendekatan jika Anda mencoba mendukung sebagian besar varian Solaris & Linux.
Linux Mafia
Pencarian lebih lanjut akan muncul halaman berikut dikelola di Linuxmafia.com, berjudul: / etc / rilis setara untuk berbagai Linux (dan Unix lainnya) distribusi . Ini mungkin daftar paling lengkap yang pernah saya lihat. Anda dapat menyusun daftar ini dengan pernyataan case / switch dan memasukkannya sebagai bagian dari distribusi perangkat lunak Anda.
Bahkan ada skrip di bagian bawah halaman yang melakukan hal itu. Jadi Anda bisa mengunduh dan menggunakan skrip sebagai pihak ke-3 untuk distribusi perangkat lunak Anda.
naskah
#!/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}
CATATAN: Script ini seharusnya terlihat familier, ini adalah versi terbaru dari Novell!
Script ruang kaki
Metode lain yang saya lihat digunakan adalah untuk menggulung skrip Anda sendiri, mirip dengan metode Novell di atas tetapi menggunakan LSB sebagai gantinya. Artikel ini berjudul: Metode Generik untuk Menentukan Linux (atau UNIX) Nama Distribusi , menunjukkan salah satu metode tersebut.
# 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
Potongan kode ini dapat dimasukkan ke sistem /etc/bashrc
atau beberapa file seperti itu yang kemudian akan mengatur variabel lingkungan $DISTRO
.
gcc
Percaya atau tidak, metode lain adalah memanfaatkannya gcc
. Jika Anda menanyakan perintah, gcc --version
Anda akan mendapatkan distro yang dibangun untuk gcc, yang sama dengan sistem yang sedang berjalan.
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;
Jadi yang mana yang harus saya gunakan? Saya cenderung mengikuti lsb_release -a
distribusi Linux yang sering saya kunjungi (RedHat, Debian, Ubuntu, dll.). Untuk situasi di mana Anda mendukung sistem yang tidak menyediakan, lsb_release
saya akan menggulirkan saya sendiri sebagai bagian dari distribusi perangkat lunak yang saya sediakan, mirip dengan salah satu skrip di atas.
UPDATE # 1: Tindak lanjut dengan SuSE
Dalam berbicara dengan @Nils dalam komentar di bawah ini ditentukan bahwa untuk alasan apa pun, SLES11 tampaknya menjatuhkan LSB agar tidak diinstal secara default. Itu hanya instalasi opsional, yang tampaknya berlawanan dengan paket yang menyediakan fitur utama jenis ini.
Jadi saya mengambil kesempatan untuk menghubungi seseorang dari proyek OpenSuSE untuk mengetahui alasannya.
kutipan email
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
Inilah respons Rob
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
harus cukup di luar Linux (harapkan mungkin untuk BSD).