GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Cara Mendapatkan Nama Sistem Operasi yang Andal?

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 

Linux
  1. Bagaimana cara mendapatkan nama dan versi distribusi Linux?

  2. Bagaimana cara mengatur nama utas di Linux pthreads?

  3. Bagaimana saya bisa mendapatkan status keyboard di Linux?

  1. Bagaimana cara mendapatkan nama file dengan Linux 'find'?

  2. Bagaimana cara mendapatkan nama pengguna di C/C++ di Linux?

  3. Bagaimana cara mendapatkan hanya ID proses dalam menentukan nama proses di linux?

  1. Bagaimana cara mendapatkan sistem operasi saat ini di MSBuild?

  2. Bagaimana cara mendapatkan jumlah disk fisik di Linux?

  3. Bagaimana cara mendapatkan ukuran fisik file di Linux?