GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mendapatkan nama distribusi dan nomor versi dalam skrip shell sederhana?

Untuk mendapatkan OS dan VER , standar terbaru tampaknya adalah /etc/os-release .Sebelum itu, ada lsb_release dan /etc/lsb-release . Sebelumnya, Anda harus mencari file berbeda untuk setiap distribusi.

Inilah yang saya sarankan

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

Saya pikir uname untuk mendapatkan ARCH masih merupakan cara terbaik. Tetapi contoh yang Anda berikan jelas hanya menangani sistem Intel. Saya akan menyebutnya BITS seperti ini:

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

Atau ubah ARCH menjadi versi yang lebih umum, namun tidak ambigu:x86 dan x64 atau serupa:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

tapi tentu saja itu terserah Anda.


Saya akan melakukan ini sebagai langkah pertama:

ls /etc/*release

Gentoo, RedHat, Arch &SuSE memiliki file bernama mis. /etc/gentoo-release . Tampaknya populer, periksa situs ini tentang file rilis.

Debian &Ubuntu harus memiliki /etc/lsb-release yang juga berisi info rilis, dan akan muncul dengan perintah sebelumnya.

Cara cepat lainnya adalah uname -rv . Jika kernel yang diinstal adalah kernel distro bawaan, Anda akan biasanya terkadang menemukan nama di sana.


lsb_release -a . Bekerja pada Debian dan saya kira Ubuntu, tapi saya tidak yakin tentang sisanya. Biasanya itu harus ada di semua distribusi GNU/Linux karena terkait dengan LSB (Linux Standard Base).


Linux
  1. Bagaimana Cara Mendapatkan Alamat Ip Sendiri Dan Menyimpannya Ke Variabel Dalam Script Shell?

  2. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?

  3. Bagaimana cara mendapatkan nama dan versi distribusi Linux?

  1. Cara mendapatkan PID dari proses anak bercabang di skrip Shell

  2. Bagaimana saya bisa menemukan versi shell saya menggunakan perintah Linux?

  3. Bagaimana saya bisa mengurai mikrokode (ucode) di iwlwifi untuk mendapatkan nomor versi?

  1. Bagaimana Membandingkan Angka dan String di Linux Shell Script

  2. Bagaimana saya bisa mendapatkan nama sistem operasi dengan andal?

  3. Bagaimana cara mendapatkan pid dari suatu proses dan mengaktifkan kill -9 di skrip Shell?