Katakanlah saya masuk ke sistem jarak jauh, bagaimana saya bisa tahu apa yang sedang berjalan? Pada kebanyakan Linux modern (Linuces?), Anda memiliki lsb_release
perintah:
$ lsb_release -ic
Distributor ID: LinuxMint
Codename: debian
Yang sejauh yang saya tahu hanya memberikan info yang sama dengan /etc/lsb-release
. Bagaimana jika file itu tidak ada? Sepertinya saya ingat bahwa lsb_release
perintah relatif baru jadi bagaimana jika saya harus mendapatkan OS dari sistem yang lebih lama?
Bagaimanapun, lsb
singkatan dari Linux Standard Base
jadi saya berasumsi itu tidak akan berfungsi di Unix non-Linux. Sejauh yang saya tahu, tidak ada cara untuk mendapatkan informasi ini dari uname
jadi bagaimana saya bisa mendapatkan ini pada sistem yang tidak menggunakan lsb_release
?
Jawaban yang Diterima:
lsb_release -a
kemungkinan akan menjadi pilihan terbaik Anda untuk menemukan informasi ini, dan dapat 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 standarisasi dalam distribusi Linux yang berbeda.
kutipan dari piagam
Kelompok kerja LSB memiliki, sebagai tujuan intinya, untuk menangani dua
masalah ini. Kami memublikasikan standar yang menjelaskan kumpulan API minimum
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
kumpulan umum. Akhirnya, melalui pekerjaan pengujian kami, kami berusaha untuk mencegah
perbedaan yang tidak perlu antara distribusi.
Tautan berguna yang terkait dengan LSB
- Piagam LSB
- Kelompok Kerja LSB
- Peta Jalan LSB
- Daftar Milis LSB (aktivitas saat ini ada di sini!)
- Daftar produk LSB bersertifikat
- Halaman Wikipedia LSB
Kritik
Ada sejumlah masalah dengan LSB yang membuatnya bermasalah untuk distro seperti Debian. Penggunaan RPM yang dipaksakan menjadi satu. Lihat artikel Wikipedia untuk informasi 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 aktual 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 mengkodekan hal di atas hanya dengan menggunakan uname
vanilla perintah, dan keberadaan salah satu file di atas.
CATATAN: Daftar ini bertanggal tetapi Anda dapat dengan mudah menghapus distro yang bertanggal seperti Mandrake dari daftar dan menggantinya dengan alternatif. Jenis skrip ini mungkin menjadi salah satu pendekatan jika Anda mencoba untuk mendukung banyak varian Solaris &Linux.
Mafia Linux
Pencarian lebih lanjut akan memunculkan halaman berikut yang dikelola di Linuxmafia.com, berjudul:/etc/release equivalents for galanya distribusi Linux (dan Unix lainnya). Ini mungkin daftar paling lengkap sampai saat ini yang pernah saya lihat. Anda dapat mengkodifikasi 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!
Terkait:Bagaimana cara melakukan `tail -f` dari file yang diputar log?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), 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 dalam /etc/bashrc
sistem atau beberapa file semacam itu yang kemudian akan mengatur variabel lingkungan $DISTRO
.
gcc
Percaya atau tidak metode lain adalah menggunakan gcc
. Jika Anda menanyakan perintah gcc --version
Anda akan mendapatkan distro tempat gcc dibuat, yang selalu sama dengan sistem yang digunakannya.
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 kunjungi (RedHat, Debian, Ubuntu, dll.). Untuk situasi di mana Anda mendukung sistem yang tidak menyediakan lsb_release
Saya akan menggulung sendiri sebagai bagian dari distribusi perangkat lunak yang saya sediakan, mirip dengan salah satu skrip di atas.
PERBARUI #1:Tindak lanjut dengan SuSE
Saat berbicara dengan @Nils di komentar di bawah, diputuskan bahwa untuk alasan apa pun, SLES11 tampaknya menghapus LSB dari penginstalan secara default. Itu hanya instalasi opsional, yang tampaknya berlawanan dengan paket yang menyediakan fitur kunci 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
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