linux - यह निर्धारित करने के लिए कि क्या दिया गया लिनक्स 32 बिट या 64 बिट है?




shell 32bit-64bit (14)

64 बिट या 32 बिट प्राप्त करने के लिए सरल स्क्रिप्ट

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi

जब मैं uname -a टाइप करता हूं, तो यह निम्न आउटपुट देता है।

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

मैं इससे कैसे जान सकता हूं कि दिया गया ओएस 32 या 64 बिट है?

configure स्क्रिप्ट लिखते समय यह उपयोगी होता है, उदाहरण के लिए: मैं किस वास्तुकला के लिए निर्माण कर रहा हूं?


आजकल, एक प्रणाली बहुआयामी हो सकती है, इसलिए यह वैसे भी समझ में नहीं आता है। आप संकलक का डिफ़ॉल्ट लक्ष्य खोजना चाहेंगे:

$ cc -v 2>&1 | grep ^Target
Target: x86_64-pc-linux-gn

आप एक हैलो दुनिया संकलित करने का प्रयास कर सकते हैं:

$ echo 'int main() { return 0; }' | cc -x c - -o foo
$ file foo
foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped


आसान निर्धारण के लिए एक और उपयोगी कमांड नीचे जैसा है:

कमान:

getconf LONG_BIT

उत्तर:

  • 32, यदि ओएस 32 बिट है
  • 64, यदि ओएस 64 बिट है

मैं इस बारे में विशेष रूप से Debian में सॉफ्टवेयर बनाने के लिए सोच रहा था (स्थापित डेबियन सिस्टम 32 बिट कर्नेल, लाइब्रेरीज़ इत्यादि के साथ 32-बिट संस्करण हो सकता है, या यह 64-बिट संस्करण 64-बिट संस्करण के लिए संकलित सामग्री के साथ हो सकता है। 32-बिट संगतता मोड के बजाय थोड़ा)।

डेबियन पैकेजों को स्वयं को यह जानने की ज़रूरत है कि वे किस आर्किटेक्चर के लिए हैं (बेशक) जब वे वास्तव में प्लेटफ़ॉर्म आर्किटेक्चर समेत अपने सभी मेटाडेटा के साथ पैकेज बनाते हैं, तो एक पैकेजिंग टूल है जो इसे अन्य पैकेजिंग टूल और स्क्रिप्ट्स के उपयोग के लिए आउटपुट करता है, जिसे कॉल किया जाता है डीपीकेजी-वास्तुकला । इसमें दोनों शामिल हैं जो इसे बनाने के लिए कॉन्फ़िगर किया गया है, साथ ही वर्तमान होस्ट भी। (आमतौर पर ये वही हैं।) 64-बिट मशीन पर उदाहरण आउटपुट:

DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu

आप उन चरों में से केवल एक प्रिंट कर सकते हैं या कमांड लाइन विकल्प के साथ dpkg -architecture में उनके मानों के खिलाफ परीक्षण कर सकते हैं।

मुझे नहीं पता कि डीपीकेजी-आर्किटेक्चर आर्किटेक्चर को कैसे कम करता है, लेकिन आप इसके प्रलेखन या स्रोत कोड को देख सकते हैं (डीपीकेजी-आर्किटेक्चर और आमतौर पर डीपीकेजी सिस्टम में से अधिकांश पर्ल हैं)।


मैं विश्वास नहीं कर सकता कि इस समय, किसी ने भी उल्लेख नहीं किया है:

sudo lshw -class cpu

सीपीयू हार्डवेयर की गति, मात्रा, आकार और क्षमताओं के बारे में विवरण प्राप्त करने के लिए।


यदि आप 64 बिट प्लेटफ़ॉर्म चला रहे थे तो आप x86_64 या uname -a से आउटपुट में बहुत समान uname

अपना विशिष्ट मशीन हार्डवेयर नाम चलाने के लिए

uname -m

आप भी कॉल कर सकते हैं

getconf LONG_BIT

जो 32 या 64 लौटाता है


यदि आपके पास i686 की बजाय 64-बिट ओएस है, तो आपके पास uname -a के आउटपुट में x86_64 या ia64 है। उसमें आपके पास इनमें से कोई भी तार नहीं है; आपके पास 32-बिट ओएस है (ध्यान दें कि इसका मतलब यह नहीं है कि आपका सीपीयू 64-बिट नहीं है)।


वह प्रणाली 32 बिट है। iX86 में अनाम का मतलब है कि यह 32-बिट आर्किटेक्चर है। अगर यह 64 बिट था, तो यह वापस आ जाएगा

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux

सबसे पहले आपको वर्चुअल बॉक्स डाउनलोड करना होगा। फिर नया और 32-बिट लिनक्स चुनें। फिर इसका उपयोग करके लिनक्स को बूट करें। यदि यह बूट हो जाता है तो यह 32 बिट है यदि यह तब 64 बिट नहीं है।


lscpu आपके सीपीयू के बारे में अन्य जानकारी के बीच इन्हें सूचीबद्ध करेगा:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...

uname -m कोशिश करें। जो uname --machine से कम है और यह आउटपुट करता है:

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

अन्यथा, लिनक्स कर्नेल के लिए नहीं, लेकिन सीपीयू के लिए , आप टाइप करते हैं:

cat /proc/cpuinfo

या:

grep flags /proc/cpuinfo

"झंडे" पैरामीटर के तहत, आप विभिन्न मान देखेंगे: देखें " / proc / cpuinfo में झंडे क्या हैं? " उनमें से एक का नाम lm : Long Mode ( x86-64 : amd64, जिसे इंटेल 64 भी कहा जाता है, यानी 64-बिट सक्षम)

lm ==> 64-bit processor

या lshw (जैसा कि सक्सोनी के रोल्फ द्वारा below उल्लिखित) का उपयोग कर रहा है (केवल सीपीयू चौड़ाई को पकड़ने के लिए):

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

नोट: आपके पास 32-बिट कर्नेल स्थापित 64-बिट CPU हो सकता है
(जैसा कि ysdx ने अपने स्वयं के उत्तर में उल्लेख किया है, "आजकल, एक प्रणाली multiarch हो multiarch इसलिए यह समझ में नहीं आता है। आप संकलक का डिफ़ॉल्ट लक्ष्य खोजना चाहेंगे")


Getconf सबसे कम सिस्टम कॉल का उपयोग करता है:

$ strace getconf LONG_BIT | wc -l
253

$ strace arch | wc -l
280

$ strace uname -m | wc -l
281

$ strace grep -q lm /proc/cpuinfo | wc -l
301

#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}






processor