如何更改操作系统版本输出?

如何更改操作系统版本输出?

我的uname -r(也是我真正的问题,Java 系统属性 os.version)返回一个包含破折号的版本号。它看起来像:5.9.12-gentoo-blah-blah。

这会破坏我正在使用的应用程序,该应用程序不喜欢版本号中的破折号(它只需要一个数字,不允许使用破折号)。

如何更改操作系统的版本号?我只想返回内核版本,其他的不用管。

答案1

操作系统版本由系统调用从内核返回unameman 2 uname有关它的信息有限)。该信息也可以在下面找到/proc/sys/kernel/osrelease。该文件是只读的,并且在构建内核后无法更改内核的操作系统版本。

Makefile操作系统版本在内核中设置。前 4 行是:

VERSION =
PATCHLEVEL =
SUBLEVEL =
EXTRAVERSION =

如果您从版本控制存储库进行构建,则也可能在构建过程中添加额外的信息。

Gentoo 的内核添加了一个 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

设置执行标志,并将shell脚本复制到搜索路径

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'

编辑:如果您认为这个答案没有用,请解释原因,以便我可以从您的答案中学习。我们都是来这里学习的,而不仅仅是为了抨击(如果你原谅这个双关语的话)。

相关内容