首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何列出perl内核的最高版本?

如何列出perl内核的最高版本?
EN

Stack Overflow用户
提问于 2019-10-01 07:21:23
回答 2查看 200关注 0票数 1

在许多码头集装箱中,le /boot是空的。不过,vmlinuz可在/var/lib/modules//vmlinuz中使用。

在shell中,我可以:

代码语言:javascript
复制
for kver in $(ls /lib/modules|sort -Vr)
do
    test -f /lib/modules/$kver/vmlinuz && echo $kver && break
done

我如何以可靠的方式完成这个un (我的意思是:使用CentOS-6中的模块到CentOS-8或任何其他Linux发行版)。

我已经看到了用于内核版本比较或版本排序的模块,但是在包含6到8的所有CentOS版本中,没有一个模块可以作为发行版包使用(8很重要,因为它是RHEL-8的一个克隆,而RHEL-8对于perl包的发行版已经被极大地简化了)。

如果我有这两个版本: 4.18.0-144.el8.x86_64 4.18.0-80.7.1.el8_0.x86_64,我需要选择-144版本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-01 07:59:14

最简单的方法是使用类别::版本模块(您需要从CPAN安装该模块)。

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Sort::Versions;
use File::Basename;

for (sort { versioncmp($b, $a) } glob '/lib/modules/*') {
  my $ver = basename $_;
  if (-e "/lib/modules/$ver/vmlinuz") {
    say $ver;
    last;
  }
}

更新:您的问题包括以下内容:

我已经看到用于内核版本比较或版本排序的模块,但是在包括6到8的所有CentOS发行版中,没有一个模块可以作为发行版包使用。

当然,软件包并不是安装CPAN模块的唯一方法。您可以始终使用cpancpanm。但是,如果您真的不想以这种方式安装模块,那么您也可以将versioncmp()子例程剪切并粘贴到代码中。只有几十行代码。

代码语言:javascript
复制
sub versioncmp ($$) {
    my @A = ($_[0] =~ /([-.]|\d+|[^-.\d]+)/g);
    my @B = ($_[1] =~ /([-.]|\d+|[^-.\d]+)/g);

    my ($A, $B);
    while (@A and @B) {
        $A = shift @A;
        $B = shift @B;
        if ($A eq '-' and $B eq '-') {
            next;
        } elsif ( $A eq '-' ) {
            return -1;
        } elsif ( $B eq '-') {
            return 1;
        } elsif ($A eq '.' and $B eq '.') {
            next;
        } elsif ( $A eq '.' ) {
            return -1;
        } elsif ( $B eq '.' ) {
            return 1;
        } elsif ($A =~ /^\d+$/ and $B =~ /^\d+$/) {
            if ($A =~ /^0/ || $B =~ /^0/) {
                return $A cmp $B if $A cmp $B;
            } else {
                return $A <=> $B if $A <=> $B;
            }
        } else {
            $A = uc $A;
            $B = uc $B;
            return $A cmp $B if $A cmp $B;
        }       
    }
    @A <=> @B;
}
票数 4
EN

Stack Overflow用户

发布于 2019-10-01 14:09:57

在perl中使用ls是否作弊?

代码语言:javascript
复制
for (`ls -rv /lib/modules/`){
  chomp;
  next unless -e "/lib/modules/$_/vmlinuz";
  say; 
  last;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58179853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档