lsb_release -a
kemungkinan akan menjadi pilihan terbaik Anda untuk menemukan informasi ini, dan mampu melakukannya dengan cara yang konsisten.
Sejarah LSB
lsb
dalam perintah itu adalah singkatan dari proyek Basis Standar Linux yang merupakan proyek payung yang disponsori oleh Yayasan Linux untuk menyediakan metode umum untuk melakukan hal-hal dasar di berbagai distro Linux.
Proyek ini bersifat sukarela dan vendor dapat berpartisipasi dalam proyek hanya sebagai pengguna dan juga sebagai fasilitator dari berbagai spesifikasi seputar modul berbeda yang membantu mendorong standardisasi dalam berbagai distribusi Linux.
kutipan dari piagam
Kelompok kerja LSB memiliki, sebagai tujuan intinya, untuk mengatasi dua masalah ini. Kami menerbitkan standar yang menjelaskan kumpulan minimum API yang harus didukung oleh distribusi, dengan berkonsultasi dengan vendor distribusi utama. Kami juga menyediakan pengujian dan alat yang mengukur dukungan untuk standar, dan memungkinkan pengembang aplikasi untuk menargetkan perangkat umum. Terakhir, melalui pekerjaan pengujian kami, kami berupaya mencegah perbedaan yang tidak perlu antara distribusi.
Tautan berguna terkait LSB
- Piagam LSB
- Kelompok Kerja LSB
- Peta Jalan LSB
- Milis LSB (aktivitas saat ini ada di sini!)
- Daftar produk LSB bersertifikat
- Halaman Wikipedia LSB
Kritik
Ada beberapa masalah dengan LSB yang membuatnya bermasalah untuk distro seperti Debian. Penggunaan paksa RPM menjadi satu. Lihat artikel Wikipedia untuk mengetahui lebih lanjut tentang masalah ini.
Novel
Jika Anda mencari, Anda mungkin akan menemukan halaman yang tampak cukup kuno berjudul:Mendeteksi Distro Linux yang Mendasari dari Novell. Ini adalah salah satu dari sedikit tempat yang pernah saya lihat daftar sebenarnya yang menunjukkan beberapa distro utama dan bagaimana Anda dapat mendeteksi apa yang mendasari 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 menyertakan skrip praktis yang mencoba mengkodifikasi untuk hal di atas hanya dengan menggunakan vanilla uname
perintah, dan keberadaan salah satu file di atas.
CATATAN: Daftar ini bertanggal tetapi Anda dapat dengan mudah membuang distro yang bertanggal 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.
Mafia Linux
Pencarian lebih lanjut akan muncul di halaman berikut yang dikelola di Linuxmafia.com, berjudul:/etc/release equivalents for galanya Linux (dan Unix lainnya) distro. Ini mungkin daftar paling lengkap sampai saat ini yang pernah saya lihat. Anda dapat menyusun daftar ini dengan pernyataan case/switch dan memasukkannya sebagai bagian dari distribusi perangkat lunak Anda.
Sebenarnya ada skrip di bagian bawah halaman itu yang melakukan hal itu. Jadi, Anda cukup mengunduh dan menggunakan skrip sebagai pihak ketiga untuk distribusi perangkat lunak Anda.
skrip
#!/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: Skrip ini seharusnya terlihat familier, ini adalah versi terbaru dari Novell!
Skrip ruang kaki
Metode lain yang saya lihat digunakan adalah menggulung skrip Anda sendiri, mirip dengan metode Novell di atas tetapi menggunakan LSB sebagai gantinya. Artikel ini berjudul:Metode Generik untuk Menentukan Nama Distribusi Linux (atau UNIX), menampilkan 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 dalam /etc/bashrc
sistem atau beberapa file semacam itu yang kemudian akan mengatur variabel lingkungan $DISTRO
.
gcc
Percaya atau tidak metode lain adalah dengan memanfaatkan gcc
. Jika Anda menanyakan perintah gcc --version
Anda akan mendapatkan distro tempat gcc dibuat, yang selalu sama dengan sistem yang menjalankannya.
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 menggunakan lsb_release -a
untuk semua distribusi Linux yang sering saya gunakan (RedHat, Debian, Ubuntu, dll.). Untuk situasi saat Anda mendukung sistem yang tidak menyediakan lsb_release
Saya akan membuat sendiri sebagai bagian dari distribusi perangkat lunak yang saya sediakan, mirip dengan salah satu skrip di atas.
PEMBARUAN #1:Tindak lanjut dengan SuSE
Saat berbicara dengan @Nils di komentar di bawah, ditentukan bahwa untuk alasan apa pun, SLES11 tampaknya menghentikan LSB agar tidak diinstal secara default. Itu hanya instalasi opsional, yang tampaknya berlawanan dengan paket yang menyediakan jenis fitur utama 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
Ini tanggapan 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
Karena Anda mungkin tidak dapat memasang facter
di server jarak jauh, Anda dapat meniru apa yang dilakukannya untuk menemukan nama OS. Kode Ruby untuk operatingsystem
fakta dapat ditemukan di sini di pastebin. Pada dasarnya, ini terlihat melalui *-release
yang berbeda file dan lainnya untuk menentukan nama OS.
Beberapa file yang dilihatnya:
/etc/debian_version
/etc/gentoo-release
/etc/fedora-release
/etc/mandriva-release
/etc/mandrake-release
/etc/meego-release
/etc/arch-release
/etc/oracle-release
/etc/enterprise-release
/etc/ovs-release
/etc/vmware-release
/etc/redhat-release
/etc/SuSE-release
/etc/bluewhite64-version
/etc/slamd64-version
/etc/slackware-version
/etc/alpine-release
/etc/system-release
/etc/centos-release
Maaf jika Anda menemukan duplikat dalam daftar ini, saya membuatnya dengan cepat dengan grep
. Seharusnya cukup mudah (walaupun agak membosankan) untuk mem-porting ini ke skrip shell POSIX.
Jika Anda memiliki python
diinstal (tidak masalah apakah Python 3 atau Python 2), Anda dapat mengetahui nama distribusi tanpa menemukan kembali roda :
python -c "import platform;print(platform.linux_distribution()[0])"