내 것 uname -r
(그리고 나의 실제 문제인 Java 시스템 속성 os.version)은 대시가 포함된 버전 번호를 반환합니다. 그것은 다음과 같습니다: 5.9.12-gentoo-blah-blah.
이로 인해 버전 번호에 대시를 사용하지 않는 현재 작업 중인 애플리케이션이 중단됩니다(숫자만 필요하고 대시는 허용되지 않음).
운영 체제의 버전 번호를 어떻게 변경합니까? 커널 버전을 반환하고 다른 모든 것은 그대로 두고 싶습니다.
답변1
운영 체제 버전은 시스템 호출을 통해 커널에서 반환됩니다 uname
( man 2 uname
이에 대한 정보는 제한되어 있습니다). 이 정보는 아래에서도 확인할 수 있습니다 /proc/sys/kernel/osrelease
. 이 파일은 읽기 전용이며 커널이 빌드된 후에는 커널의 운영 체제 버전을 변경할 수 없습니다.
Makefile
운영 체제 버전은 커널에서 설정됩니다. 처음 4줄은 다음과 같습니다.
VERSION =
PATCHLEVEL =
SUBLEVEL =
EXTRAVERSION =
버전 제어 저장소에서 빌드하는 경우 빌드 프로세스 중에 추가 정보가 추가될 수도 있습니다.
젠투 커널은 대시를 포함하는 EXTRAVERSION을 추가합니다. 커널을 빌드하기 전에 수정하여 Makefile
원하는 버전으로 설정하세요.
답변2
한 가지 가능한 해결책은 LD_PRELOAD를 사용하여 uname 시스템 호출을 가로채는 것입니다. 내가 하나 찾았어요점이 작업을 수행.
답변3
도움이 되었기를 바랍니다.
bash 파일(예: my_uname.sh)을 만듭니다.
#!/usr/bin/env bash
REPLACE_ON="~"
flag=$1
os_uname=$(/usr/bin/uname $flag)
pat="(a|r)"
if [[ "$flag" =~ $pat ]]; then
echo $os_uname | sed "s/-/$REPLACE_ON/g"
else
/usr/bin/uname $flag
fi
새 스크립트 위치에 대한 PATH 변수를 확인하세요.
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin
실행 플래그를 설정하고 셸 스크립트를 검색 경로에 복사합니다.
chmod +x my_uname.sh
cp my_uname.sh /usr/local/bin/
그런 다음 별칭을 만듭니다.
alias uname=my_uname.sh
별칭을 .bashrc 또는 .bash_profile에 넣을 수도 있습니다.
답변4
uname -r
대시 없이 출력이 필요하고 이를 다른 프로세스에 입력으로 제공하는 경우 다음을 사용합니다 sed
.
uname -r | sed 's/-//g'
편집: 이 답변이 유용하지 않다고 생각하시면 답변에서 배울 수 있도록 이유를 설명해 주세요. 우리 모두는 단지 때리기 위해서가 아니라 배우기 위해 여기에 있습니다(말장난을 용서하신다면).