it-swarm-vi.tech

Làm cách nào để xác định xem một Linux đã cho là 32 bit hay 64 bit?

Khi tôi gõ uname -a, nó sẽ cho đầu ra sau.

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

Làm thế nào tôi có thể biết rằng hệ điều hành đã cho là 32 hoặc 64 bit?

Điều này hữu ích khi viết các tập lệnh configure, ví dụ: tôi đang xây dựng kiến ​​trúc nào?

466
Swapnonil Mukherjee

Hãy thử uname -m . Đó là thiếu uname --machine và nó xuất ra:

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

Mặt khác, không dành cho nhân Linux, mà dành cho CPU , bạn nhập:

cat /proc/cpuinfo

hoặc là:

grep flags /proc/cpuinfo

Trong tham số "flags", bạn sẽ thấy các giá trị khác nhau: xem " Các cờ trong/Proc/cpuinfo có nghĩa là gì? " Trong số chúng, một cái có tên lm: Long Mode ( x86-64 : AMD64, còn được gọi là Intel 64, tức là có khả năng 64 bit)

lm ==> 64-bit processor

Hoặc sử dụng lshw (như đã đề cập bên dưới bởi Rolf of Sachsen ), không có Sudo (chỉ để lấy chiều rộng cpu):

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

Lưu ý: bạn có thể có CPU 64 bit được cài đặt kernel 32 bit .
[.__.] (as ysdx đề cập đến câu trả lời của anh ấy/cô ấy , "Ngày nay, một hệ thống có thể là multiarch vì vậy dù sao nó cũng không có ý nghĩa. Bạn có thể muốn tìm mục tiêu mặc định của trình biên dịch ")

731
VonC

Nếu bạn đang chạy một nền tảng 64 bit, bạn sẽ thấy x86_64 hoặc một cái gì đó rất giống trong đầu ra từ name -a

Để có được tên phần cứng máy cụ thể của bạn chạy

uname -m

Bạn cũng có thể gọi

getconf LONG_BIT

trả về 32 hoặc 64

153
Thomas Watnedal

lscpuNAME _ sẽ liệt kê những thông tin này trong số các thông tin khác liên quan đến CPU của bạn:

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

Một lệnh hữu ích khác để xác định dễ dàng là như sau:

Chỉ huy:

getconf LONG_BIT

Câu trả lời:

  • 32, nếu HĐH là 32 bit
  • 64, nếu HĐH là 64 bit
33
user3207041

Lệnh

$ Arch    

tương đương với

$ uname -m

nhưng nhanh gấp đôi để gõ

12
Greg von Winckel
#include <stdio.h>

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

Tôi đã tự hỏi về điều này đặc biệt cho việc xây dựng phần mềm trong Debian (hệ thống Debian đã cài đặt có thể là phiên bản 32 bit với kernel 32 bit, thư viện, v.v. hoặc có thể là phiên bản 64 bit với nội dung được biên dịch cho chế độ tương thích 64 bit thay vì 32 bit).

Bản thân các gói Debian cần biết kiến ​​trúc của chúng là gì (tất nhiên) khi chúng thực sự tạo ra gói với tất cả siêu dữ liệu của nó, bao gồm kiến ​​trúc nền tảng, do đó, có một công cụ đóng gói xuất ra nó cho các công cụ đóng gói và tập lệnh khác được sử dụng, được gọi dpkg-architecture . Nó bao gồm cả những gì nó được cấu hình để xây dựng, cũng như Máy chủ hiện tại. (Thông thường đây là giống nhau.) Ví dụ đầu ra trên máy 64 bit:

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

Bạn chỉ có thể in một trong các biến đó hoặc thực hiện kiểm tra đối với các giá trị của chúng bằng các tùy chọn dòng lệnh thành dpkg - architecture.

Tôi không biết làm thế nào kiến ​​trúc dpkg suy ra kiến ​​trúc, nhưng bạn có thể xem tài liệu hoặc mã nguồn của nó (kiến trúc dpkg và phần lớn hệ thống dpkg nói chung là Perl).

11
Reed Hedges

Nếu bạn có HĐH 64 bit, thay vì i686, bạn có x86_64 hoặc ia64 trong đầu ra của uname -a. Trong đó bạn không có bất kỳ chuỗi nào trong hai chuỗi này; bạn có HĐH 32 bit (lưu ý rằng điều này không có nghĩa là CPU của bạn không phải là 64 bit).

10
Denis R.

Hệ thống đó là 32 bit. iX86 trong uname có nghĩa là kiến ​​trúc 32 bit. Nếu là 64 bit, nó sẽ trở lại

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
6
Louis Gerbarg

Ngày nay, một hệ thống có thể là đa quốc gia nên dù sao nó cũng không có ý nghĩa gì. Bạn có thể muốn tìm mục tiêu mặc định của trình biên dịch:

$ cc -v 2> & 1 | grep ^ Target [.__.] Target: x86_64-pc-linux-gn [.__.]

Bạn có thể thử biên dịch một thế giới xin chào:

$ echo 'int main () {return 0; } '| cc -xc - -o foo [.__.] $ file foo [.__.] foo: ELF 64-bit LSB thực thi, x86-64, phiên bản 1 (SYSV), được liên kết động, trình thông dịch/lib64/ld-linux- x86-64.so.2, đối với GNU/Linux 2.6.32, BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, không bị tước [.__.]
6
ysdx

Đối với câu trả lời "getconf LONG_BIT" .

Tôi đã viết một chức năng đơn giản để làm điều đó trong 'C':

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

Ý kiến ​​hay đấy, 'getconf'!

5
kaiwan

Bạn cũng có thể kiểm tra bằng biến môi trường:

echo $HOSTTYPE

Kết quả:

i386 -> 32 bit

x86_64 -> 64 bit

Trích xuất từ: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html

4
LinuxMaintwo

getconf sử dụng các cuộc gọi hệ thống ít nhất:

$ 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
3
user5859111

Trong Bash, sử dụng tràn số nguyên:

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

Nó hiệu quả hơn nhiều so với việc gọi một quá trình khác hoặc mở tệp.

3
Luchostein

Nếu bạn thay đổi 1 trái 32 và bạn nhận được 1, hệ thống của bạn là 32 bit. Nếu bạn thay đổi 1 trái 64 và bạn nhận được 1, hệ thống của bạn là 64 bit.

Nói cách khác,

if echo $((1<<32)) gives 1 then your system is 32 bit.

if echo $((1<<64)) gives 1 then your system is 64 bit.

2
Sandeep Giri

Kịch bản đơn giản để có được 64 bit hoặc 32 bit

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi
1
lakshmikandan
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
1
alex

Tôi không thể tin rằng trong tất cả thời gian này, không ai nhắc đến:

Sudo lshw -class cpu

để biết chi tiết về tốc độ, số lượng, kích thước và khả năng của phần cứng CPU.

1
Rolf of Saxony

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

Dựa trên thực tế rằng 64 bit thường là x86_64 và 32 bit là i686, v.v.

1
79man

Nếu một trong những hạn chế nghiêm trọng trong các nhị phân có sẵn (ví dụ: trong initramfs), các đồng nghiệp của tôi đã đề xuất:

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

Trên các hệ thống ALT Linux của tôi, i586 có /lib/ld-linux.so.2 và x86_64 có /lib64/ld-linux-x86-64.so.2.

1
Michael Shigorin