데비안 코드 이름을 인쇄하여 sources.list 파일에 반영 할 수있는 스크립트를 만들려고합니다.
이 스크립트를 모든 버전의 데비안에서 작동하게 만들려고했기 때문에 릴리스 코드 이름의 bash 변수를 설정하고 싶었습니다. 이 작업은 간단하지만 (lsb_release -c 사용) 배포 이미지에 기본적으로 lsb_release가 포함되어 있지 않으며,이 스크립트가 source.list를 수정하는 데 필요하므로 apt-get으로 lsb-release를 설치하는 것은 옵션이 아닙니다. .
시스템에 대한 릴리스 번호 및 기타 정보를 얻는 방법은 많이 있지만 코드 명을 얻을 수있는 신뢰할만한 곳을 찾을 수 없습니다.
어떤 아이디어라도 대단히 감사하겠습니다!
(OS로 데비안 스퀴즈로 테스트하고 있습니다)
답변
당신은 사용할 수 있습니다 /etc/os-release
:
(
. /etc/os-release
printf '%s\n' "$VERSION"
)
7 (wheezy)
답변
스퀴즈는와 함께 제공되지 않습니다 /etc/os-release
. 이것은 내 ‘핵’입니다.
dpkg --status tzdata|grep Provides|cut -f2 -d'-'
답변
데비안의 버전 번호와 함께 코드를 인쇄 할 수 있습니다 :
root@debian:/home/mohsen# grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g
8 (jessie)
또는 코드 이름을 숫자와 프랜차이즈에서 노출시킬 수 있습니다
grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g |sed s/[0-9]//g | sed s/\)$//g |sed s/\(//g
jessie
답변
에서 데비안 배포판의 코드 명을 얻을 수 있습니다 /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
파일 에서 설정 한 코드 이름을 에코 합니다.
답변
systemd의 경우 :
hostnamectl | grep "Operating System"
산출:
Operating System: Debian GNU/Linux 8 (jessie)
답변
또 다른 휴리스틱은 현재 실행중인 OS의 패키지가 어디에서 제공되는지 확인하는 것입니다.
단순하고 오류가 발생하기 쉬운 변형 :
fgrep -r /debian/ /etc/apt/sources.list \
| egrep -v '^ *#' \
| awk '{print $3}' \
| egrep -v '[-/]' \
| uniq
보다 안정적인 방법은 apt-cache policy
다음 매개 변수없이 출력에서 세부 사항을 구문 분석하는 것입니다 .
apt-cache policy \
| fgrep o=Debian, \
| fgrep ,l=Debian, \
| fgrep ,c=main, \
| awk -F '[,=]' '{print $6}'
apt-cache policy
로컬 시스템에서 사용중인 모든 APT 저장소를 나열합니다. 우리는 데비안에서 유래 한 것들을 필터링하고 Debian
(예를 들어 레이블이 아닌 것들 Debian debug
) 필터링 한 다음 주 아카이브 만 contrib
보거나 ( 또는 non-free
아님) 해당 값을 선택합니다.
보다 안정적인 접근 방식은 요소 순서에 의존하지 않고 n=
나머지 줄에서 값을 찾는 것입니다 .
apt-cache policy \
| fgrep o=Debian, \
| fgrep ,l=Debian, \
| fgrep ,c=main, \
| egrep -o 'n=[^, ]*' \
| awk -F= '{print $2}'
또 다른 가능성은 /var/lib/apt/lists/*Release
파일을 직접 파싱 apt-cache
하지 않고 직접 파싱하는 것입니다.
egrep -l '^Origin: Debian$' /var/lib/apt/lists/*Release \
| xargs egrep -l '^Label: Debian$' \
| xargs egrep -L 'Codename: .*-' \
| xargs fgrep Codename \
| awk '{print $2}'
답변
sources.list에 URL을 추가해야했습니다. 그리고 버전 코드 이름을 동적으로 넣을 수 있도록이 코드 조각을 사용합니다 (코드 이름이 괄호 사이에 있다는 사실에 의지합니다) : @PersianGulf answer .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g