लिनक्स कर्नेल आर्किटेक्चर कैसे निर्धारित करें?


92

uname -mi686 देता है और uname -mRed Hat Enterprise Linux सर्वर रिलीज 5.4 (टिकंगा) मशीन में i686 i386 आउटपुट देता है। मुझे उस मशीन पर Oracle डेटाबेस 10g रिलीज़ 2 स्थापित करने की आवश्यकता है। तो, मैं कैसे तय कर सकता हूं कि कर्नेल वास्तुकला 32 बिट या 64 बिट है?


10
कि पहले वाक्य पर एक टाइपो है: uname -mऔर uname -m?
tshepang

बिट्स की संख्या (32 या 64) वापस करने के लिए लिनक्स कमांड भी देखें ? । यदि uname -mमैं दिखाता हूं? 86, आपके पास 32-बिट सिस्टम है।
गाइल्स


एक दिलचस्प समाधान देने के लिए प्रश्न गाइल्स लिंक getconf WORD_BIT:।
मिकेल

7
getconf WORD_BITमेरे 64-बिट उबंटू पर 32 लौटाता है
मीनाएव

जवाबों:


90

i386 और i686 दोनों 32-बिट हैं।
x86_64 64-बिट है

64 बिट के लिए उदाहरण:

behrooz@behrooz:~$ uname -a  
Linux behrooz 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

संपादित करें:
देखें मेरा लिनक्स एआरएम 32 या 64 बिट है? एआरएम के लिए


Armv7l के बारे में क्या? किसी भी मामले में, एक साधारण बूलियन प्रतिक्रिया के साथ एक आदेश स्वादिष्ट होगा।
user7543

1
@ user7543 यह एआरएम 32-बिट है, क्योंकि हमारे पास अभी तक 64-बिट एआरएम नहीं है। जब हम करते हैं, तो यह कुछ अलग होने वाला है।
बेहरोज

मुझे ऐसा लगता है कि मुझे अपना उत्तर समुदाय विकि बनाना चाहिए लेकिन पता नहीं कैसे।
बेहरोज

1
प्रयास करें: uname -m। वह केवल वास्तुकला दिखाएगा।
अलेक्सज मगुरा

39

यह आसान है! archकमांड का उपयोग करें ।


5
अजीब ... मेरे 2013 मैकबुक प्रो पर, archरिटर्न i386, लेकिन uname -aदिखाता है x86_64
टर्बोलेडेन

3
@turboladen "क्यों नाम और आर्च आउटपुट में भिन्न हैं?" = superuser.com/questions/835514/…
user10607


32

@behrooz सही है। दुर्भाग्य से unameआपको आर्किटेक्चर जानने की आवश्यकता है। दरअसल, मैं आर्किटेक्चर की एक सूची की तलाश में था और मुझे यह लेख मिला जो आपके प्रश्न का उत्तर देता है। के संबंध में uname -m:

x86_64 GNU / Linux दर्शाता है कि आप 64 बिट लिनक्स कर्नेल चला रहे हैं। यदि आप i386 / i486 / i586 / i686 का उपयोग करते हैं तो यह 32 बिट कर्नेल है।

यह निर्धारित करने के लिए कि हार्डवेयर 64-बिट कर्नेल चलाने में सक्षम है या नहीं

grep flags /proc/cpuinfo

आउटपुट में निम्नलिखित के लिए देखें ( एक ही प्रश्न के लिए इस स्टैकओवरफ़्लो उत्तर से पुनर्प्राप्त सभी झंडे )

  • lm ध्वज का अर्थ है लांग मोड सीपीयू - 64 बिट सीपीयू
  • tm ध्वज का अर्थ है संरक्षित मोड - 32-बिट सीपीयू
  • rm ध्वज का अर्थ है रियल मोड - 16 बिट सीपीयू

क्या lm फ्लैग का मतलब है कि CPU 64-बिट का समर्थन करता है या इसका मतलब है कि यह 64-बिट में चल रहा है। मैं आर्क पर भरोसा करने की सलाह देता हूं यह जानते हुए कि यह 64-बिट के लिए x86_64 या 32-बिट के लिए i? 86 होगा।
पेंग्विन 359

