编写脚本以匹配系统和软件的架构

编写脚本以匹配系统和软件的架构

我正在尝试编写一个脚本,它将交叉检查以下内容:

1.安装文件的目标架构(32 或 64 位)

2.系统的架构。

第二部分非常简单,可以使用诸如 之类的命令来计算,然后使用 grep 和orlscpu的组合提取特定行。然而事实证明,第一部分是一个复杂的部分。我尝试使用 file 命令,但它的输出非常不规则。因此,从中提取特定列变得非常困难。我也尝试过使用,尽管传统上不用于此类事情。然而,正如预期的那样,由于其局限性,它无法识别大多数文件类型。awksedobjdump

脚本的其余部分非常简单,我将比较这些值并继续执行我的预期任务。对于上述第 1 点,我希望得到您的帮助。

编辑:

添加一些示例来解释我的file命令问题

$ file my_package_name.deb my_package_name.deb: Debian binary package (format 2.0)

$ file my_package_name.rpm my_package_name.rpm: RPM v3.0 bin i386/x86_64

上面的示例适用于安装文件。如果我运行它来运行某个脚本,它会给我一些东西,例如:

$ file crclient O/P: crclient: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

正如你们所看到的,我得到的输出与file命令非常不一致。因此,试图从中提取一部分变得非常复杂。

答案1

64 位 CPU 可以安装 32 位或 64 位操作系统,如果运行 64 位操作系统,则可以使用匹配的兼容性库运行 32 位应用程序。因此,仅仅检查CPU并不能一定会给你正确的答案。

幸运的是,这个uname命令会给你很多你想要的东西。

uname -a
Linux parrot 2.6.32-5-amd64 #1 SMP Tue May 13 16:34:35 UTC 2014 x86_64 GNU/Linux

uname -m
x86_64

我相信您可以检查规范的 libc 以获取系统上安装的操作系统类型的明确声明:

file $(readlink -f /lib/libc.so* ) | grep -q x86-64 && echo x86-64 || echo x86-32

答案2

就 deb 软件包而言,您可以比较dpkg --print-architecture 和的输出dpkg-deb --info packagename.deb | awk '/Architecture:/ {print $2}'

在脚本中,我有 if 语句,例如if [$SYSARCH -eq $PACKAGEARCH]sysarch 是系统架构,而 packagarch 是包架构,显然

相关内容