Central-Processing-Unit

如何判斷 Linux 系統是大端還是小端?

  • September 29, 2021

我知道某些處理器是 Big Endian,而其他處理器是 Little Endian。但是是否有一個命令、bash 腳本、python 腳本或一系列命令可用於在命令行中確定係統是 Big Endian 還是 Little Endian?就像是:

if <some code> then
   echo Big Endian
else
   echo Little Endian
fi

還是僅僅確定係統正在使用的處理器並使用它來確定其 Endianess 是否更簡單?

在大端系統上(SPARC 上的 Solaris)

$ echo -n I | od -to2 | head -n1 | cut -f2 -d" " | cut -c6 

0

在小端系統上(x86 上的 Linux)

$ echo -n I | od -to2 | head -n1 | cut -f2 -d" " | cut -c6 

1


上面的解決方案很聰明,適用於 Linux *86 和 Solaris Sparc。

我需要一個也適用於 AIX/Power 和 HPUX/Itanium 的純 shell(無 Perl)解決方案。不幸的是,最後兩個表現不佳:AIX 報告“6”而 HPUX 給出了一個空行。

使用您的解決方案,我能夠製作出適用於所有這些 Unix 系統的東西:

$ echo I | tr -d [:space:] | od -to2 | head -n1 | awk '{print $2}' | cut -c6

關於某人發布的 Python 解決方案,它在 Jython 中不起作用,因為 JVM 將所有內容都視為 Big。如果有人可以讓它在 Jython 中工作,請發布!

另外,我發現了這個,它解釋了各種平台的字節順序。根據作業系統的選擇,某些硬體可以在任一模式下執行:http: //labs.hoffmanlabs.com/node/544


如果您要使用 awk,此行可以簡化為:

echo -n I | od -to2 | awk '{ print substr($2,6,1); exit}'

對於沒有“od”(比如 OpenWrt)的小型 Linux 機器,請嘗試“hexdump”:

echo -n I | hexdump -o | awk '{ print substr($2,6,1); exit}'

引用自:https://serverfault.com/questions/163487