GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui versi Linux yang sedang berjalan?

Solusi 1:

Tidak ada cara lintas distribusi. Namun:

  • Redhat dan teman-teman:Uji /etc/redhat-release , periksa isinya
  • Debian:Tes untuk /etc/debian_version , periksa isinya
  • Mandriva dan teman-teman:Tes untuk /etc/version , periksa isinya
  • Slackware:Tes untuk /etc/slackware-version , periksa isinya

Dll. Secara umum, periksa /etc/*-release dan /etc/*-version .

Sunting:Menemukan skrip bash lama (1+ tahun) milik saya yang tergeletak di sekitar yang pasti telah saya buat bersama selama bertahun-tahun (memiliki log CVS yang mengesankan sejak 6 tahun yang lalu.) Ini mungkin tidak berfungsi dengan baik lagi apa adanya dan saya bisa Anda tidak perlu repot mencari distro yang terinstal untuk diuji, tetapi ini akan memberi Anda titik awal yang baik. Ini berfungsi dengan baik di CentOS, Fedora dan Gentoo. gyaresu berhasil mengujinya di Debian Lenny.

#!/bin/bash

get_distribution_type()
{
    local dtype
    # Assume unknown
    dtype="unknown"

    # First test against Fedora / RHEL / CentOS / generic Redhat derivative
    if [ -r /etc/rc.d/init.d/functions ]; then
        source /etc/rc.d/init.d/functions
        [ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"

    # Then test against SUSE (must be after Redhat,
    # I've seen rc.status on Ubuntu I think? TODO: Recheck that)
    elif [ -r /etc/rc.status ]; then
        source /etc/rc.status
        [ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"

    # Then test against Debian, Ubuntu and friends
    elif [ -r /lib/lsb/init-functions ]; then
        source /lib/lsb/init-functions
        [ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"

    # Then test against Gentoo
    elif [ -r /etc/init.d/functions.sh ]; then
        source /etc/init.d/functions.sh
        [ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"

    # For Slackware we currently just test if /etc/slackware-version exists
    # and isn't empty (TODO: Find a better way :)
    elif [ -s /etc/slackware-version ]; then
        dtype="slackware"
    fi
    echo $dtype
}

Perhatikan bahwa ini mungkin hanya berfungsi dengan benar di Bash. Anda dapat menulis ulang untuk shell lain.

Karena itu, Anda mungkin ingin menguji fitur, bukan distribusi. Saya tidak menggunakan ini lagi hanya karena menjadi beban pemeliharaan. Lebih mudah untuk mengandalkan alat dan solusi lintas distribusi.

Secara konseptual, apa yang dilakukannya adalah, dalam urutan:

  • Tarik jenis file "fungsi skrip init umum" yang diketahui. Itu khusus untuk distribusi. Jika tidak ada, lanjutkan ke pemeriksaan distribusi berikutnya.
  • Periksa keberadaan fungsi tertentu, yang diketahui keberadaannya, sering digunakan, dan tidak mungkin diganti namanya dari skrip inti tersebut. Kami melakukannya dengan menggunakan type Bash bawaan. type -t mengembalikan function jika simbol itu adalah fungsi. Kami menambahkan zz ke keluaran dari type -t 2>/dev/null karena jika nama tidak ditentukan, string keluaran akan kosong dan kami akan mendapatkan kesalahan sintaks tentang tangan kiri yang hilang ke == operator. Jika nama yang baru saja kita periksa bukan fungsi, lanjutkan ke pemeriksaan distribusi berikutnya, jika tidak, kita akan menemukan jenis distribusinya.
  • Akhirnya, gema jenis distribusi sehingga keluaran fungsi dapat dengan mudah digunakan dalam kasus .. blok esac.

Edit jika Anda mencoba menjalankan ini sebagai skrip langsung:Skrip ini seharusnya bersumber atau disertakan dari skrip lain. Itu tidak menghasilkan apa pun dengan sendirinya jika Anda menjalankannya apa adanya. Untuk mengujinya, ambil sumbernya lalu aktifkan fungsi, mis.:

source /path/to/this/script.sh
get_distribution_type

di prompt bash.

Sunting:Harap perhatikan bahwa skrip ini tidak memerlukan hak akses root. Saya mendorong Anda untuk tidak menjalankannya sebagai root. Seharusnya tidak membahayakan apa pun, tetapi tidak perlu.

Menemukan link ke posting milis yang relevan di log CVS. Seharusnya berguna dalam membuka bungkus spageti skrip init.

Solusi 2:

Jangan mencoba dan membuat asumsi berdasarkan distro tentang apa yang Anda bisa dan tidak bisa lakukan, karena di situlah letak kegilaan (lihat juga "Deteksi Agen Pengguna"). Alih-alih, deteksi apakah yang ingin Anda lakukan didukung, dan bagaimana hal itu dilakukan dengan perintah atau lokasi file apa pun yang ingin Anda gunakan.

Misalnya, jika Anda ingin menginstal sebuah paket, Anda dapat mendeteksi apakah Anda menggunakan sistem mirip Debian atau sistem mirip RedHat dengan memeriksa keberadaan dpkg atau rpm (periksa dpkg terlebih dahulu, karena mesin Debian dapat memiliki perintah rpm pada mereka ...). Buat keputusan Anda tentang apa yang harus dilakukan berdasarkan itu, bukan hanya pada apakah itu sistem Debian atau RedHat. Dengan begitu, Anda akan secara otomatis mendukung distro turunan apa pun yang tidak Anda programkan secara eksplisit. Oh, dan jika paket Anda memerlukan dependensi khusus, uji juga untuk itu dan beri tahu pengguna apa yang hilang.

Contoh lain adalah mengutak-atik antarmuka jaringan. Cari tahu apa yang harus dilakukan berdasarkan apakah ada file /etc/network/interfaces atau direktori /etc/sysconfig/network-scripts, dan lanjutkan dari sana.

Ya, ini lebih sulit, tetapi kecuali jika Anda ingin mengulangi semua kesalahan yang dilakukan developer web selama dekade terakhir atau lebih, Anda akan melakukannya dengan cara yang cerdas sejak awal.

Solusi 3:

Anda dapat menemukan versi kernel dengan menjalankan uname -a , menemukan versi distro bergantung pada distro tersebut.

Di Ubuntu dan beberapa OS lain, Anda dapat menjalankan lsb_release -a atau baca /etc/lsb_release

Debian menyimpan versi di /etc/debian_version

Solusi 4:

Sebagian besar distro memiliki metode unik untuk menentukan distribusi tertentu.

Misalnya:

Redhat (And derivatives): /etc/redhat-release

SUSE: /etc/SUSE-release

Ada standar di luar sana yang dikenal sebagai Linux Standard Base atau LSB. Ini mendefinisikan bahwa harus ada file bernama /etc/lsb-release atau program bernama lsb_release yang akan mengembalikan informasi tentang distro linux Anda.

lsb_release -a

Solusi 5:

python -c 'import platform ; print platform.dist()[0]'

kode:http://hg.python.org/cpython/file/2.7/Lib/platform.py


Linux
  1. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  2. Linux – Bagaimana Cara Mengetahui Hard Disk Apa yang Ada di Sistem?

  3. Cara Memeriksa Versi MySQL di Linux

  1. Cara memeriksa versi Redhat

  2. Bagaimana cara mengetahui proses apa yang mengunci file di Linux?

  3. bagaimana cara memeriksa versi linux X11?

  1. Versi Linux Apa yang Saya Jalankan? Inilah Cara Mengetahuinya

  2. Cara memeriksa versi Kernel di Linux

  3. Cara Memeriksa Versi OS Linux Anda