Por lo que las distribuciones de Linux pueden confiar en que la presencia de / etc / os de liberación?

17

Estoy tratando de encontrar una manera de determinar el nombre y la versión de la distribución de Linux que funciona en la mayoría (o, idealmente, todas las distribuciones modernas). Noté que /etc/os-releasecontiene la información que necesita sobre las distribuciones que probé (CentOS, Debian), pero ¿Es seguro que depender de la presencia de la misma? Comandos como uname -arealmente no contienen la misma información, y lsb_releaseno es aparentemente presentes en CentOS por ejemplo mínimos.

¿Hay una forma rápida de averiguar exactamente lo que las distribuciones vienen con /etc/os-release? Por otra parte, se /etc/os-releasegarantiza que contiene NAME, VERSIONy los PRETTY_NAMEcampos?

w128
fuente
1
Ubuntu, Debian, Arch seguro. De todos modos, omitiría detectar la distribución de esa manera. La última vez que necesitaba distinguir las distribuciones estaba comprobando la presencia de administradores de paquetes particulares (es decir, pacman -> Arch, apt-get & no pacman -> Ubuntu o Debian). Es tarea un poco difícil y también me gustaría saber si hay una solución mejor.
ddnomad
1
Uno se pregunta por qué necesita saber el nombre de la distribución. Esto suena como un caso de detección de navegador cuando debería estar haciendo la detección de características .
xDaizu
@xDaizu Estoy ejecutar secuencias de comandos en hosts remotos para sacar varias informaciones acerca de ellos.
w128
@ w128 en ese caso, ¿no puede verificar si la "característica" (/ etc / os-release) existe (y recurrir a otros métodos si no es así) en lugar de confiar en una lista mutable estática de distribuciones donde funciona?
xDaizu
1
@xDaizu recurrir a "otros métodos" puede implicar un trabajo adicional que puede resultar innecesario si puedo garantizar que la solución simple propuesta en la pregunta sea confiable en las varias distribuciones principales que necesito admitir, por lo que una lista mutable de distribuciones compatibles está bien en este caso.
W128

Respuestas:

14

Cualquier sistema que ejecute systemd debería tener /etc/os-release, que se especifica como parte de systemd. Algunos sistemas sin systemd podrían también lo tienen ( por ejemplo Debian 8, donde systemd es opcional, pero /etc/os-releasese instala en todos los casos).

Según la especificación, todos los campos son opcionales y algunos tienen valores predeterminados ("Linux" para NAMEy PRETTY_NAME).

Encontrarás más antecedentes en el /etc/os-releaseanuncio .

Stephen Kitt
fuente