2012-04-13 6 views
7

के लिए 32-बिट/64-बिट कर्नेल की जांच कैसे करें मुझे एक बैश स्क्रिप्ट लिखनी होगी जहां मुझे यह जांचना होगा कि लिनक्स कर्नेल 32 बिट या 64 बिट है या नहीं।लिनक्स

मैं uname -एक आदेश का उपयोग कर रहा हूँ, और यह मुझे x86_64 परिणाम देता है। लेकिन मेरा मानना ​​है कि मैं इसे सामान्य तरीके से उपयोग नहीं कर सकता क्योंकि अगर कोई गैर x86 आर्किटेक्चर का उपयोग कर रहा है तो परिणाम भिन्न हो सकता है।

लिनक्स के लिए 32-बिट/64-बिट कर्नेल की जांच कैसे करें?

+0

जब आप "स्थापना" कहते हैं, तो क्या आपका मतलब कर्नेल है? क्योंकि आप 32-बिट स्थापना के साथ 64-बिट कर्नेल का उपयोग कर सकते हैं। –

+0

हाँ ... कर्नेल ... धन्यवाद – VJS

उत्तर

-2

Grep uname उत्पादन में '64 'के लिए

uname -a | grep 64 
+2

यदि कर्नेल 64 बार संकलित किया गया था, तो इससे झूठी सकारात्मक हो जाएगी। यदि सर्वर का नाम 'blade64A' है तो डिट्टो। –

+1

'uname -i | का प्रयोग करें इसके बजाय grep 64'। –

+0

@ डेविड श्वार्टज़: मैं इसमें थोड़ा सा नया हूं और आपका विचार नहीं मिला। क्या आप थोड़ा सा समझा सकते हैं। अनेक अनेक धन्यवाद !! – VJS

5

आप एक long int के आकार के लिए प्रणाली को क्वेरी कर सकते हैं:

getconf LONG_BIT 

लेकिन मैं यकीन नहीं है अगर यह करने के लिए पूरी तरह से पोर्टेबल है सभी अलग वास्तुकला।

1

/proc/cpuinfo में एलएम (लंबा मोड) ध्वज के लिए खोजें। यदि यह सच है, तो इसका मतलब है कि आपके पास 64 बिट प्रोसेसर है। एक साधारण grep आपको यह जानकारी देना चाहिए।

कर्नेल संस्करण के संबंध में, आप हमेशा अनमोल-ए सूचना पर grep कर सकते हैं। अनमोल प्रोग्राम का स्रोत ढूंढना बेहतर होगा ताकि दुर्भावनापूर्ण होस्टनाम के कारण हम विसंगति को छूट सकें।

+2

यह केवल i386/x86_64 पर काम करेगा। मैंने एक बार बिजली मशीन पर काम किया और वहां '/ proc/cpuinfo' का प्रारूप पूरी तरह से अलग था, और अधिक कॉम्पैक्ट और इन तरह झंडे नहीं थे। –

+0

@above/proc/cpuinfo भौतिक बिट्स और वर्चुअल बिट्स की संख्या देता है। क्या आपको बिजली की मशीन पर काम करते समय यह जानकारी मिलती है ?? हमारे लिए अगला कदम इस जानकारी को समझना है। मैं अपने हिस्से पर कोशिश कर रहा हूँ। एक और बात: मुझे लगता है कि हम मशीन के शब्द आकार को निर्धारित करने के लिए int में int के आकार का उपयोग कर सकते हैं। –

+0

@prathmeshkallurkar मुझे उस मशीन तक पहुंच नहीं है, लेकिन मुझे याद है कि जानकारी वास्तव में संक्षिप्त थी - जैसे प्रति सीपीयू 4 लाइनें, केवल मॉडल नाम और शायद ही कुछ और। यहां तक ​​कि यदि उपलब्ध बिट्स पर जानकारी थी, तो यह निश्चित रूप से x86 की तुलना में एक अलग प्रारूप में था। –

1