1
@ p पेंगुइनin359 का मतलब है कि सीपीयू 64-बिट का समर्थन करता है।
xenoterracide 22

@xeno तो कर्नेल आर्किटेक्चर को निर्धारित करने के लिए उपयोग नहीं किया जा सकता है।
पेंग्विन 359

@ penguin359 नहीं, जवाब में यह स्पष्ट नहीं था?
xenoterracide

1
@ p पेंगुइनin359, नहीं, लेकिन यह पता लगाने के लिए अक्सर उपयोगी होता है कि क्या आपका ओएस 64-बिट चल रहा है और यदि हार्डवेयर सक्षम नहीं है, तो imo
xenoterracide

22

(संपादित करें: यह उत्तर गलत है। @ Lizardx की टिप्पणी के लिए धन्यवाद)

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

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

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


3
इतना चालाक और हमें यह भी याद दिलाता है कि चिप आर्किटेक्चर क्या है
code_monk

2
सुरुचिपूर्ण होने पर, यह दुर्भाग्य से सही नहीं है: uname -m == i686 BUT if ((1 << 32)); फिर इको 64 बिट्स; फाई == 64 बिट्स यह एक पीएई कर्नेल है, 32 बिट, न कि 64 बिट कर्नेल। सीपीयू 64 बिट सक्षम है, हालांकि, amd64। चूंकि सवाल यह था कि कर्नेल आर्च का निर्धारण कैसे किया जाए, इसलिए यह समाधान गलत परिणाम देगा।
छिपकली

