GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistím, jaká verze Linuxu běží?

Řešení 1:

Neexistuje žádný způsob křížové distribuce. Nicméně:

  • Redhat a přátelé:Test na /etc/redhat-release , zkontrolujte obsah
  • Debian:Test na /etc/debian_version , zkontrolujte obsah
  • Mandriva a přátelé:Test na /etc/version , zkontrolujte obsah
  • Slackware:Test na /etc/slackware-version , zkontrolujte obsah

atd. Obecně řečeno, zkontrolujte /etc/*-release a /etc/*-version .

Edit:Našel jsem svůj starý (1+ rok) bash skript, který se povaluje, který jsem musel za ta léta seskládat (má působivý CVS log sahající 6 let zpátky.) Možná už nebude fungovat správně tak, jak je a já můžu Neobtěžujte se hledáním nainstalovaných distribucí k testování, ale mělo by vám to poskytnout dobrý výchozí bod. Funguje dobře na CentOS, Fedoře a Gentoo. gyaresu to úspěšně otestovalo na Debianu 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
}

Všimněte si, že to bude pravděpodobně fungovat správně pouze v Bash. Můžete jej přepsat pro jiné shelly.

Jak již bylo řečeno, možná budete chtít testovat funkce, nikoli distribuce. Už to nepoužívám jen proto, že se to stalo údržbou. Je snazší spolehnout se na nástroje a řešení pro křížovou distribuci.

Koncepčně to dělá v tomto pořadí:

  • Natáhněte známý typ souboru „společná funkce inicializačního skriptu“. Ty jsou specifické pro distribuci. Pokud neexistuje, přejděte na další kontrolu distribuce.
  • Zkontrolujte existenci konkrétní, známé, často používané a nepravděpodobné funkce přejmenované z tohoto základního skriptu. Děláme to pomocí type Bash vestavěný. type -t vrátí function pokud je tento symbol funkcí. Přidáme zz na výstup z type -t 2>/dev/null protože pokud název není definován, výstupní řetězec by byl prázdný a dostali bychom chybu syntaxe o chybějící levé ruce na == operátor. Pokud název, který jsme právě zkontrolovali, není funkcí, přejděte na další kontrolu distribuce, jinak jsme našli typ distribuce.
  • Nakonec opakujte typ distribuce, aby bylo možné výstup funkce snadno použít v bloku case ..esac.

Upravit v případě, že se to pokoušíte spustit jako přímý skript:Tento skript by měl být získán nebo zahrnut z jiných skriptů. Pokud jej spustíte tak, jak je, nevydává nic samo o sobě. Chcete-li to otestovat, zadejte zdroj a poté funkci vyvolejte, např.:

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

na výzvu bash.

Edit:Upozorňujeme, že tento skript nevyžaduje oprávnění root. Žádám vás, abyste to nespouštěli jako root. Nemělo by to nic poškodit, ale není to potřeba.

V logu CVS jsem našel odkaz na příslušný příspěvek v seznamu adresátů. Mělo by být užitečné při rozbalování špaget init skriptu.

Řešení 2:

Nezkoušejte a vytvářejte si domněnky založené na distribuci, co můžete a nemůžete dělat, protože to je šílenství (viz také "Detekce User Agent"). Místo toho zjistěte, zda to, co chcete udělat, je podporováno a jak se to provádí jakýmkoli příkazem nebo umístěním souboru, které chcete použít.

Pokud jste například chtěli nainstalovat balíček, můžete zjistit, zda používáte systém podobný Debianu nebo RedHat, kontrolou existence dpkg nebo rpm (nejprve zkontrolujte dpkg, protože počítače Debianu mohou mít příkaz rpm na nich...). Na základě toho se rozhodněte, co dělat, nejen podle toho, zda se jedná o systém Debian nebo RedHat. Tímto způsobem budete automaticky podporovat všechny odvozené distribuce, které jste explicitně nenaprogramovali. Jo, a pokud váš balíček vyžaduje specifické závislosti, otestujte je také a dejte uživateli vědět, co jim chybí.

Dalším příkladem je pohrávání si se síťovými rozhraními. Zjistěte, co dělat na základě toho, zda existuje soubor /etc/network/interfaces nebo adresář /etc/sysconfig/network-scripts, a jděte odtud.

Ano, je to více práce, ale pokud nechcete předělat všechny chyby, kterých se weboví vývojáři dopustili za poslední desetiletí nebo více, uděláte to chytře hned od začátku.

Řešení 3:

Verzi jádra zjistíte spuštěním uname -a , nalezení verze distribuce závisí na distribuci.

Na Ubuntu a některých dalších OS můžete spustit lsb_release -a nebo si přečtěte /etc/lsb_release

Debian ukládá verzi do /etc/debian_version

Řešení 4:

Většina distribucí má jedinečnou metodu určování konkrétní distribuce.

Například:

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

SUSE: /etc/SUSE-release

Existuje standard známý jako Linux Standard Base nebo LSB. Definuje, že by měl existovat soubor nazvaný /etc/lsb-release nebo program nazvaný lsb_release, který bude odrážet informace o vaší linuxové distribuci.

lsb_release -a

Řešení 5:

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

kód:http://hg.python.org/cpython/file/2.7/Lib/platform.py


Linux
  1. Jak zjistím, který proces má zámek na souboru v Linuxu?

  2. jak zkontrolovat verzi linux X11?

  3. Jak zjistím, jakou verzi Linuxu používám?

  1. Jak zkontrolovat verzi Redhat

  2. Jakou verzi Linuxu používám? Zde je návod, jak to zjistit

  3. Linux – Jak zjistit, jaké pevné disky jsou v systému?

  1. Jak zjistit, co dělá příkaz Linuxu

  2. Jak zkontrolovat verzi jádra v Linuxu

  3. Jak zkontrolovat verzi MySQL v Linuxu