প্রদত্ত লিনাক্স 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, এটি ইন্টেল 64 নামেও পরিচিত, অর্থাৎ ie৪-বিট সক্ষম)

lm ==> 64-bit processor

অথবা ব্যবহারlshw (যেমন উল্লেখ নিচে দ্বারা স্যাক্সনি রল্ফ ), ছাড়া sudo(ঠিক cpu 'র প্রস্থ grepping জন্য):

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

দ্রষ্টব্য: আপনি 32-বিট কার্নেল ইনস্টল করে একটি 64-বিট সিপিইউ রাখতে পারেন
(যেমন ysdx উল্লেখ করেছে তাঁর / তার নিজের উত্তর , "আজকাল, একটি সিস্টেম হতে পারে multiarch তাই এটা জ্ঞান যাহাই হউক না কেন দেখা যায় না। আপনি কম্পাইলার ডিফল্ট লক্ষ্য এটি চাইতে পারেন")


3
গ্রেপ ফ্ল্যাগস / প্রোক / সিপুইনফো কেবল আপনাকে সিপিইউ 64৪ বিবিট হলেই বলে দেয়। আমি যেমন প্রশ্নটি বুঝতে পারি এটি ওএস সম্পর্কে ছিল। uname -m আমাকে কেবল "i686" বলে।
কিম স্টেবল

3
আমার 64 বিট হার্ডওয়ারে 32 বিট কার্নেল রয়েছে এবং 'আনমেম-এম' (ডেবিয়ান-এ) থেকে "x86_64" পান। আনমের জন্য ম্যান পেজটি বলে যে -m মেশিনের হার্ডওয়্যার নামটি দেখায়, তাই এটি সঠিক বলে মনে হয়।
টনি মায়ার

1
যদি আমি একটি 32 বিট কার্নেল 64-বিট মেশিন / প্রসেসর চালু রাখার জন্য, কি হবে আছে uname -i, uname -pএবং uname -mপ্রদর্শন করে?
রুবেন2020

4
টিএম এবং এলএম উভয় উপস্থিত থাকলে কী হবে?
জাভিয়ের নোভাোয়া সি।

4
@JavierNovoaC। tm (তাপীয় মনিটর) স্বয়ংক্রিয় ঘড়ি নিয়ন্ত্রণ নির্দেশ করে। এটি 32-বিট প্রসেসরের আলাদা করার কোনও সম্পর্ক নেই। প্রকৃতপক্ষে, lm (লং মোড) উপস্থিত থাকে কেবল এবং যদি আপনার কাছে 64৪-বিট সিপিইউ থাকে। সুতরাং আপনার কেবল lm এর উপর নির্ভর করা উচিত। অন্যথায় টমাস ওয়াটনেডালের দেওয়া উত্তর সবচেয়ে ভাল। এই উত্তরটি ঠিক ভুল এবং বহু লোককে বিভ্রান্ত করেছে 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 ম্যাকবুকগুলি মনে আসে, যেখানে ওএস 32-বিট তবে এটি 64-বিট অ্যাপ্লিকেশন চালাতে সক্ষম)
jww

1
uname -mজন্য QP এর দরকারী নয় configureযেমন ভুল ফলাফলের দিতে পারেন। getconf LONG_BITC লাইব্রেরি যা একটি নির্দিষ্ট দ্বারা জন্য সঠিক আকার নাও হতে পারে ডিফল্ট বিট আকার পেতে CC, কম্পাইলার।
user3710044

2
getconf LONG_BITএটি 32 বিগ সরবরাহ করতে পারে যা এটি 32 বিট অ্যাপ্লিকেশন হিসাবে নির্মিত হয়েছে (সাধারণত 32 বিট ব্যবহারকারীল্যান্ডে চলমান 64 বিট কার্নেল)।
ysdx

42

lscpu আপনার সিপিইউ সম্পর্কিত অন্যান্য তথ্যের মধ্যে এগুলি তালিকাভুক্ত করবে:

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

3
সিপিইউর শারীরিক ক্ষমতা আউটপুট দেয়, দরকারী তবে বর্তমান ওএসের বর্তমান ব্যবহারকারী স্থানের জন্য নির্ভরযোগ্য নয়।
user3710044

33

সহজ সংকল্পের জন্য আর একটি দরকারী আদেশ নিম্নরূপ:

COMMAND:

getconf LONG_BIT

উত্তর:

  • 32, ওএস 32 বিট হলে
  • 64, ওএস যদি 64 বিট হয়

2
Itanium 64-তে এইচপি-ইউএক্স 11.31i এর ক্ষেত্রে সত্য নয়: এই কমান্ডটি 32
গ্যাব্রিয়েল হটক্লোকক

আমি অনুমান করি যে এটি "64-বিট" দ্বারা প্রশ্নকর্তার অর্থটির উপর নির্ভর করে - এটি প্রাকৃতিক পূর্ণসংখ্যার প্রাকৃতিক আকার বোঝাতে ব্যবহৃত হয়েছিল, তবে এটি এখন প্রায়শই পরিবর্তে সম্বোধনের আকারকে বোঝায়।
টবি স্পিড 10 ই

12

আদেশ

$ arch    

সমতুল্য

$ uname -m

তবে টাইপ করতে দ্বিগুণ দ্রুত


2
সম্মত, তবে আমি নিশ্চিত যে টাইপিংয়ের গতি বেশিরভাগ বিকাশকারীদের পক্ষে সমস্যা নয়।
উইলিয়ামকারসওয়েল

2
এটি কার্নেল সমর্থন করতে পারে এমন প্রসেসের প্রকারগুলি প্রদান করে। Bit৪ বিট কার্নেলে একটি 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

আপনি those ভেরিয়েবলগুলির মধ্যে কেবল একটি মুদ্রণ করতে পারেন বা dpkg -architecture এ কমান্ড লাইন বিকল্পগুলির সাথে তাদের মানগুলির বিরুদ্ধে একটি পরীক্ষা করতে পারেন।

Dpkg- আর্কিটেকচারটি আর্কিটেকচারকে কীভাবে হ্রাস করে তা আমার কোনও ধারণা নেই তবে আপনি এর ডকুমেন্টেশন বা উত্স কোডটি দেখতে পারেন (ডিপি কেজি-আর্কিটেকচার এবং সাধারণভাবে ডিপি কেজি সিস্টেমের বেশিরভাগ অংশ পার্ল)।


আপনি কেবল ব্যবহার করতে পারেন: dpkg --architectureহোস্ট সিস্টেম আর্কিটেকচার পেতে, যার জন্য dpkg-devপ্যাকেজ ইনস্টল করার প্রয়োজন হয় না ।
লংগায়ার

এটি dpkg: error: unknown option --architecture14.04 এর dpkg 1.17.5 বুন্টুতে উত্পাদন করে । dpkg- আর্কিটেকচার (dpkg-dev ইনস্টল সহ) যদিও ঠিক কাজ করে।
টিম্বুর

2
কমান্ডটি dpkg --print-architectureচিরকাল থেকেই দেবিয়ানকে নিয়ে কাজ করেছে। এইটি কাজ করে তবে ডেবিয়ান এবং এটির ডেরিভেটিভসের মধ্যে সীমাবদ্ধ।
user3710044

11
#include <stdio.h>

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

2
লিনাক্সে stdio.h এর প্রয়োগ বিশদ হিসাবে কাজ করে তবে এটির আরও ভাল সমাধান বিদ্যমান যেমন: সীমাবদ্ধতা, ব্যবহার করবেন না।
user3710044

10

আপনার যদি আই 666 এর পরিবর্তে 64৪-বিট ওএস থাকে তবে আপনার কাছে x86_64বা ia64আউটপুট রয়েছে uname -a। এতে আপনার এই দুটি স্ট্রিংয়ের কোনওটি নেই; আপনার একটি 32-বিট ওএস রয়েছে (নোট করুন এর অর্থ এই নয় যে আপনার সিপিইউ 64-বিট নয়)।


1
এটি কার্নেল সমর্থন করতে পারে এমন প্রসেসের প্রকারগুলি প্রদান করে। Bit৪ বিট কার্নেলে একটি 32 বিট ব্যবহারকারী স্পেস চালানো এবং এমনকি যুক্তিসঙ্গত।
ব্যবহারকারী3710044

