如何在 AIX 和 Solaris 中获取内核的最后更新日期

如何在 AIX 和 Solaris 中获取内核的最后更新日期

我想获取 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 -- 哪个文件集拥有给定的文件
  • -或者--只需要一套;root 或usr 在这里工作

从内到外,我们获取文件集名称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命令,因此我只是假设它是完成这项工作的正确工具,并且您已经使用了最合适的选项。可能值得阅读手册页,看看是否有更好的方法来使用它来获得您想要的东西。

相关内容