Pada distribusi Linux apa saya dapat mengandalkan keberadaan / etc / os-release?

17

Saya mencoba menemukan cara untuk menentukan nama dan versi distribusi Linux yang akan berfungsi pada sebagian besar (atau idealnya, semua) distribusi modern. aku tahu itu/etc/os-release berisi info yang saya butuhkan pada distribusi yang saya coba (CentOS, Debian), tetapi seberapa amankah itu untuk bergantung pada keberadaannya? Perintah seperti uname -atidak benar-benar berisi info yang sama, dan lsb_releasetampaknya tidak ada pada mis CentOS minimal.

Apakah ada cara cepat untuk mencari tahu persis apa distro yang datang /etc/os-release? Selain itu, /etc/os-releasedijamin berisi NAME, VERSIONdan PRETTY_NAMEbidang?

w128
sumber
1
Ubuntu, Debian, Arch pasti. Pokoknya saya akan menghilangkan mendeteksi distro seperti itu. Terakhir kali saya perlu membedakan distro, saya memeriksa keberadaan manajer paket tertentu (misalnya pacman -> Arch, apt-get & no pacman -> baik Ubuntu atau Debian). Ini tugas yang agak sulit dan saya juga ingin tahu apakah ada solusi yang lebih baik.
ddnomad
1
Orang bertanya-tanya mengapa Anda perlu tahu nama distribusinya. Ini terdengar seperti kasus deteksi Browser ketika Anda harus melakukan deteksi Fitur .
xDaizu
@ xDaizu Saya menjalankan skrip pada host jarak jauh untuk menarik berbagai info tentang mereka.
w128
@ w128 dalam kasus itu, tidak bisakah Anda memeriksa apakah "fitur" (/ etc / os-release) ada (dan mundur ke metode lain jika tidak) alih-alih mengandalkan daftar distribusi yang dapat berubah yang statis di mana ia berfungsi?
xDaizu
1
@xDaizu kembali ke "metode lain" mungkin melibatkan pekerjaan tambahan yang mungkin terbukti tidak perlu jika saya dapat menjamin solusi sederhana yang diajukan dalam pertanyaan dapat diandalkan pada beberapa distro utama yang saya perlu dukung, sehingga daftar distro yang didukung yang dapat diubah baik-baik saja pada kasus ini.
w128

Jawaban:

14

Setiap sistem yang menjalankan systemd harus memiliki /etc/os-release, yang ditentukan sebagai bagian dari systemd. Beberapa sistem tanpa systemd mungkin juga memilikinya ( misalnya Debian 8 di mana systemd adalah opsional tetapi /etc/os-releasediinstal dalam semua kasus).

Menurut spesifikasi, semua bidang adalah opsional, dan beberapa memiliki standar ("Linux" untuk NAMEdan PRETTY_NAME).

Anda akan menemukan lebih banyak latar belakang dalam /etc/os-releasepengumuman .

Stephen Kitt
sumber