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


470

जब मैं टाइप करता हूं 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स्क्रिप्ट लिखते समय यह उपयोगी है , उदाहरण के लिए: मैं किस वास्तुकला के लिए निर्माण कर रहा हूं?

जवाबों:


735

कोशिश करो 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, जिसे Intel 64 के रूप में भी जाना जाता है, अर्थात 64-बिट सक्षम)

lm ==> 64-bit processor

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

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

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


3
grep झंडे / proc / cpuinfo केवल आपको बताता है कि सीपीयू 64 बिट है। जैसा कि मैं इस सवाल को समझता हूं कि यह ओएस के बारे में था। uname -m केवल मुझे "i686" बताता है।
किम स्टेबेल

3
मेरे पास 64 बिट हार्डवेयर पर एक 32 बिट कर्नेल है और "x86_64" को 'uname -m' (डेबियन पर) से प्राप्त करें। मान के लिए मैन पेज कहता है कि -मैं मशीन हार्डवेयर नाम दिखाता है, इसलिए यह सही लगता है।
टोनी मेयर

1
अगर मेरे पास 64-बिट मशीन / प्रोसेसर पर एक 32-बिट कर्नेल चल रहा है, तो क्या होगा uname -i, uname -pऔर uname -mदिखाएगा?
रुबेंन 2020

4
क्या होगा अगर tm और lm दोनों मौजूद हैं?
जेवियर नोवोआ सी।

4
@JavierNovoaC। tm (थर्मल मॉनिटर) स्वचालित घड़ी नियंत्रण को इंगित करता है। 32-बिट प्रोसेसर को अलग करने से इसका कोई लेना-देना नहीं है। वास्तव में, lm (लॉन्ग मोड) मौजूद है अगर और केवल अगर आपके पास 64-बिट सीपीयू है। इसलिए आपको केवल एलएम पर निर्भर रहना चाहिए। अन्यथा थॉमस वाटरडल द्वारा दिया गया उत्तर सबसे अच्छा है। यह जवाब सिर्फ गलत है और कई लोगों को गुमराह किया है क्योंकि plz मध्यस्थ इसके बारे में कुछ करते हैं।
इस्साम टी।

153

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

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

uname -m

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

getconf LONG_BIT

जो कि 32 या 64 में से एक है


4
uname -mआउटपुट x86_64 getconf LONG_BITआउटपुट 32कौन सा सही है ?? : \
स्टीफ़न

10
इसका मतलब है कि सीपीयू 64-बिट है, लेकिन आपने इस पर केवल 32-बिट ऑपरेटिंग सिस्टम स्थापित किया है, भले ही आप 64-बिट का उपयोग कर सकते थे।

1
स्टीव केम्प सही है, इसलिए सावधान रहें (मैक ओएस एक्स 10.5 2009 पर मैकबुक पर ध्यान में आता है, जहां ओएस 32-बिट है लेकिन 64-बिट ऐप चलाने में सक्षम है)
jww

1
uname -mके लिए QP है उपयोगी नहीं है configureके रूप में यह गलत परिणाम दे सकते हैं। getconf LONG_BITसी पुस्तकालय जो एक निर्दिष्ट, द्वारा के लिए सही आकार नहीं हो सकता है के डिफ़ॉल्ट सा आकार मिलता है CC, संकलक।
user3710044

2
getconf LONG_BIT32 ig प्रदान कर सकता है इसे 32 बिट एप्लिकेशन के रूप में बनाया गया है (आमतौर पर 64 बिट कर्नेल जो 32 बिट उपयोगकर्ता भूमि पर चल रहा है)।
ysdx

42

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

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

3
सीपीयू की भौतिक क्षमताओं को आउटपुट करता है, उपयोगी है, लेकिन वर्तमान ओएस के वर्तमान उपयोगकर्ताओं के लिए विश्वसनीय नहीं है।
user3710044

33

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

कमान:

getconf LONG_BIT

उत्तर:

  • 32, अगर ओएस 32 बिट है
  • 64, अगर ओएस 64 बिट है