unameআউটপুটে অন্যান্য মান রয়েছে যা -৪-বিট ওএস নির্দেশ করে। সমস্ত পৃথিবী একটি x86 বা ইটানিয়াম নয় ...
টবি স্পিচ

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
এটি কার্নেল সমর্থন করতে পারে এমন প্রসেসের প্রকারগুলি প্রদান করে। Bit৪ বিট কার্নেলে একটি 32 বিট ব্যবহারকারী স্পেস চালানো এবং এমনকি যুক্তিসঙ্গত।
user3710044

6

আজকাল, একটি সিস্টেম বহুবিধ হতে পারে তাই এটি যেভাবেই বোঝা যায় না। আপনি সংকলকের ডিফল্ট লক্ষ্য সন্ধান করতে পারেন:

$ সিসি-ভি 2> & 1 | গ্রেপ ^ লক্ষ্য
লক্ষ্য: x86_64-pc-linux-gn

আপনি একটি হ্যালো ওয়ার্ড সংকলন করতে চেষ্টা করতে পারেন:

$ প্রতিধ্বনি 'int প্রধান () {রিটার্ন 0; } '| সিসি-এক্সসি - -ও ফু
$ ফাইল ফু
foo: ELF 64-বিট এলএসবি এক্সিকিউটেবল, x86-64, সংস্করণ 1 (SYSV), গতিশীলভাবে সংযুক্ত, জিএনইউ / লিনাক্স 2.6.32, বিল্ডআইডি [sha1] এর জন্য দোভাষী /lib64/ld-linux-x86-64.so.2 = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, ছিড়ে না

1
যেহেতু cc -v | grep …যাহাই হউক না কেন সংকলক-নির্দিষ্ট, তাই কেবল একটি ব্যবহার করতে পারেন cc -dumpmachine, যার জন্য গ্রেপিংয়ের প্রয়োজন হয় না এবং এটি কেবল জিসিসি দ্বারা সমর্থিত নয়।
আন্তন স্যামসনভ

