Tentukan distribusi Linux

11

Saya mencoba menentukan rasa server linux yang sedang berjalan. Saya tidak mencoba menentukan versi kernel - tetapi mendaftar ulang distributor.

gcc diinstal, dan dalam versi keluaran, dikatakan RedHat

# gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-11)

Apakah ini berarti saya dapat dengan aman menganggap server saya adalah server RedHat. Apakah ada metode antipeluru yang lebih baik - 100% untuk mengetahuinya? Juga untuk rasa linux lainnya - bukan hanya server ini?

Sunting: isi /etc/kalau-kalau itu membantu - tapi saya ingin solusi yang bekerja untuk versi lain dari linux juga.

# ls /etc/
./              backupmxhosts  domainusers     host.conf     localdomains  mailips        pam.d/      relayhosts               shadow              trustedmailhosts
../             bashrc*        exim.conf       inputrc       localtime     man.config     passwd      resolv.conf              skipsmtpcheckhosts  userdomains
DIR_COLORS      cron.deny      exim.pl         ld.so.cache   lynx.cfg      mtab           profile     secondarymx              spammeripblocks     vimrc
aliases         demodomains    exim.pl.local*  ld.so.conf    mail/         my.cnf         profile.d/  senderverifybypasshosts  sudoers
antivirus.exim  demouids       group           localaliases  mailhelo      nsswitch.conf  protocols   services                 termcap

Saya tidak punya *releaseatau *versionfile masuk/etc/

