Central-Processing-Unit
如何判斷 Linux 系統是大端還是小端?
我知道某些處理器是 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}'