2
इटेनियम 64 पर एचपी-यूएक्स 11.31 आई के मामले में यह सच नहीं है: यह आदेश 32 देता है।
गेब्रियल हौटलक्लो

मुझे लगता है कि यह सब इस बात पर निर्भर करता है कि "64-बिट" द्वारा प्रश्नकर्ता का क्या मतलब है - यह पूर्णांक के प्राकृतिक आकार का अर्थ करता था, लेकिन अब इसका उपयोग अक्सर इसके बजाय पते के आकार का मतलब होता है।
टोबी स्पाइट

12

आदेश

$ arch    

के बराबर है

$ uname -m

लेकिन टाइप करने के लिए तेजी से दोगुना है


2
सहमत थे, लेकिन मुझे यकीन है कि टाइपिंग की गति अधिकांश डेवलपर्स के लिए कोई समस्या नहीं है।
विलियम्सवेल

2
यह उन प्रक्रिया प्रकारों को लौटाता है जो कर्नेल का समर्थन कर सकते हैं। 64 बिट कर्नेल पर 32 बिट यूजरस्पेस चलाना संभव है और यहां तक ​​कि उचित भी है।
user3710044

1
हर यूनिक्स सिस्टम पर आर्क कमांड उपलब्ध नहीं है, जबकि नाम होना चाहिए।
गेब्रियल हौटक्लोक

11

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

डेबियन पैकेजों को स्वयं यह जानने की आवश्यकता है कि वे किस वास्तुकला के लिए हैं (निश्चित रूप से) जब वे वास्तव में अपने सभी मेटाडेटा के साथ पैकेज बनाते हैं, जिसमें प्लेटफॉर्म आर्किटेक्चर भी शामिल है, इसलिए एक पैकेजिंग टूल है जो इसे अन्य पैकेजिंग टूल और स्क्रिप्ट का उपयोग करने के लिए आउटपुट करता है, जिन्हें कॉल किया जाता है dpkg-वास्तुकला । इसमें दोनों शामिल हैं जो इसे बनाने के लिए कॉन्फ़िगर किए गए हैं, साथ ही साथ वर्तमान होस्ट भी। (आम तौर पर ये हालांकि समान हैं।) 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- RGBecture के लिए कमांड लाइन विकल्पों के साथ उनके मूल्यों के खिलाफ एक परीक्षण कर सकते हैं ।

मुझे नहीं पता कि dpkg-आर्किटेक्चर आर्किटेक्चर को कैसे घटाता है, लेकिन आप इसके डॉक्यूमेंटेशन या सोर्स कोड (dpkg-आर्किटेक्चर और ज्यादातर dpkg system perl हैं) को देख सकते हैं।


आप बस उपयोग कर सकते हैं: dpkg --architectureहोस्ट सिस्टम आर्किटेक्चर प्राप्त करने के लिए, जिसे dpkg-devपैकेज को स्थापित करने की आवश्यकता नहीं है ।
मार्क लोंगेयर

यह dpkg: error: unknown option --architecture14.04 के dpkg 1.17.5ubuntu के लिए पैदा करता है । dpkg- आर्किटेक्चर (dpkg-dev इंस्टॉल के साथ) हालांकि ठीक काम करता है।
समयबद्धता

2
आदेश dpkg --print-architectureने डेबियन पर हमेशा के लिए काम किया है। यह एक काम करता है लेकिन डेबियन तक सीमित है और यह डेरिवेटिव है।
user3710044

11
#include <stdio.h>

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

2
काम करता है लेकिन लिनक्स पर stdio.h का कार्यान्वयन विस्तार प्रतीत होता है, बेहतर समाधान मौजूद हैं, उदाहरण के लिए: limit.h, का उपयोग न करें।
user3710044

10

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


1
यह उन प्रक्रिया प्रकारों को लौटाता है जो कर्नेल का समर्थन कर सकते हैं। 64 बिट कर्नेल पर 32 बिट यूजरस्पेस चलाना संभव है और यहां तक ​​कि उचित भी है।
user3710044

unameआउटपुट में अन्य मान हैं जो 64-बिट ओएस का संकेत देते हैं। सारी दुनिया एक x86 या इटेनियम नहीं है ...
Toby Speight

