एक लिनक्स कमांड क्या है जिसे मैं 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]8632-बिट हैं जबकि x86_6464-बिट हैं। ध्यान दें कि कई आर्किटेक्चर पर, 64-बिट कर्नेल 32-बिट यूजरलैंड प्रोग्राम चला सकता है, इसलिए भले ही uname -m64-बिट कर्नेल दिखाता हो, लेकिन 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-architecturecore-2.0-ia32core-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