2010-12-02 1 views
5

우리는 기본 시스템에서 정보를 수집해야하는 자바에 작은 라이브러리를 작성하고 있습니다. 우리는 자바의 시스템 속성에서 대부분의 것을 읽을 수 있지만, 리눅스에서 실행할 때 배포판의 이름을 추출하는 올바른 방법을 찾지 못하는 것 같습니다. 전화 :리눅스에서 리눅스 배포판의 이름을 찾으십시오

System.getProperty("os.name"); 

"Linux"(우리는 또한 수집합니다)하지만 우리는 얻을 수있는 방법을 찾고 있습니다. "우분투"도. 우리는 java에서이 해결책이 필요하고/etc/release 파싱을 할 필요가 없다.

+0

해당 정보를 제공 할 수있는 API가 있습니까? – Ringding

+1

글쎄,별로. 내 인터넷 검색에서/etc/* 일부 고양이 정보를 얻는 것처럼 보이지만 실제로는 안정적이지는 않습니다. 나는 여러분 중 일부가 이전에 이것에 부딪혀 해결했다고 기대했습니다. –

+1

이것은 배포판에 따라 다릅니다. 나는/etc/* 릴리즈를 전혀 가지고 있지 않다. (데비안에서는 lsb가 설치된 상태에서도). 내가 lsb_release src (그냥 파이썬 스크립트 일 뿐이다)를 보았고 대부분의 배포 정보를 apt에서 파싱했다. 더 쉬운 방법은 (데비안 특유의) debian_version 대신에/etc/debian_version을 사용하는 것입니다 (uname -a도 신뢰할 수 없습니다). –

답변

7

이렇게하기 위해서는 정확하고 정확하게 할 수 없다. 가장 좋은 방법은 'uname -a'와 그것을 사용하십시오.

참고 : 이는 Java 제한 사항이 아니며 단순히 배포를 식별하는 일반적인 (정확한) 수단이 없습니다.

+0

/etc에서 스누핑하고 예를 들어 물건을 추론 할 수 있습니다. Fedora가 어떤 파일을 설치하는지 알면 Ubuntu가 설치되지만 프로그램에 규칙이 있어야 깨질 수 있습니다. 실제 기능을 테스트하는 것이 좋습니다. –

+0

@ Thorbjørn Ravn Andersen : 당연히. (대답을 자유롭게 편집하십시오.) – Arafangion

9

lsb_release -i을 호출 해 볼 수도 있지만 작동하지 않을 수도 있습니다. 아주 쉽게해야

 
cat /etc/issue 

자바에서이 파일을 읽기 :

+0

+1 내 데비안 시스템에서 이것은 "배포자 ID : Debian"을 반환합니다. 그래서 이것은 정말로 유망한 것으로 보입니다! – Arafangion

+0

@Arafangion : lsb * 패키지가 설치되어있는 경우에만 : 그렇지 않으면 작동하지 않습니다. –

+0

사실'lsb_release -d'는 나에게 정말 좋은 정보를주었습니다. 아마도 이것을 먼저 시도해야합니다. – John

3

나는 일반적으로 다음 명령을 사용합니다. 문제는이 파일이 모든 Linux 배포판에 있는지 여부입니다. 나는 그것을 필요로하는 모든 곳에서 발견했다. 그러나 아주 자주 필요하지는 않았다.