2010-12-02 8 views
5

Nous sommes en train d'écrire une petite bibliothèque en java qui a besoin de collecter des informations du système sous-jacent. Nous sommes capables de lire la plupart des choses des propriétés du système dans Java, mais nous ne pouvons pas trouver la bonne façon d'extraire le nom de la distribution quand elle est exécutée sur Linux. L'appelTrouver le nom de la distribution linux depuis java

System.getProperty("os.name"); 

retourner "Linux" (que nous recueillons également) mais nous cherchons un moyen d'obtenir par exemple. "Ubuntu" aussi. Nous avons besoin de cette solution dans java et nous aimerions ne pas avoir à faire une analyse/etc/release

+0

Connaissez-vous une API (non-Java, je veux dire) qui peut fournir cette information? – Ringding

+1

Eh bien, pas vraiment. De mon googling il semble que faire un peu de chat/etc/* vous donnera quelques infos mais pas vraiment fiable. J'espérais vraiment que certains d'entre vous se seraient heurtés à cela avant de le résoudre ... –

+1

Ceci est spécifique à la distribution; Je n'ai pas de version/etc/* (sur Debian, même avec lsb * installé). J'ai regardé lsb_release src (c'est juste un script python) et il analyse la plupart des informations de distribution d'apt. Un moyen plus simple (spécifique à debian) que de chercher à/etc/debian_version à la place (uname -a n'est pas fiable non plus) –

Répondre

7

Pour cela, il est impossible de faire des calculs fiables et précis, le mieux que je puisse suggérer est de prendre la sortie de 'uname -a' et Utiliser ça.

Note: Ceci n'est pas une limitation de Java - il n'y a simplement aucun moyen commun (et précis) d'identifier une distribution.

+0

Vous pouvez explorer/etc et déduire des choses basées par ex. Vous savez quels fichiers Fedora installe, et Ubuntu les installe, mais vous avez alors besoin de règles dans vos programmes et elles peuvent se casser. Mieux vaut tester la fonctionnalité réelle. –

+0

@ Thorbjørn Ravn Andersen: Absolument. (N'hésitez pas à modifier la réponse) – Arafangion

9

Vous pouvez essayer d'appeler lsb_release -i, mais cela ne fonctionne pas.

+0

+1 Sur mon système Debian, cela renvoie "ID distributeur: Debian", donc cela semble très prometteur! – Arafangion

+0

@Arafangion: seulement si les paquets lsb * sont installés :) ça ne marchera pas autrement –

+0

En fait 'lsb_release -d' m'a aussi donné de bonnes infos, vous devriez probablement essayer ça en premier. – John

3

Je l'habitude d'utiliser la commande suivante:

 
cat /etc/issue 

La lecture de ce fichier en Java devrait être assez facile. La question est de savoir si ce fichier est sur toutes (ou au moins la majorité) des distributions Linux. Je l'ai trouvé partout où j'en avais besoin, cependant, ce n'était pas nécessaire très souvent.

Questions connexes