1
नोट ((एक Bashism है और POSIX mywiki.wooledge.org/Bashism#Conditionals
स्टीवन पेनी

मैंने कुछ 32 बिट आर्किटेक्चर पर यह कोशिश की है और यह सोचता है कि यह 64 बिट है।
dannyw

यह काम कर सकता है((1<<32)-1)
इविजन स्टीफन स्टिपिक

15

के लिए डेबियन :

मेरे पीसी पर

    ~> dpkg - छाप-वास्तुकला
    amd64
    ~> dpkg - छाप-विदेशी-वास्तुकला
    i386

मेरी रास्पबेरी पाई 2

    ~> dpkg - छाप-वास्तुकला
    armhf

1
checkinstallthx के साथ उपयोग करने के लिए पैकेज आर्किटेक्चर का निर्धारण करते समय यह सबसे अच्छा काम करता है !
कुंभ राशि

धन्यवाद। मैं एक ऐसी चीज की तलाश में हूं जो '' मानक '' amd64 '' को गिराएगी '' i386 '' आर्किटेक्चर नामों के बजाय सिर्फ "x86_64"। कोई भी उस शब्दावली का उपयोग नहीं करता है जब नामकरण पूर्व रिलीज़ होता है।
क्लिफ

12

सबसे सरल तरीका है:

getconf LONG_BIT

जो कि 32 या 64 बिट्स के आधार पर 64 या 32 आउटपुट करेगा।

उदाहरण के लिए:

dannyw@dannyw-redhat:~$ getconf LONG_BIT
64

2
यह उत्तर भ्रामक है। यदि आप मल्टीकार समर्थन को सक्षम करते हैं और 64 बिट कर्नेल स्थापित करते हैं तो 32 बिट इंस्टॉलेशन getconf LONG_BITप्रिंट होगा, 32हालांकि आप 64 बिट कर्नेल चला रहे हैं।
kenn

2

का उपयोग syscap से Formake परियोजना

syscap कई प्रणाली गुणों की जांच करने और निर्भरता का परीक्षण करने की अनुमति देता है। यह एक पोर्टेबल शेल स्क्रिप्ट है।

सीपीयू वास्तुकला प्राप्त करें:

syscap info -arch

कर्नेल नाम और संस्करण प्राप्त करें:

syscap info -kernel -kernver

1

एक और तरीका है वास्तुकला की जांच करने के लिए कुछ सिस्टम फ़ाइल के लिए संकलित किया गया था, जैसे

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

1
यह सिस्टम आर्किटेक्चर है, जो हमेशा कर्नेल आर्किटेक्चर नहीं है। अधिक भिन्नताओं के लिए SU पर इस उत्तर को देखें ।
गाइल्स

सैद्धांतिक रूप से, वे भिन्न हो सकते हैं, लेकिन क्या ऐसा कोई मौका है जो वे किसी वास्तविक जीवन की स्थापना पर बेमेल होंगे?
मिनाएव

कुछ वितरण x86 संस्करण पर एक amd64 कर्नेल को शिप करते हैं। मैं नहीं जानता कि कितने लोग उनका उपयोग करते हैं, मैंने डेबियन पॉपकॉन की जाँच की लेकिन यह विभिन्न आँकड़ों के बीच संबंध नहीं रखता है। मुझे लगता है कि मुख्य उपयोग के मामले में 32-बिट मुख्य ओएस है और एक चुरोट या वीएम में 64-बिट ओएस चल रहा है।
गाइल्स

@ गिल्स तुम प्यार करने वाले हो जो तुम नए x32 आर्किटेक्चर के बारे में पढ़ोगे, अगर मैं बहुत देर नहीं करूँगा, तो बेशक। wiki.debian.org/X32Port
बेहरोज

0

या फिर आप क्या के रास्ते का उपयोग कर सकते uname कमांड आंतरिक रूप से पड़ता है कि आप अपने दम पर कुछ सामान लागू करना चाहते हैं:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}

0

यहाँ एक और विधि का उपयोग कर रहा है uname

से man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64 #


जब तक यह "अज्ञात" नहीं देता
Dagelf

0

यदि आप एक साधारण लाइनर की तलाश में हैं, तो यह सबसे विश्वसनीय समाधान है जो मैंने पाया है कि 64 या 32 रिटर्न देता है । यह परवाह नहीं करता है कि आप एआरएम चला रहे हैं या नहीं, और इसे किसी भी सिस्टम पर बैश या का उपयोग करके काम करना चाहिए ।

खबरदार, यह मान लेंगे कि सिस्टम 32-बिट या 64-बिट है। नीचे मेरी व्याख्या देखें यदि आपको 8- 16 या कुछ-अन्य-बिट आर्किटेक्चर का पता लगाने की आवश्यकता है।

[$ ((0xffffff)) -eq -1] && गूंज 32 || प्रतिध्वनि 64

यहाँ क्या ख़ुशी है?
तर्क बहुत ही सरल है और यह सब उबलता है कि कंप्यूटर कैसे पूर्णांक पर हस्ताक्षर करता है। 32-बिट आर्किटेक्चर में केवल 32 बिट्स होते हैं जो कि हस्ताक्षरित पूर्णांक को संग्रहीत करने के लिए उपयोग कर सकते हैं जबकि 64-बिट आर्किटेक्चर में 64 बिट्स होते हैं! दूसरे शब्दों में, पूर्णांकों के सेट को संग्रहीत किया जा सकता है जो परिमित है। इस सेट का आधा नकारात्मक संख्याओं का प्रतिनिधित्व करता है और आधा सकारात्मक संख्याओं का प्रतिनिधित्व करता है। हस्ताक्षरित पूर्णांक -1 को सबसे बड़ी संख्या के रूप में दर्शाया गया है जो उस वास्तुकला के लिए दी गई संख्या में बिट्स में संग्रहीत किया जा सकता है। 32-बिट सिस्टम पर, -1 को हेक्स मान 0xFFFFFFFF (जो कि 32 बाइनरी बिट्स, सभी 1 के बराबर है) द्वारा दर्शाया जा सकता है। 64-बिट सिस्टम पर, 0xFFFFFFFF का अनुवाद 4,294,967,295, आधार 10 है जबकि 0xFFFFFFFFFFFFFFFF -1 के लिए प्रतिनिधित्व है)। आप देख सकते हैं कि यह आसानी से सिस्टम के लिए स्केल कैसे करेगा जो 8- या 16-बिट के साथ-साथ 0xFF और 0xFFFF पर -1 के बराबर होगा,

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.