मैं निम्नलिखित के साथ आया था। यह मानता है कि init का उपयोग किया जाता है (कुछ डिस्ट्रोज़ अन्य लोडर पर स्विच हो जाते हैं, लेकिन उचित रूप से उपयोग किए जाने वाले लोगों की सूची प्राप्त करना आसान होना चाहिए) और आप ELF का उपयोग करते हैं, a.out या अन्य आजकल विदेशी निष्पादन योग्य प्रारूप का उपयोग नहीं करते हैं। ये ज्यादातर प्रणालियों के लिए सचेत धारणाएं प्रतीत होते हैं, लेकिन शायद उन्हें एम्बेडेड सिस्टम, आदि में तोड़ा जा सकता है। फिर भी, सामान्य विचार को अनुकूलित करना संभव होना चाहिए (init प्रक्रिया या समकक्ष तक पहुंचें और file का उपयोग करके अपने सीढ़ी की जांच करें)। यदि आप रूट के रूप में चल रहे हैं, तो फ़ाइल के पथ से गुजरने के बजाय, आप file $(sudo readlink -e /proc/1/exe) का उपयोग कर सकते हैं (पीआईडी ​​1 init शायद इसके पथ के बारे में कुछ भी मानने से अधिक पोर्टेबल है)।

if file /sbin/init | fgrep 'ELF 64-bit' &>/dev/null; then 
    echo "64-bit" 
else 
    echo "not 64-bit" 
fi 
+0

इस दृष्टिकोण के साथ समस्या यह है कि 64-बिट कर्नेल चलाते समय 32-बिट निष्पादन योग्य का उपयोग करना संभव है। – Job

+0

@ जॉब आप सही हैं, लेकिन 'init' (पीआईडी ​​1) को पहली प्रक्रिया के रूप में निष्पादित किया जाता है, इसलिए मुझे लगता है कि यह पूरी तरह से सिस्टम के गठबंधन को निर्धारित करता है। –

+0

वैसे मुझे लगता है कि तकनीकी रूप से 64-बिट कर्नेल पर 'init' 32-बिट होने के लिए भी संभव होना चाहिए, लेकिन किसी भी" सामान्य "सिस्टम पर आपका दृष्टिकोण ठीक होना चाहिए। – Job

15

प्रश्न यह है कि आप यह जानकर क्या हासिल करना चाहते हैं कि आप 32 या 64 पर हैं या नहीं? एक hypothetical 128-बिट पर्यावरण पर होने के क्या परिणाम हैं? और एन-बिहार के लिए वास्तव में किस भाग का परीक्षण किया जा रहा है? एक सीपीयू 64-बिट मोड में चलने का समर्थन कर सकता है, लेकिन पर्यावरण 32-बिट हो सकता है। इसके अलावा, पर्यावरण खुद मिश्रित मोड हो सकता है; 32-बिट उपयोगकर्ता स्पेस के साथ एक 64-बिट कर्नेल चलाने पर विचार करें (क्लासिक आरआईएससी के मुट्ठी भर में किया गया)। और फिर, क्या होगा यदि उपयोगकर्ता स्थान homogenous bitness/निष्पादन योग्य प्रारूप का नहीं है? यही कारण है कि getconf LONG_BIT उपयोग करने के लिए समान रूप से व्यर्थ है, क्योंकि यह इस पर निर्भर करता है कि इसे कैसे संकलित किया गया था।

$ /rt64/usr/bin/getconf LONG_BIT 
64 
$ /usr/bin/getconf LONG_BIT 
32 
$ file /usr/bin/getconf /rt64/usr/bin/getconf 
/usr/bin/getconf:  ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 
/rt64/usr/bin/getconf: ELF 64-bit MSB executable, SPARC V9, relaxed memory ordering, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 
$ uname -m 
sparc64 
0

निर्भर आप जो खोज रहे हैं, मैं मशीन 64 बिट proc पर 32 बिट में स्थापित किया है, ऊपर के सभी मेरे मामले

में 32 बिट वापसी होगी लेकिन अगर मैं lshw पर हार्डवेयर को देखो, उबंटू (एलएसडब्ल्यू-सी सीपीयू), सीपीयू का विवरण स्पष्ट रूप से दिखाता है कि मेरे पास 64 बिट सीपीयू है, इसलिए मैं उबंटू का 64 बिट संस्करण स्थापित कर सकता था।

/proc/cpuinfo हार्डवेयर के बारे में जानकारी का भी अच्छा स्रोत है, जैसे एलएम झंडे लंबे मोड के लिए खड़े हैं।

एक अच्छा दिन है। जैक।