Estoy trabajando en un script bash simple que debería poder ejecutarse en distribuciones Ubuntu y CentOS (el soporte para Debian y Fedora / RHEL sería una ventaja) y necesito saber el nombre y la versión de la distribución que ejecuta el script ( para activar acciones específicas, por ejemplo, la creación de repositorios). Hasta ahora lo que tengo es esto:
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
Esto parece funcionar, volviendo ubuntu
o centos
(no he probado otros) como el nombre de la versión. Sin embargo, tengo la sensación de que debe haber una manera más fácil y más confiable de descubrirlo, ¿es eso cierto?
No funciona para RedHat. / etc / redhat-release contiene: Redhat Linux Entreprise versión 5.5
Entonces, la versión no es la tercera palabra, será mejor que uses:
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? Efectivamente, estás buscando que así sea/etc/lsb-release
, así que quizás solo llámalo así.*
con+
de evitar el comentario de formateo, que debería seretc/*-release
, parece que funciona.uname -rv | grep -i "name_of_distro"
y usa el código de salida?Respuestas:
Para obtener
OS
yVER
, el último estándar parece ser/etc/os-release
. Antes de eso, habíalsb_release
y/etc/lsb-release
. Antes de eso, tenía que buscar diferentes archivos para cada distribución.Esto es lo que sugeriría
Creo
uname
que seguirARCH
siendo la mejor manera. Pero el ejemplo que diste obviamente solo maneja los sistemas Intel. Yo lo llamaríaBITS
así:O cambiar
ARCH
a ser las versiones más comunes, sin embargo, no ambiguos:x86
yx64
o similar:pero por supuesto eso depende de ti.
fuente
-
y_
? Tal vez está en/lib/lsb
o en algún lugar así. ¿Quérpm -qa "lsb*"
imprime?rpm -qa "lsb*
No imprime nada. Segúnyum provides */lsb_release
está contenido en un paquete llamado redhat-lsb que supongo que no está instalado por defecto. Sin embargo, no soy un experto en Fedora, estos son solo los resultados de una máquina virtual Fedora aleatoria que tengo y podrían estar muy equivocados.lsb-release
, como dijiste.$OS
,$VERSION
etc., por convención, capitalizamos las variables de entorno (PAGER, EDITOR, SHELL, ...) y las variables internas de shell (BASH_VERSION, RANDOM, ...). Todos los demás nombres de variables deben contener al menos una letra minúscula. Esta convención evita anular accidentalmente variables ambientales e internas.Iría con esto como primer paso:
Gentoo, RedHat, Arch y SuSE tienen un archivo llamado eg
/etc/gentoo-release
. Parece ser popular, consulte este sitio sobre archivos de lanzamiento .Debian y Ubuntu también deberían tener una información
/etc/lsb-release
que contenga la versión, y se mostrará con el comando anterior.Otro rápido es
uname -rv
. Si el kernel instalado es el kernel de distribución de stock,generalmente aveces encontrará el nombre allí.fuente
uname -a
.uname -rv
contiene la información?uname -a
imprimirá cosas como tipo de procesador y nombre de host que son irrelevantes aquí. (Pero tanto la versión del kernel (-r
) como la versión (-v
) son necesarias, no todas las distribuciones lo hacen allí)2.6.32-5-686-bigmem
y uname -v da#1 SMP Tue Mar 8 22:14:55 UTC 2011
en Debian 6. uname -a OTOH daLinux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
.uname -a
es-n
, es decir, nodename == hostname. Entonces diríauname
que no será interesante en Debian. Ahora que lo pienso, tampoco estoy seguro de que sea tan útil en RedHat.debian
.lsb_release -a
. Funciona en Debian y supongo que Ubuntu, pero no estoy seguro del resto. Normalmente debería existir en todas las distribuciones de GNU / Linux ya que está relacionado con LSB (Linux Standard Base).fuente
One-liner, fallbacks, una línea de salida, sin errores.
fuente
o solo
fuente
Tome un consejo de los desarrolladores de JavaScript. No pruebe la versión, pruebe la capacidad. No es bonito, pero funciona. Ampliar según sea necesario.
fuente
En orden de éxito más probable, estos:
cubre la mayoría de los casos (AFAIK): Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD y quizás otros.
fuente
cat /etc/*version
no funciona (no existe tal archivo) en CentOS (al menos en 6.4)Para la mayoría de los sistemas operativos modernos de Linux, el archivo
/etc/os-release
realmente se está volviendo estándar y se está incluyendo en la mayoría de los sistemas operativos. Entonces, dentro de su script Bash, puede incluir el archivo y tendrá acceso a todas las variables descritas aquí (por ejemplo: NOMBRE, VERSIÓN, ...)Así que solo estoy usando esto en mi script Bash:
fuente
Si el archivo
/etc/debian_version
existe, la distribución es Debian o un derivado de Debian. Este archivo puede tener un número de versión; en mi máquina es actualmente6.0.1
. Si está probando o es inestable, puede decir que está probando / inestable, o puede tener el número del próximo lanzamiento. Mi impresión es que al menos en Ubuntu, este archivo siempre está probando / inestable, y que no ponen el número de versión, pero alguien puede corregirme si estoy equivocado.Fedora (versiones recientes al menos), tienen un archivo similar, a saber
/etc/fedora-release
.fuente
/etc/debian_version
y/etc/os-release
./etc/debian_version
archivo. Entonces, la forma en que preparamos una instalación de Debian podría afectar los archivos de lanzamiento disponibles, eso es interesante.os-release
no incluye el número de versión completo dedebian_version
. Ver unix.stackexchange.com/questions/382531 .Si no puede o no quiere usar el archivo de lanzamiento LSB (debido a las dependencias que trae el paquete), puede buscar los archivos de lanzamiento específicos de la distribución. Bcfg2 tiene una sonda para la distribución que puede usar: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt
fuente
2 maneras de muchos:
1) uso
Lo probé en CentOS 5.5 y Ubuntu 10.04
La salida para CentOS es:
y para Ubuntu es:
2) ingrese el siguiente comando:
Lo probé en CentOS 5.5 y Ubuntu 10.04, y funciona bien.
fuente
Este script funciona en Debian, (puede necesitar algunos ajustes en Ubuntu)
fuente
Aquí está mi versión simple de chech_distro. ^^;
fuente
Sin versión, solo dist:
fuente
Esto fue probado en Ubuntu 14 y CentOS 7
fuente
sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
Aquí encuentro un buen script que funciona para la mayoría de los discos de Linux comunes:
fuente
Yo uso la utilidad de script screenfetch :
fuente
Existe una joya facter ruby, que le brinda algunos datos sobre el sistema operativo del sistema operativo, analiza los archivos de lanzamiento del sistema operativo, otros datos e imprime en la pantalla del terminal. Puede intentarlo de la siguiente manera, comenzando con la instalación de rubygems:
Utilice el caso anterior que sea elegible para su sistema operativo. Luego instala la gema misma.
Luego use:
NOTA: Consulte las fuentes de gemas facter para obtener más información sobre la instalación.
fuente
Si alguien necesita la distribución también:
Salida:
Cambie a: lsb_release -sc para obtener la distribución:
Salida:
fuente
Este comando funciona para distribuciones basadas en Debian y Redhat: con el
tr
filtro, convierte el documento al formato de una palabra por línea y luego cuenta la primera línea que contiene el nombre de la distribución.fuente
/etc/issue
no contenía una versión o un nombre en zenwalk. Este es un archivo modificable por el administrador que contiene un mensaje presentado a los humanos que no tiene garantías de contener nada que pueda extraerse mediante programación.