एक लिनक्स कमांड क्या है जिसे मैं 32 या 64 में प्रोग्रामेटिक रूप से चलाने के लिए चला सकता हूं यह इंगित करने के लिए कि क्या प्रोसेसर 32 बिट या 64 बिट प्रोसेसर है?
एक लिनक्स कमांड क्या है जिसे मैं 32 या 64 में प्रोग्रामेटिक रूप से चलाने के लिए चला सकता हूं यह इंगित करने के लिए कि क्या प्रोसेसर 32 बिट या 64 बिट प्रोसेसर है?
जवाबों:
आप देख सकते हैं कि सीपीयू 64-बिट, 32-बिट या flags
लाइन में चेक करके दोनों में सक्षम है या नहीं /proc/cpuinfo
। आपको अपने वास्तुकला परिवार पर संभावित झंडों को जानना होगा। उदाहरण के लिए, i386 / amd64 प्लेटफ़ॉर्म पर, lm
ध्वज amd64-सक्षम CPU (CPU जो उस ध्वज i386- केवल हैं नहीं है) की पहचान करता है।
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
आप देख सकते हैं कि क्या आर्किटेक्चर को क्वेरी करके कर्नेल 32-बिट या 64-बिट है uname -m
। उदाहरण के लिए, i[3456]86
32-बिट हैं जबकि x86_64
64-बिट हैं। ध्यान दें कि कई आर्किटेक्चर पर, 64-बिट कर्नेल 32-बिट यूजरलैंड प्रोग्राम चला सकता है, इसलिए भले ही uname -m
64-बिट कर्नेल दिखाता हो, लेकिन 64-बिट लाइब्रेरी उपलब्ध होने की कोई गारंटी नहीं है।
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
यह भी ध्यान दें कि uname -m
"वर्चुअलाइज्ड" मान वापस आ सकता है। उदाहरण के लिए, लिनक्स के तहत, यदि आप setarch i386 bash
एक amd64 सिस्टम पर चलते हैं , और आप uname -m
उस बैश से चलते हैं , तो आपको uname -m
रिपोर्टिंग दिखाई देगी i386
। यह प्रभावी रूप से आपको दिखावा करने देता है कि आप "32-बिट सिस्टम" पर हैं, भले ही कर्नेल 64-बिट वाला हो, उदाहरण के लिए क्रॉस-संकलन को सेट किए बिना 32-बिट प्रोग्राम को संकलित करने के लिए।
आप देख सकते हैं कि कमांड के साथ LSB सपोर्ट को क्वेरी करके यूजरलैंड में क्या उपलब्ध है lsb_release
। अधिक सटीक रूप से, समर्थित एलएसबी सुविधाओं की lsb_release -s
एक- :
छापी गई सूची प्रिंट करता है। प्रत्येक सुविधा का रूप है । उदाहरण के लिए, एक ix86 सी लाइब्रेरी की उपलब्धता से संकेत मिलता है , जबकि amd64 के लिए एनालॉग है। प्रत्येक वितरण सभी उपलब्ध एलएसबी मॉड्यूल की घोषणा नहीं करता है, लेकिन इस तरह से पता लगाने की तुलना में अधिक उपलब्ध हो सकता है।module-version-architecture
core-2.0-ia32
core-2.0-amd64
आप 5-लाइन C प्रोग्राम को प्रिंट करके sizeof(void*)
या उसके आधार पर विकास के लिए पसंदीदा शब्द आकार का पता लगा सकते हैं (C संकलक उपलब्ध है) sizeof(size_t)
।
getconf WORD_BIT
या getconf LONG_BIT
करने में सक्षम होना चाहिए ।
getconf
यहाँ का उपयोग करने के बारे में नहीं सोचा था । यह सिद्धांत रूप में अच्छा लगता है, लेकिन यह सुनिश्चित करना मुश्किल है कि परिणाम आपके द्वारा उपयोग किए जा रहे विशेष सी कंपाइलर पर लागू होते हैं, अगर एक से अधिक (आमतौर पर gcc / icc या लिनक्स पर समान, gcc / देशी cc कहीं और)। एक मानक प्रणाली getconf
पर c89
या c99
में लागू होना चाहिए $(getconf PATH)
, लेकिन व्यवहार में मैं किसी ऐसे विकल्प को स्थापित करने के बारे में चिंता करूंगा cc
जो विक्रेता c89
आवरण द्वारा चलाया गया हो ।
.
Regex में एक लापता है grep '^flags.*:.*\blm\b' /proc/cpuinfo
:। इसके अलावा यह केवल मेरे लिए -q
ध्वज के बिना काम करता है
.
: मेरे पास "शून्य या अधिक रिक्त स्थान" था, लेकिन वास्तव में एक टैब है। मैंने टैब के साथ ही अनुमति देने के लिए regexp को बदल दिया है। -q
ध्वज के साथ , कोई आउटपुट नहीं है, लेकिन कमांड की निकास स्थिति आपको बताती है कि क्या ध्वज मौजूद है। यदि आप आउटपुट चाहते हैं, तो -q
ध्वज को हटा दें ।
-q
ध्वज के बारे में पता नहीं था । Ty, अब काम करता है :)
आप उपयोग कर सकते हैं uname -a
और यह देखने के x86_64
लिए देख सकते हैं कि क्या आप 64-बिट चला रहे हैं। और कुछ (जहाँ तक मुझे पता है) और आप 32-बिट चल रहे हैं या आप इस तरह के रूप में गैर-पीसी हार्डवेयर पर हैं alpha
, sparc
या ppc64
।
alpha
, sparc64
, ppc64
, ...
प्रकार:
uname -a
यदि आपको मिलता है x86_64 GNU/Linux
तो आप 64 बिट कर्नेल चला रहे हैं। यदि आपको कुछ समान मिलता है, तो आप i386/i486/i586/i686
शायद 32 बिट कर्नेल चला रहे हैं
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