# ls /etc*release; ls /etc/*version
/bin/ls: /etc/*release: No such file or directory
/bin/ls: /etc/*version: No such file or directory

Saya mencoba LSB

# lsb_release -a
LSB Version:
Distributor ID: n/a
Description:    (none)
Release:        n/a
Codename:       n/a

Juga - saya kira saya berada di dalam chroot jail(tidak benar-benar yakin apa itu) yang mungkin bisa menjadi penyebab masalah ini.


Diperbarui:

Saya pikir ini melakukannya untuk saya. Saya pikir saya dapat dengan aman menganggap saya menggunakan cent-os.

# cat /proc/version
Linux version 2.6.9-103.plus.c4smp ([email protected]) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Wed Dec 21 16:17:23 EST 2011
Billy Moon
sumber
Mengapa Anda perlu tahu? Mungkin alih-alih pengujian untuk alat distribusi khusus yang umum (manajer paket, misalnya) akan melakukan apa yang Anda inginkan?
Daniel Pryden
1
Nah, yang benar-benar ingin saya ketahui adalah jika saya dapat mereplikasi server sebagai mesin virtual secara lokal, dan kemudian menginstal barang-barang di mesin virtual lokal, kemudian menyalin binari ke mesin jarak jauh. Saya pikir menemukan platform yang tepat akan menjadi titik awal yang baik.
Billy Moon
2
Daftar direktori di atas tidak lengkap (mis. Host tidak ada, init.d, rc *). Apakah ini ujian?
Bagaimana Anda mengakses server ini? Apakah mungkin Anda tidak memiliki akses ke sistem file server secara langsung, tetapi malah berada di dalam chroot jail?
Daniel Pryden
Saya kira saya bisa berada di dalam chroot jail - apakah ini berarti saya tidak dapat mengetahui apa sistem yang mendasarinya?
Billy Moon

Jawaban:

4
cat /proc/version

Contoh:

  1. Ubuntu:

    $ cat /proc/version
    Linux version 3.11.0-13-generic (buildd@roseapple) (gcc version 4.8.1 \
    (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 07:38:26 UTC 2013
    
  2. Topi Merah / CentOS:

    $ cat /proc/version
    Linux version 2.6.32-220.13.1.el6.x86_64 ([email protected]) \
    (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Apr 17 23:56:34 BST 2012
    

Lihat juga Bagaimana Mengetahui Distribusi Linux Yang Anda Gunakan?

riwayat hidup
sumber
Ini menunjukkan di mana kernel dikompilasi bukan pada distribusi yang Anda jalankan. Dalam banyak kasus kernel sedang dikompilasi pada distribusi yang sama tetapi pada versi yang lebih lama.
pabouk
13

Pada sebagian besar distro Linux modern, perintah berikut akan memberi Anda informasi:

lsb_release -a
Alpha01
sumber
1
Tidak, ini tidak benar. Ini hanya berfungsi untuk Debian dan turunannya
MariusMatutiae
1
Perintah ini tidak diinstal secara default pada Red Hat dan turunannya (yaitu CentOS). Anda harus menginstalnya secara eksplisit sebelum digunakan: yum install redhat-lsb-core.
pabouk
@MariusMatutiae sebenarnya jauh lebih luas dari itu tetapi tidak selalu diinstal secara default.
terdon
@terdon terima kasih, saya tidak tahu itu.
MariusMatutiae
@MariusMatutiae lihat di sini untuk info lebih lanjut, sepertinya tidak ada SuSe tetapi harus diinstal pada RH.
terdon
9

/etc/issue mungkin merupakan titik awal yang baik.

Lebih banyak dapat ditemukan dengan memeriksa file info untuk distribusi yang berbeda:

Novell SuSE    /etc/SuSE-release
OpenSuSE       /etc/SuSE-release, /etc/os-release
Red Hat,CentOS /etc/redhat-release, /etc/redhat_version
Fedora         /etc/fedora-release, /etc/redhat-release, /etc/os-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
Amazon Linux   /etc/system-release
PLD Linux      /etc/pld-release, /etc/os-release
ArchLinux      /etc/arch-release, /etc/os-release

Lihat forum Unix untuk lebih jelasnya.

e_z
sumber
1
sayangnya saya tidak memiliki file yang berakhir releaseatau versiondalam etcdirektori saya
Billy Moon
4

Jika /etc/issuetidak ada, mungkin ada satu atau lebih /etc/*_releasefile.

Sebagai contoh, sistem Ubuntu saya memiliki /etc/lsb-release:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"

Sistem CentOS seorang teman (berdasarkan Red Hat) memiliki /etc/redhat-release:

CentOS release 5.6 (Final)

Saya tidak tahu seberapa universal ini.

Keith Thompson
sumber
tidak ada releaseatau versionfile di saya/etc/
Billy Moon
@BillyMoon Saya percaya hanya baru-baru ini distribusi Linux mulai menambahkan utilitas lsb_release pada distribusinya. lsb_release -a
Alpha01
Terima kasih atas tipnya - sayangnya tidak membantu saya kali ini
Billy Moon
2

cat / etc / issue dapat menjawab pertanyaan Anda.

Pembuat distro tidak ramah kepada Anda di sini. Pertama, masing-masing berpikir itu adalah satu-satunya cara yang benar.

Kemungkinan besar, alih-alih mencoba mengendus distro, Anda harus melihat lebih detail pada pertanyaan tertentu yang sebenarnya perlu Anda jawab. Fokus pada fungsi yang Anda lihat, bukan distro yang menyediakannya. Lagi pula, versi baru dari sebuah distro dapat berbalik dan bergerak ke arah yang berlawanan pada sumbu tertentu.

bmargulies
sumber
3
tidak ada /etc/issuedi server saya
Billy Moon
Iya. Catatan yang /etc/issuemungkin mengandung urutan melarikan diri seperti \ndan \l. Untuk melihat apa artinya ini, man 5 issuedan man getty( /etc/issuefile ini terutama ditujukan untuk digunakan oleh getty). Tentu saja pemilik sistem dapat mengedit /etc/issuekarena beberapa alasan jahat.
Keith Thompson
Saya pikir tidak /etc/issueperlu ada, atau mengandung informasi apa pun tentang vendor distribusi. Biasanya memang begitu, tapi saya rasa Anda tidak bisa mengandalkannya.
Daniel Pryden
@DanielPryden baik seseorang belajar sesuatu setiap hari. Saya sendiri tidak pernah mengalami ketiadaan sebelumnya.
bmargulies
1

Gunakan facter(ya begitulah cara mengejanya).

Facter adalah pendamping wayang, ia menyediakan variabel yang dapat ditanyakan yang berisi informasi tentang sistem.

Sebagai contoh, berikut ini hanya beberapa dari puluhan variabel yang dapat dikembalikan faktor

$ facter
...
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.4
osfamily => RedHat
...

Anda bisa menanyakan fakta osfamily untuk melihat server menjalankan RedHat

$ facter osfamily
RedHat

Lihat dokumentasinya: http://puppetlabs.com/facter

spuder
sumber
0

uname -a

Bekerja selalu untuk Tux apa pun

Malas Badger
sumber
1
Itu melaporkan string versi kernel , yang bisa sangat salah jika host Anda menjalankan kernel dari distribusi yang berbeda - baik pada bare metal atau karena alat seperti OpenVZ atau VServers.
sarnold
Ya, tapi saya kira dalam hal ini penulis Q akan tahu sesuatu. tentang situasi. Kernel "Asing" agak aneh
Lazy Badger
0

Tidak ada satu pun cara pasti untuk melakukan ini. Saya mengajukan pertanyaan serupa di unix.se dan cara terbaik untuk mendapatkan info ini adalah skrip yang memeriksa berbagai sumber:

#!/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}

Pilihan lain memang menggunakan gcc --version, karena gccselalu dikompilasi untuk distro tertentu, ini akan relatif portabel. Saya sangat menyarankan Anda membaca jawaban yang diterima pada pertanyaan saya di U&L itu menjelaskan situasinya dengan sangat baik.

terdon
sumber
0

Perintah ini berfungsi untuk distribusi berbasis Debian dan Redhat: Menggunakan filter tr, Anda mengonversi dokumen ke format satu kata per baris dan kemudian menghitung baris pertama yang berisi nama distribusi.

tr -s ' \011' '\012' < /etc/issue | head -n 1
Yahya Yahyaoui
sumber
-1

Thos adalah metode terbaik

cat /etc/*release
Unnikrishnan
sumber
Saya mendaftarkan /etcdirektori saya di pertanyaan. Sebagaimana dibahas pada jawaban lain, solusi ini tidak berhasil untuk saya.
Billy Moon
Anda mencoba rilis ls / etc *; . Ini salah. Coba ls / etc / * release. Ini akan bekerja. Saya cukup yakin
Unnikrishnan
Saya juga melakukan ls di /etc/direktori dan Anda dapat melihat bahwa tidak ada file di sana berakhir direlease
Billy Moon