Bagaimana saya bisa tahu apakah build itu berbasis Debian?

9

Saya mulai bekerja dengan sebuah kotak yang memiliki custom Linux (kecil) di atasnya. Bagaimana saya bisa tahu apakah ini bangunan berbasis Debian atau Red Hat?

Inilah yang saya tahu sejauh ini:

$ cat /proc/version
Linux version 2.6.31-2.5 (build@build-desktop) (gcc version 4.4.3 (Broadcom stbgcc-4.4.3-1.2) ) #7

$ apt-get
-sh: apt-get: command not found

$ yum
-sh: yum: command not found
Sparky1
sumber
kenapa lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-?? Jalankan sajalsb_release -si

Jawaban:

2

Menjalankan uname -aharus memberi Anda beberapa informasi umum tentang sistem. Selain itu, Anda dapat menjalankan apropos "package manager"atau dengan kata kunci serupa untuk mudah-mudahan mengetahui lebih lanjut tentang pengelola paket. Cari di /etcfile bernama di xyz-releasemana xyzseharusnya distro berjalan.


sumber
Inilah yang saya dapatkan ketika saya menjalankan uname -a: $ uname -a Linux 10.0.1.46 2.6.31-2.5 # 7 Kamis 15 Des 19:57:09 CST 2011 mips GNU / Linux
Sparky1
@ Sparky1 Kemudian, sepertinya Anda mendapatkan distribusi Linux-MIPS .
7

Untuk pengujian untuk sistem Debian, Anda dapat memeriksa apakah /etc/debian_versionada:

if [ -f "/etc/debian_version" ]; then
   # do stuff
fi

Itu harus dimasukkan Debian dan sistem berdasarkan itu (termasuk Ubuntu dan turunannya), meskipun beberapa mungkin tidak memilikinya - dalam hal ini Anda dapat memeriksa /etc/*releasefile:

if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
   # do stuff
fi

Di mana debian|buntu|mintada daftar nama distribusi yang harus dicari (bukan huruf besar-kecil) - Anda dapat mengetahui beberapa turunan umum dari sini , meskipun turunan debian seperti Ubuntu memiliki deriatifnya sendiri .


Untuk sistem berbasis RedHat, turunannya menggunakan rentang file yang lebih besar, dan mungkin tidak menginstal lsb-release - sehingga Anda dapat menerapkan metode berikut:

  • dapatkan nama rilisnya

    lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-
    
  • Periksa DISTRIB-ID dalam lsb-releasefile - 'metode mundur yang mungkin tidak perlu pada sistem modern', juga file tersebut tampaknya hilang pada Fedora, dan tidak mengandung DISTRIB_ID di OpenSUSE

  • periksa keberadaan beberapa berikut ini

    • /etc/fedora-releasedan / atau /etc/redhat-releaseuntuk RedHat atau Fedora
    • /etc/SuSE-release untuk SuSe
    • /etc/mandriva-release untuk mandriva / mageia
  • gunakan metode yang mirip dengan debian yang terakhir:

    if [ "$(grep -Ei 'fedora|redhat' /etc/*release)" ]; then
    ...
    

3 poin pertama yang saya dapatkan dari cron pembaruan Google Chrome, jadi Anda bisa memeriksanya untuk mengetahui lebih lanjut (itu juga menentukan manajer paket)


Untuk rentang OS yang lebih luas, membaca posting ini di SO akan membantu.

Wilf
sumber
2

Periksa output dari:

lsb_release -a

dan:

cat /etc/issue

Anda juga dapat memeriksa lebih banyak perintah paket tuas rendah rpmuntuk RedHat dan dpkguntuk Debian.

Michał Šrajer
sumber
Perintah $ dpkg tidak ditemukan $ rpm (menunjukkan opsi untuk perintah rpm). Sepertinya ini membangun topi merah. Terima kasih untuk bantuannya!
Sparky1
2
Anda juga dapat memeriksa file / etc / debian_version , yang ada di semua distribusi linux berbasis debian
Coren
Juga instal menggunakan apt-get install lsb-releasejika itu tidak diinstal.
Massood Khaari
1

Jika itu adalah perangkat yang disematkan (mis. Router SoHo), itu mungkin bukan salah satu dari distro "desktop / server". Saya akan mencoba melihat manual perangkat, situs web produsen (harus memiliki sumber untuk kode berlisensi GPL), dan Web pada umumnya.

Piskvor meninggalkan gedung
sumber
0

uname -adan cat /proc/version( hanya baca untuk pengguna super ), menurut pendapat jujur ​​saya, adalah satu-satunya jawaban yang benar untuk pertanyaan ini karena sisanya - seperti lsb_release, /etc/issueatau cat /proc/sys/kernel/version- tidak tersedia / tidak dapat digunakan pada setiap sistem (bahkan distro Debian resmi). Juga jangan repot-repot menggunakan /etc/*releases, /etc/*versionkarena mereka dapat diubah. Yang terakhir tidak tersedia di semua distro Debian.

Pilihan lain dapat (bukan rekomendasi saya):

  • Periksa dashatau verifikasi apakah shditautkan ke dash(itu harus menjadi default untuk menjalankan skrip)
  • Periksa manajer paket dengan menjalankan >/dev/null 2>&1 dpkg --version && { ... }
Aksioma Kelima
sumber