
次の点をクロスチェックするスクリプトを作成しようとしています。
1. インストールファイルのターゲットアーキテクチャ(32または64ビット)
2. システムアーキテクチャ。
2番目の部分は非常に簡単で、次のコマンドを使用して計算してから、lscpu
grepとorの組み合わせを使用して特定の行を抽出できます。しかし、最初の部分は複雑であることが判明しました。 fileコマンドを試しましたが、出力は非常に不規則です。したがって、特定の列を抽出することは非常に困難になります。私も伝統的にこの種の仕事に使用されていませんでしたが、試してみました。ただし、期待どおりに制限のため、ほとんどのファイル形式を認識できません。awk
sed
objdump
スクリプトの残りの部分は非常に簡単です。値を比較し、意図した作業を続けます。上記の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 [$SYSARCH -eq $PACKAGEARCH]
sysarch などの if ステートメントがシステムアーキテクチャであり、packagarch がパッケージアーキテクチャです。