Estou trabalhando em um script bash simples que deve ser capaz de executar nas distribuições Ubuntu e CentOS (suporte para Debian e Fedora / RHEL seria uma vantagem) e preciso saber o nome e a versão da distribuição que o script está executando ( para acionar ações específicas, por exemplo, a criação de repositórios). Até agora, o que eu tenho é o seguinte:
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
Isso parece funcionar, retornando ubuntu
ou centos
(eu não tentei outros) como o nome do release. No entanto, sinto que deve haver uma maneira mais fácil e confiável de descobrir isso - isso é verdade?
Não funciona para o RedHat. / etc / redhat-release contém: Redhat Linux Entreprise release 5.5
Portanto, a versão não é a terceira palavra, é melhor usar:
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
+-release
funciona? Efetivamente, você parece assumir que será/etc/lsb-release
, então talvez chame assim.*
com+
para evitar a formatação de comentários, deve seretc/*-release
, parece funcionar.uname -rv | grep -i "name_of_distro"
e usa o código de saída?Respostas:
Para obter
OS
eVER
, o último padrão parece ser/etc/os-release
. Antes disso, havialsb_release
e/etc/lsb-release
. Antes disso, era necessário procurar arquivos diferentes para cada distribuição.Aqui está o que eu sugeriria
Eu acho
uname
que conseguirARCH
ainda é o melhor caminho. Mas o exemplo que você deu obviamente lida apenas com os sistemas Intel. Eu chamariaBITS
assim:Ou mude
ARCH
para ser a versão mais comum, porém não ambígua:x86
ex64
ou similar:mas é claro que depende de você.
fonte
-
e_
? Talvez esteja em/lib/lsb
algum lugar assim. O querpm -qa "lsb*"
imprime?rpm -qa "lsb*
imprime nada. De acordo comyum provides */lsb_release
ele, está contido em um pacote chamado redhat-lsb, que eu acho que não está instalado por padrão. No entanto, eu não sou especialista no Fedora, estes são apenas os resultados de uma VM aleatória do Fedora que eu tenho e podem estar muito errados.lsb-release
, como você disse.$OS
,$VERSION
etc - por convenção, capitalizamos variáveis de ambiente (PAGER, EDITOR, SHELL, ...) e variáveis internas do shell (BASH_VERSION, RANDOM, ...). Todos os outros nomes de variáveis devem conter pelo menos uma letra minúscula. Esta convenção evita a substituição acidental de variáveis ambientais e internas.Eu iria com isso como um primeiro passo:
Gentoo, RedHat, Arch & SuSE têm um arquivo chamado por exemplo
/etc/gentoo-release
. Parece ser popular, consulte este site sobre arquivos de lançamento .O Debian e o Ubuntu devem ter um
/etc/lsb-release
que também contenha informações sobre a versão e aparecerá com o comando anterior.Outra rápida é
uname -rv
. Se o kernel instalado é o kernel de distribuição padrão,geralmentevocê encontrará o nome lá.fonte
uname -a
.uname -rv
contém as informações?uname -a
imprimirá coisas como tipo de processador e nome do host que são irrelevantes aqui. (Mas tanto a liberação do kernel (-r
) quanto a versão (-v
) são necessárias, nem todas as distros fazem o mesmo por lá) #2.6.32-5-686-bigmem
e uname -v dá#1 SMP Tue Mar 8 22:14:55 UTC 2011
no Debian 6. uname -a OTOH dáLinux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
.uname -a
é-n
, ie nodename == hostname. então eu diriauname
que não será interessante no Debian. Venha para pensar sobre isso, não tenho certeza se é tão útil no RedHat também.debian
,.lsb_release -a
. Funciona no Debian e acho que o Ubuntu, mas não tenho certeza sobre o resto. Normalmente, ele deve existir em todas as distribuições GNU / Linux, pois está relacionado ao LSB (Linux Standard Base).fonte
Uma linha, fallbacks, uma linha de saída, sem erros.
fonte
ou apenas
fonte
Dê uma dica dos desenvolvedores de javascript. Não teste para a versão, teste para a capacidade. Não é bonito, mas funciona. Expanda conforme necessário.
fonte
Na ordem do sucesso mais provável, estes:
cobrir a maioria dos casos (AFAIK): Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD e talvez outros.
fonte
cat /etc/*version
não funciona (não existe esse arquivo) no CentOS (pelo menos no 6.4)Para a maioria dos sistemas Linux modernos, o arquivo
/etc/os-release
está realmente se tornando padrão e está sendo incluído na maioria dos sistemas operacionais. Portanto, dentro do seu script Bash, você pode incluir apenas o arquivo e terá acesso a todas as variáveis descritas aqui (por exemplo: NAME, VERSION, ...)Então, eu estou apenas usando isso no meu script Bash:
fonte
Se o arquivo
/etc/debian_version
existir, a distribuição é Debian ou um derivado do Debian. Este arquivo pode ter um número de versão; na minha máquina está atualmente6.0.1
. Se estiver testando ou instável, pode dizer que está testando / instável ou pode ter o número da próxima versão. Minha impressão é que no Ubuntu, pelo menos, esse arquivo está sempre testando / instável e que eles não colocam o número do release, mas alguém pode me corrigir se eu estiver errado.O Fedora (lançamentos recentes, pelo menos), tem um arquivo semelhante, a saber
/etc/fedora-release
.fonte
/etc/debian_version
e/etc/os-release
./etc/debian_version
arquivo. Portanto, a maneira como preparamos uma instalação Debian pode afetar os arquivos de lançamento disponíveis, isso é interessante.os-release
não inclui o número da versão completa dedebian_version
. Consulte unix.stackexchange.com/questions/382531 .Se você não pode ou não deseja usar o arquivo de versão LSB (devido às dependências que o pacote traz), pode procurar os arquivos de versão específicos da distribuição. O Bcfg2 possui um probe para a distribuição que você pode usar: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt
fonte
2 maneiras de muitos:
1) use
Eu testei no CentOS 5.5 e Ubuntu 10.04
a saída para o CentOS é:
e para o Ubuntu é:
2) digite o seguinte comando:
Eu testei no CentOS 5.5 e no Ubuntu 10.04, e funciona bem.
fonte
Este script funciona no Debian, (pode precisar de alguns ajustes no Ubuntu)
fonte
Aqui está minha versão simples do chech_distro. ^^;
fonte
Sem versão, apenas apenas dist:
fonte
Isso foi testado no Ubuntu 14 e CentOS 7
fonte
sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
Eu acho um bom script daqui que funciona para a maioria dos discos Linux comuns:
fonte
Eu uso o utilitário de script screenfetch :
fonte
Existe uma faceta ruby gem, que fornece alguns fatos sobre o SO, ele analisa os arquivos de liberação do SO, outros dados e imprime na tela do terminal. Você pode tentar da seguinte forma, começando com a instalação do rubygems:
Use o caso acima que é elegível para o seu sistema operacional. Em seguida, instale a própria jóia.
Então use:
NOTA: Consulte as fontes das pedras preciosas para obter mais informações sobre a instalação.
fonte
Se alguém precisar da distribuição também:
Resultado:
Mude para: lsb_release -sc para obter a distribuição:
Resultado:
fonte
Este comando funciona para distribuições baseadas no Debian e no Redhat: Usando o
tr
filtro, você converte o documento para o formato de uma palavra por linha e depois conta a primeira linha que contém o nome da distribuição.fonte
/etc/issue
não continha uma versão ou um nome no zenwalk. Este é um arquivo modificável pelo administrador que contém uma mensagem apresentada a humanos que não tem garantias de conter qualquer coisa que possa ser extraída programaticamente.