क्या लिनक्स में एक सिस्टम कमांड है, जो एंडियननेस की रिपोर्ट करता है?


30

क्या किसी को एक कमांड के बारे में पता है जो रिपोर्ट करता है कि बिग एंडियन या लिटिल एंडियन एक सिस्टम है, या पर्ल या कमांड के एक स्ट्रिंग का उपयोग करके इस तरह की तकनीक का सबसे अच्छा विकल्प है?

पर्ल

# little
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
12345678

# big
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
87654321

od | awk

# little
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
1

# big
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0

संदर्भ


क्या odतरीका गलत है ? यह सरल है और हर जगह काम करता है। यह वही है जो मैंने आपके प्रश्न के शरीर को पढ़ने से पहले सोचा था।
गिल्स एसओ- बुराई को रोकना '

@ गिल्स - वास्तव में कुछ भी नहीं, एक हैक की तरह थोड़ा महसूस होता है (कम से कम मेरे लिए)। सच है कि यह अन्य प्रणालियों जैसे कि Solaris + AIX पर पोर्टेबल प्रतीत होता है, लेकिन ऐसा लग रहा था कि सिस्टम की एंडियननेस 32-बिट बनाम 64-बिट की तरह थोड़ी अधिक स्पष्ट रूप से निर्धारित होनी चाहिए, इसलिए मुझे थोड़ा आश्चर्य हुआ कि यह नहीं था ' टी। नया lscpuतरीका वह है जो मैं उम्मीद करूंगा।
स्लम

एंडियननेस शब्द आकार की तुलना में निर्धारित करना आसान है, क्योंकि आपके पास एक कठिन समय प्लेटफ़ॉर्म खोजने में होगा जो कि छोटे-एंडियन या बड़े-एंडियन (कम से कम पूर्णांकों के लिए नहीं हैं, फ़्लोट्स एक और मामला है) जबकि बहुत सारे मिश्रण हैं 32-बिट और 64-बिट (सीपीयू, कर्नेल, यूजरलैंड, एक दी गई प्रक्रिया) के बीच।
गिलेस एसओ- बुराई को रोकना '

@ गिल्स - हां, दुनिया का मेरा नजरिया शायद मामूली है क्योंकि मैं मुख्य रूप से सोलारिस या लिनक्स के साथ बड़ा हुआ हूं। उससे आगे इतना नहीं।
स्लम

odदृष्टिकोण सबसे खुला सिस्टम पर काम करना चाहिए, न केवल Linux का उपयोग कर के साथ मामला होगा जो lscpu। तो "सर्वश्रेष्ठ" क्या परिस्थितियों पर निर्भर करता है।
मैटबायनको

जवाबों:


40

lscpu

lscpuआदेश से पता चलता है (अन्य बातों के अलावा):

Byte Order:            Little Endian

यह सिस्टम काम करने के लिए जाना जाता है

  • सेंटोस 6
  • उबंटू (12.04, 12.10, 13.04, 13.10, 14.04)
  • फेडोरा (17,18,19)
  • आर्चलिनक्स 2012+
  • लिनक्स मिंट डेबियन (इसलिए डेबियन परीक्षण को भी मानते हैं)।

यह सिस्टम काम नहीं करने के लिए जाना जाता है

  • फेडोरा १४
  • CentOS 5 (इसकी वजह से RHEL5 मानकर)

डिस्ट्रोस में स्पष्ट अंतर क्यों?

बहुत खुदाई के बाद मुझे पता चला कि क्यों। ऐसा लगता है कि संस्करण उपयोग-लिनक्स संस्करण 2.19 पहला संस्करण था जिसमें वह सुविधा शामिल थी जहां lscpuआपको अपने सिस्टम के एंडियननेस की रिपोर्ट करने वाले आउटपुट दिखाती है।