6

वह सिस्टम 32 बिट है। iX86 का unameमतलब है कि यह 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

1
यह उन प्रक्रिया प्रकारों को लौटाता है जो कर्नेल का समर्थन कर सकते हैं। 64 बिट कर्नेल पर 32 बिट यूजरस्पेस चलाना संभव है और यहां तक ​​कि उचित भी है।
user3710044

6

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

$ cc -v 2> और 1 | grep ^ लक्ष्य
लक्ष्य: x86_64-pc-linux-gn

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

$ गूंज 'इंट मुख्य () {वापसी 0; } '| cc -xc - -o foo
$ फ़ाइल फू
foo: ईएलएफ 64-बिट एलएसबी निष्पादन योग्य, x86-64, संस्करण 1 (SYSV), गतिशील रूप से जुड़ा हुआ, GNU / Linux / 32.32 के लिए दुभाषिया /lib64/ld-linux-x86-64.so.2, BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, छीन नहीं

1
चूंकि cc -v | grep …कंपाइलर-विशिष्ट है, इसलिए कोई भी उपयोग कर सकता है cc -dumpmachine, जिसे जीआरपी की आवश्यकता नहीं है और न केवल जीसीसी द्वारा समर्थित है।
एंटोन सैमसोनोव

यह देखते हुए कि प्रश्न यह कॉन्फ़िगर स्क्रिप्ट के लिए बताता है, यह संभवतः यहां सबसे उपयोगी और प्रासंगिक उत्तर है। यह वह करेगा जो आप चाहते हैं कि सभी मामलों में (64-बिट ओएस पर 32-बिट उपयोगकर्ता चुरोट सहित, एक विदेशी वास्तुकला के लिए क्रॉस-संकलन, और बाकी)।
टोबी स्पाइट

5

जवाब के संबंध में "getconf LONG_BIT"

मैंने इसे 'C' में करने के लिए एक साधारण फ़ंक्शन लिखा:

/*
 * check_os_64bit
 *
 * Returns integer:
 *   1 = it is a 64-bit OS
 *   0 = it is NOT a 64-bit OS (probably 32-bit)
 *   < 0 = failure
 *     -1 = popen failed
 *     -2 = fgets failed
 *
 * **WARNING**
 * Be CAREFUL! Just testing for a boolean return may not cut it
 * with this (trivial) implementation! (Think of when it fails,
 * returning -ve; this could be seen as non-zero & therefore true!)
 * Suggestions?
 */
static int check_os_64bit(void)
{
    FILE *fp=NULL;
    char cb64[3];

    fp = popen ("getconf LONG_BIT", "r");
    if (!fp)
       return -1;

    if (!fgets(cb64, 3, fp))
        return -2;

    if (!strncmp (cb64, "64", 3)) {
        return 1;
    }
    else {
        return 0;
    }
}

अच्छा विचार है, 'getconf'!


5
मूर्ख विचार! का प्रयोग करें CHAR_BIT*sizeof(void*)या __WORDSIZEC. में
10:11 बजे

3
नहीं यह मूर्खतापूर्ण नहीं है। आपके पास 32-बिट निष्पादन योग्य हो सकता है और आप यह पता लगाना चाहते हैं कि सिस्टम 64-बिट वाले का समर्थन करेगा, उदाहरण के लिए।
लुडविग ए। नोरिन

जीएनयू-सी लाइब्रेरी में एक लंबे समय की डिफ़ॉल्ट लंबाई हो जाती है .. यह एक काम करता है!
user3710044

1
यह वास्तव में गलत है, क्योंकि यदि आप 64 बिट कर्नेल पर 32 बिट यूज़र्सस्पेस चला रहे हैं, या यहां तक ​​कि एक्स 32 यूज़रस्पेस भी है, तो यह कहेगा कि ओएस 32 बिट है।
रुस्लान

इसका दृढ़ता से उपयोग न करने का सुझाव दिया जाता है fgets: stackoverflow.com/questions/16323185/…
2939 पर छत

4

आप पर्यावरण चर का उपयोग करके भी देख सकते हैं:

echo $HOSTTYPE

परिणाम:

i386 -> 32 बिट्स

x86_64 -> 64 बिट्स

से निकाला गया: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html


1
यह एक वैरिएबल में बनाया गया है क्योंकि /bin/bashयह एक पर्यावरण चर नहीं है। यदि आप पहले से ही बैश पर निर्भर हैं तो यह ठीक काम करता है। हालांकि, परिणाम हो सकता है i386, i486, i586, i686और दूसरों को ऐसा सावधान रहना होगा।
user3710044

3

बैश में, पूर्णांक अतिप्रवाह का उपयोग करते हुए:

if ((1 == 1<<32)); then
  echo 32bits
else
  echo 64bits
fi

यह किसी अन्य प्रक्रिया को लागू करने या फ़ाइलों को खोलने की तुलना में बहुत अधिक कुशल है।


2
बैश (हो सकता है?) 64 बिट का उपयोग करने के लिए संकलित किया गया है यदि वह प्रकार उपलब्ध है, तो यह आमतौर पर आजकल होता है और इसलिए 32 बिट सिस्टम आमतौर पर "लंबे लंबे" प्रकार का उपयोग करेगा
user3710044

2
डेबियन में बैश को 2008 के बाद से 64 बिट अंकगणितीय का उपयोग करने के लिए संकलित किया गया है, शायद इससे पहले। स्टैकओवरफ्लो के अस्तित्व में आने से पहले ही यह उत्तर तोड़ दिया गया था।
पीटर कॉर्डेस

3

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

2

यदि आप 1 को 32 से छोड़ देते हैं और आपको 1 मिलता है, तो आपका सिस्टम 32 बिट का है। यदि आप 1 बायीं ओर 64 से हटते हैं और आपको 1 मिलता है, तो आपका सिस्टम 64 बिट का है।

दूसरे शब्दों में,

if echo $((1<<32)) gives 1 then your system is 32 bit

if echo $((1<<64)) gives 1 then your system is 64 bit


"लंबे समय तक" का उपयोग करके बैश के साथ एक ही समस्या।
user3710044

यह मेरे लिए काम करता है, क्योंकि यदि यह 32 बिट लौटाता है, तो यह 32% चलने की पुष्टि की जाती है। यदि यह 64 देता है तो बैश को लंबे समय तक संकलित किया जा सकता है।
जेसीएम

1

यदि कोई उपलब्ध बायनेरिज़ में गंभीर रूप से सीमित है (जैसे initramfs), तो मेरे सहयोगियों ने सुझाव दिया:

$ ls -l /lib*/ld-linux*.so.2

मेरे ALT Linux सिस्टम पर, i586 है /lib/ld-linux.so.2और x86_64 है /lib64/ld-linux-x86-64.so.2


मुझे उन में से एक मिला, 32 में से 64 के लिए एक और mx32 के लिए एक।
user3710044

हाँ, अगर यह 64-बिट पुस्तकालयों के टन वापस नहीं करता है, तो यह 32 बिट ओएस चल रहा है: ls -aR | grep 64 | grep -v proc
JCM


1

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

sudo lshw -class cpu

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


1

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

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

1

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

इस तथ्य के आधार पर कि 64-बिट आमतौर पर x86_64और 32-बिट है i686आदि।


-6

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


2
यह निर्धारित करने का एक बहुत दूर का तरीका है कि सिस्टम 32 है या 64 बिट।
मार्स

लेकिन यह वास्तव में इस समस्या को हल करने का एक तरीका है। इसलिए मैं इसे चिह्नित करूंगा।
फिरोज

यह मुझे विषम से संख्याओं को बताने के तरीके की याद दिलाता है: एक गणित इसे दो से विभाजित करने के बाद शेष को देखेगा; एक प्रोग्रामर कम से कम महत्वपूर्ण बिट को देखेगा; एक MS SQL विशेषज्ञ दो तालिकाओं का निर्माण करेगा, एक सम संख्याओं के लिए और एक विषम के लिए, और देखिए कि इनपुट कहाँ समाप्त होता है ... आंकड़े
माइकल शॉर्जिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.