我想获取 AIX 和 Solaris 中内核的最后更新日期。
对于 Linux,命令是:
rpm -qa --last | grep kernel-`uname -r` | sed 's/^k.*\s\s//'
对于此命令我得到了输出:
Wed 29 Nov 2017 03:26:48 PM EST
我也需要 AIX 和 Solaris 的相同替代品。
我正在尝试为 AIX 执行此命令,但它不是我需要的复杂的正确输出:
lslpp -ha bos.adt.base | grep COMPLETE | sed 's/^k.*\s\s//'
Return Code: 0, 6.1.1.0 COMMIT COMPLETE 09/16/14 13:49:31
6.1.1.0 APPLY COMPLETE 09/16/14 13:49:31
6.1.8.16 COMMIT COMPLETE 09/16/14 13:59:18
6.1.8.16 APPLY COMPLETE 09/16/14 13:55:32
6.1.9.30 COMMIT COMPLETE 07/02/15 16:36:49
6.1.9.30 APPLY COMPLETE 07/02/15 16:33:22
6.1.9.45 COMMIT COMPLETE 09/04/15 15:45:19
6.1.9.45 APPLY COMPLETE 09/04/15 15:45:09
6.1.9.101 APPLY COMPLETE 09/14/17 16:44:44
6.1.1.0 COMMIT COMPLETE 09/16/14 13:49:36
6.1.1.0 APPLY COMPLETE 09/16/14 13:49:36
6.1.8.16 COMMIT COMPLETE 09/16/14 13:59:18
6.1.8.16 APPLY COMPLETE 09/16/14 13:55:32
6.1.9.30 COMMIT COMPLETE 07/02/15 16:36:49
6.1.9.30 APPLY COMPLETE 07/02/15 16:33:23
6.1.9.45 COMMIT COMPLETE 09/04/15 15:45:19
6.1.9.45 APPLY COMPLETE 09/04/15 15:45:10
6.1.9.101 APPLY COMPLETE 09/14/17 16:44:45
否则我只需要上面输出的最后一行。
答案1
对于 AIX 部分,不是对bos.adt.base
文件集进行硬编码,也不是要求全部更新的数量——应用和提交——但不仅仅是提交,我会询问拥有 /unix 符号链接(指向内核)的文件集的历史记录:
lslpp -q -c -h -Or $(lslpp -q -c -w /unix | cut -d: -f2) | tail -1 | cut -d: -f7-8
分成几部分来说,就是:
- -q -- 不打印列标题
- -c -- 打印输出以冒号分隔(更容易解析)
- -h -- 文件集历史记录
- -w -- 哪个文件集拥有给定的文件
- -或者--只需要一套;
r
oot 或u
sr 在这里工作
从内到外,我们获取文件集名称lslpp ... -w
,然后询问该文件集的历史记录;然后通过管道tail
获取最后一行(假定是最新的),然后通过管道cut
获取日期和时间字段。
对于 Solaris 部分,也许最近应用的内核补丁就足够了?
nawk -F: '/^PATCH_INFO/ { sub(" From", ""); print $2":"$3":"$4; }' \
/var/sadm/pkg/SUNWckr/pkginfo |
sort -k6n | tail -1
答案2
在 Solaris 上,您将通过运行以下命令看到已安装的内核补丁:
uname -v | awk -F_ '{print $2}'
如果您随后运行:
ls -lat /var/sadm/patch |grep <patch>
您将看到安装时的时间戳。如果您需要更多信息,该目录中还会有日志。
答案3
您可以通过管道将任何输出的最后一行传递到tail -1
.尝试这个:
lslpp -ha bos.adt.base | sed -n '/COMPLETE/ s/^k.*\s\s//p' | tail -1
我还将grep
命令折叠到命令中sed
- 它没有做任何sed
自己不能做的事情。
注意:我不熟悉 AIXlslpp
命令,因此我只是假设它是完成这项工作的正确工具,并且您已经使用了最合适的选项。可能值得阅读手册页,看看是否有更好的方法来使用它来获得您想要的东西。