lsb_release를 사용하지 않고 데비안 코드명을 얻는 방법

lsb_release를 사용하지 않고 데비안 코드명을 얻는 방법

나는 데비안 코드명을 인쇄하여 파일로 다시 에코할 수 있는 스크립트를 작성하려고 합니다 sources.list.

나는 이 스크립트를 모든 데비안 버전에서 작동시키려고 노력하고 있으므로 릴리스 코드에 대한 bash 변수를 설정하고 싶습니다. 이것은 하기 쉽습니다 lsb_release -c. 그러나 배포 이미지에는 기본적으로 -가 포함되어 있지 않으며 이를 수정하려면 이 스크립트가 필요하므로 설치 lsb_release옵션이 아닙니다 .sources.listlsb-releaseapt-get

버전 번호와 시스템에 대한 기타 정보를 얻을 수 있는 다양한 방법을 찾았지만 코드명을 얻을 수 있는 믿을 만한 장소를 찾을 수 없습니다.

(저는 이것을 테스트하기 위해 Debian Squeeze를 사용하고 있습니다.)

답변1

당신은 그것을 사용할 수 있습니다 /etc/os-release:

(
  . /etc/os-release
  printf '%s\n' "$VERSION"
)
7 (wheezy)

답변2

함께 제공되지 않는 데비안 배포판 /etc/os-release(예: Squeeze)의 경우 다음 "해킹"을 사용할 수 있습니다. 해당 이름이 포함된 tzdata함수 (1) 를 제공하는 패키지를 활용합니다 .

$ dpkg --status tzdata
Package: tzdata
...
Provides: tzdata-squeeze

따라서 사후 처리하여 함수 이름의 해당 부분을 추출할 수 있습니다.

dpkg --status tzdata|grep Provides|cut -f2 -d'-'

또는 더 적은 수의 파이프를 사용하십시오.

dpkg --status tzdata|awk -F'[:-]' '$1=="Provides"{print $NF}'

(1) 그러나 이것은 RedHat 용어입니다.

답변3

에서 Debian 배포판의 코드명을 얻을 수 있습니다 /etc/os-release. 현재 환경에 영향을 주지 않기 위해 이 파일을 구문 분석하는 대신 새 환경에 넣고 echo새 환경에서 명령을 실행할 수 있습니다.

env -i bash -c '. /etc/os-release; echo $VERSION_CODENAME'

그것을 파괴:

  • env: 새 환경에서 명령을 실행합니다.
  • -i: 기존 환경에서 환경 변수를 상속하지 않습니다.
  • bash: bash를 실행하면 os-release 파일을 가져오고 echo 명령을 실행할 수 있는 쉘이 생깁니다.
  • -c: bash대화형 쉘을 시작하는 대신 명령을 실행하라고 지시합니다.
  • . /etc/os-release: os-release새로운 환경에 콘텐츠를 공급합니다. os-release새 환경에서 이러한 환경 변수를 설정하는 환경 변수를 설정하는 몇 줄이 포함되어 있습니다.
  • ;: 명령을 분리하고 다음 명령을 실행합니다.
  • echo $VERSION_CODENAME: 파일 설정의 코드명을 에코합니다 os-release.

답변4

시스템의 경우:

hostnamectl | grep "Operating System"

산출:

  Operating System: Debian GNU/Linux 8 (jessie)

관련 정보