প্রদত্ত যে প্রশ্নটি এটি একটি কনফিগার স্ক্রিপ্টের জন্য পরামর্শ দেয় এটি সম্ভবত এটি এখানে সবচেয়ে দরকারী এবং প্রাসঙ্গিক উত্তর। এটি আপনার সমস্ত ক্ষেত্রে যা চান তা করবে ((৪-বিট ওএসের একটি 32-বিট ব্যবহারকারী ক্রোট, একটি বিদেশী আর্কিটেকচারের জন্য ক্রস-সংকলন এবং বাকী অংশ সহ)।
টবি স্পিড 10 ই

5

"Getconf LONG_BIT" উত্তরটি সম্মানের সাথে ।

আমি এটি 'সি' তে করার জন্য একটি সাধারণ ফাংশন লিখেছিলাম:

/*
 * 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;
    }
}

ভাল ধারণা, 'গেটকনফ'!


5
বোকা ধারণা! সি CHAR_BIT*sizeof(void*)বা ব্যবহার করুন__WORDSIZE
সিলিং করুন

3
না এটা বোকা নয়। আপনার কাছে একটি 32-বিট এক্সিকিউটেবল থাকতে পারে এবং উদাহরণস্বরূপ, সিস্টেমটি 64৪-বিট একটিকে সমর্থন করবে কিনা তা আপনি বের করতে চান।
লুডভিগ এ। নরিন

GNU-C লাইব্রেরিতে একটি দীর্ঘ ডিফল্ট দৈর্ঘ্য পায় .. এটি এক কাজ করে!
user3710044

1
এটি আসলে ভুল, কারণ আপনি যদি 64৪ বিট কার্নেল, অথবা এমনকি এক্স 32 ইউজারস্পেসে 32 বিট ইউজারস্পেস চালাচ্ছেন তবে এটি বলবে যে ওএস 32 বিট।
রুসলান

এটা দৃঢ়ভাবে ব্যবহার না করার পরামর্শ দেওয়া হয় fgets: stackoverflow.com/questions/16323185/...
ceving

4

আপনি পরিবেশের পরিবর্তনশীল ব্যবহার করেও পরীক্ষা করতে পারেন:

echo $HOSTTYPE

ফলাফল:

i386 -> 32 বিট

x86_64 -> 64 বিট

থেকে নেওয়া হয়েছে: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-BS.html


1
এটি /bin/bashপরিবেশে পরিবর্তনশীল নয় বলে এটি একটি বিল্ট ইন ভেরিয়েবল। আপনি যদি ইতিমধ্যে বাশের উপর নির্ভরশীল থাকেন তবে এটি ঠিকঠাক কাজ করে। যাইহোক, ফলও হতে পারে i386, i486, i586, i686এবং অন্যদের তাই সতর্কতা অবলম্বন করা।
user3710044

3

বাশে, পূর্ণসংখ্যার ওভারফ্লো ব্যবহার করে:

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

এটি অন্য প্রক্রিয়া বা ফাইল খোলার চেয়ে অনেক বেশি দক্ষ।


2
টাইপটি পাওয়া যায় তবে বাশটি (কি?)
Bit৪ বিট ইনট

2
২০০bian সাল থেকে দেবিয়ানের বাশ 64৪ বিটের পাটিগণিত ব্যবহার করতে সংকলিত হয়েছে, সম্ভবত এর চেয়ে আগে earlier এই উত্তরটি স্ট্যাকওভারফ্লো বিদ্যমান থাকার আগে থেকেই ভেঙে গেছে।
পিটার কর্ডেস

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

যদি আপনি 32 দ্বারা 1 বামে স্থানান্তর করেন এবং আপনি 1 পান তবে আপনার সিস্টেমটি 32 বিট। আপনি যদি 64 এর 1 বামে স্থানান্তর করেন এবং আপনি 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% চলমান 100 টি নিশ্চিত হয়েছে।
জেসিএম

1

যদি কোনও উপলব্ধ বাইনারিগুলিতে গুরুতরভাবে সীমাবদ্ধ থাকে (যেমন: থ্রিমারফগুলিতে), আমার সহকর্মীরা পরামর্শ দিয়েছেন:

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

আমার ALT লিনাক্স সিস্টেমগুলিতে, i586 এর রয়েছে /lib/ld-linux.so.2এবং x86_64 রয়েছে /lib64/ld-linux-x86-64.so.2


আমি তাদের মধ্যে তিনটি পেয়েছি, one৪ জনর জন্য একটি 64৪ এর জন্য এবং একটি এমএক্স 32 এর জন্য।
user3710044

হ্যাঁ, যদি এটি প্রচুর পরিমাণে 64-বিট লাইব্রেরি না ফেরায়, তবে এটি 32 বিট ওএস চলছে: ls -aR | গ্রেপ 64 | grep -v proc
জেসিএম

1
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set

আমি দুটি লাইন পেয়েছি, এটির সাথে একটি সেট করে set
user3710044

1

আমি বিশ্বাস করতে পারি না যে এই সময়ে, কেউই উল্লেখ করেনি:

sudo lshw -class cpu

সিপিইউ হার্ডওয়্যারের গতি, পরিমাণ, আকার এবং ক্ষমতা সম্পর্কে বিশদ পেতে।


1

Script৪ বিট বা ৩২ বিট পাওয়ার জন্য সাধারণ স্ক্রিপ্ট

        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"

-৪-বিট সাধারণত x86_64এবং 32-বিট i686ইত্যাদির উপর ভিত্তি করে


-6

প্রথমে আপনাকে ভার্চুয়াল বক্স ডাউনলোড করতে হবে। তারপরে নতুন এবং একটি 32-বিট লিনাক্স নির্বাচন করুন। তারপরে লিনাক্সটি ব্যবহার করে বুট করুন। যদি এটি বুট হয় তবে 32 বিট যদি এটি না হয় তবে এটি একটি 64 বিট।


2
সিস্টেমটি 32 বা 64 বিট কিনা তা নির্ধারণের জন্য এটি একটি সত্যই বহুল প্রচারিত উপায়।
মার্লার

তবে এটি সত্যই এই সমস্যাটি সমাধান করার একটি উপায়। সুতরাং আমি এটি চিহ্নিত করব।
ফিরো

এটি আমাকে বিজোড় সংখ্যাগুলি বলার একটি উপায়ের কথা মনে করিয়ে দেয়: একটি গণিত এটিকে দুটি দ্বারা বিভক্ত করার পরে অবশিষ্টটির দিকে নজর দেবে; একজন প্রোগ্রামার সর্বনিম্ন তাৎপর্যপূর্ণ বিটটি দেখবে; এমএস এসকিউএল বিশেষজ্ঞ দুটি টেবিল তৈরি করবেন, একটি সংখ্যার জন্য এবং একটি
বিজোড়ের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.