एक परीक्षण के रूप में मैंने अपने फेडोरा 14 सिस्टम पर दोनों संस्करण 2.18 और 2.19 को संकलित किया और नीचे दिया गया आउटपुट अंतर दिखाता है:

उपयोग- linux 2.18

$ util-linux-ng-2.18/sys-utils/lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                4
Thread(s) per core:    2
Core(s) per socket:    2
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Stepping:              5
CPU MHz:               1199.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

उपयोग- linux 2.19

$ util-linux-2.19/sys-utils/lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Stepping:              5
CPU MHz:               2667.000
BogoMIPS:              5320.02
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

ऊपर दिए गए संस्करण kernel.org वेबसाइट से डाउनलोड किए गए थे ।


धन्यवाद डेविड, मुझे याद आया कि जब मैं उस फाइल को टटोल रहा था। 8- अंधा जा रहा) होना चाहिए
SLM

मैं देख रहा हूं कि मैं क्यों चूक गया। मेरा फेडोरा 14 सिस्टम lscpuउस मूल्य को प्रदर्शित नहीं करता है, हालांकि मेरा Ubuntu 12.10 सिस्टम करता है। यदि आपको कोई आपत्ति नहीं है तो मैं आपका उत्तर ले सकता हूं और इसे विभिन्न प्रणालियों और प्रत्येक पर करने के तरीकों के लिए इसे खंडों में विभाजित कर सकता हूं।
slm

@ एसएलएम ज़रूर, आगे बढ़ो। संदर्भ के लिए, lscpuआर्कलिनक्स पर भी काम करता है।
डेविड बैगमैन

आर्क का कौन सा संस्करण?
slm

आर्क में संस्करण नहीं हैं; यह एक रोलिंग रिलीज है ...
jasonwryan

6

एक विधि जो मुझे डेबियन / उबंटू सिस्टम पर मिली है वह इस कमांड को चलाने के लिए है:

$ dpkg-architecture
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_BITS=64
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_BUILD_MULTIARCH=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_BITS=64
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_MULTIARCH=x86_64-linux-gnu

यह आपको दिखाएगा कि आपके सिस्टम में शामिल आर्किटेक्चर के आधार पर शब्द छोटे या बड़े हैं:

$ dpkg-architecture | grep -i end
DEB_BUILD_ARCH_ENDIAN=little
DEB_HOST_ARCH_ENDIAN=little

6

का उपयोग कर python:

$ python -c "import sys;print sys.byteorder"
little

या:

printf '\1' | od -dAn
1

जहां 1छोटे एंडियन के लिए और 00256बड़े एंडियन के लिए है।

या एक छोटे perlसंस्करण का उपयोग कर :

$ perl -V:byteorder
byteorder='12345678';

5

एक POSIX शेल और सी समाधान:

cat << EOF > foo.c

#include <endian.h>
#include <stdio.h>

int main() {
  printf("Byte Order: ");
  if (BYTE_ORDER == LITTLE_ENDIAN) 
    printf("little");
  else {
    if (BYTE_ORDER == BIG_ENDIAN)
      printf("big");
    else
      printf("unknown");
  }
  printf(" endian.\n");
  return 0;
}
EOF

gcc -D__USE_POSIX foo.c
./a.out

1

यदि आप एक ऐसी प्रणाली पर हैं जिसमें नहीं है endian.h:

#include <stdio.h>

int main() {
  int test = 0;
  char *bytes = (char *) &test;
  *bytes = 0x1;

  printf("Byte Order: ");
  if (test == 1){
    printf("little");
  }
  else {
      printf("big");
  }
  printf(" endian.\n");
  return 0;
}

VAX मध्य-अंत के लिए कोई प्यार नहीं है?
थ्रि

अच्छी तरह से देखा, मैं अपने वर्तमान Intel-> PowerPC मुद्दों में बहुत अवशोषित था, मैंने कुछ भयानक की कल्पना नहीं की थी।
मैथ्यू वी केरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.