【问题复现步骤】
用dnf命令升级内核之后,uname -r命令仍然显示旧版本内核。
【已分析信息
查看uname命令,发现封装了脚本,脚本中uname -r,从rpm -q --qf的第一行取版本号。
系统中同时存在多版本内核时,uname -r显示结果不可靠。
[root@localhost ~]# cat /usr/bin/uname.sh
#!/bin/bash
OUTPUT=`uname.bin $*`
NOT_INSTALLED="is not installed"
if [[ $* == "-r" ]];then
dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel | head -n 1`
if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
[ -n "$dir" ] && echo $dir && exit 0
fi
dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel-devel | head -n 1`
if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
[ -n "$dir" ] && echo $dir && exit 0
fi
dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel-headers | head -n 1`
if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
[ -n "$dir" ] && echo $dir && exit 0
fi
echo "error: you must installed kernel or kernel-headers" && exit 1
else
echo $OUTPUT
fi
[root@localhost ~]# rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel
5.10.0-60.18.0.50.oe2203.aarch64
5.10.0-60.139.0.166.oe2203.aarch64`
不了解当时封装脚本的背景,但是这样可能会导致uname -r显示版本号错误。
一些调用这个名录的脚本会出错。
比如编译驱动的spec文件,经常会用到这个命令。会导致安装路径错误。