it-swarm-vi.com

Làm thế nào để xác định kiến ​​trúc nhân Linux?

uname -m cho i686 và uname -m cung cấp đầu ra i686 i386 trong máy phát hành Red Hat Enterprise Linux Server 5.4 (Tikanga). Tôi cần cài đặt Oracle Database 10g Release 2 trên máy đó. Vì vậy, làm thế nào tôi có thể quyết định liệu kiến ​​trúc kernel là 32 bit hay 64 bit?

105
user2914

i386 và i686 đều là 32 bit.
[.__.] x86_64 là 64 bit

ví dụ cho 64 bit:

[email protected]:~$ uname -a  
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

CHỈNH SỬA:
[.__.] Xem là linux của tôi ARM 32 hoặc 64 bit? cho ARM

99
Behrooz

Thật đơn giản! Sử dụng lệnh Arch.

49
PHPst

@ Behrooz là chính xác. Thật không may uname yêu cầu bạn phải biết kiến ​​trúc. Trên thực tế, tôi đang tìm kiếm một danh sách các kiến ​​trúc và tôi đã tìm thấy bài viết này trả lời câu hỏi của bạn. Trong mối quan hệ, liên quan uname -m:

x86_64 GNU/Linux chỉ ra rằng bạn đã chạy kernel Linux 64 bit. Nếu bạn sử dụng xem i386/i486/i586/i686 thì đó là kernel 32 bit.

Để xác định xem phần cứng có khả năng chạy kernel 64 bit hay không

grep flags /proc/cpuinfo

Tìm kiếm những điều sau trong đầu ra (tất cả các cờ được lấy từ câu trả lời stackoverflow này cho cùng một câu hỏi)

  • lm cờ có nghĩa là cpu chế độ dài - CPU 64 bit
  • tm cờ có nghĩa là Chế độ được bảo vệ - CPU 32 bit
  • rm cờ có nghĩa là Chế độ thực - CPU 16 bit
32
xenoterracide

(EDIT: câu trả lời này là SAI. Cảm ơn bình luận của @ Lizardx)

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

if ((1<<32)); then
  echo 64bits
else
  echo 32bits
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.

21
Luchostein

Dành cho Debian:

Trên PC của tôi

[.__.] ~> dpkg --print-architecture [.__.] AMD64 [.__.]
[.___]

Quả mâm xôi của tôi 2

[.__.] ~> dpkg --print-architecture [.__.] armhf [.__.]
18

Cách đơn giản nhất là chạy:

getconf LONG_BIT

sẽ xuất 64 hoặc 32 tùy thuộc vào việc nó là 32 hay 64 bit.

ví dụ:

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

sử dụng syscap từ dự án Formake

syscap cho phép thăm dò nhiều thuộc tính hệ thống và phụ thuộc kiểm tra. Nó là một kịch bản Shell di động.

Nhận kiến ​​trúc CPU:

syscap info -Arch

Nhận tên và phiên bản kernel:

syscap info -kernel -kernver
2
Alex

Một cách khác là kiểm tra kiến ​​trúc một số tệp hệ thống đã được biên dịch cho, như

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
1
minaev

Hoặc bạn có thể sử dụng cách của lệnh name trong nội bộ nếu bạn muốn tự mình thực hiện một số nội dung:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
0
Meow

Đây là một phương pháp khác sử dụng uname.

Từ man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

Nếu bạn đang tìm kiếm một lớp lót đơn giản, đây là giải pháp đáng tin cậy nhất mà tôi đã tìm thấy trả về 64 hoặc 2. Sẽ không quan tâm nếu bạn đang chạy ARM hay không, và nó sẽ hoạt động trên mọi hệ thống sử dụng bash hoặc sh.

Coi chừng, điều này sẽ cho rằng hệ thống là 32 bit hoặc 64 bit. Xem giải thích của tôi dưới đây nếu bạn cần phát hiện kiến ​​trúc 8- 16- hoặc một số bit khác.

[$ ((0xffffffff)) -eq -1] && tiếng vang 32 || tiếng vang 64

Có gì ở đây?
[.___.] Logic rất đơn giản và tất cả tập trung vào cách máy tính lưu trữ các số nguyên đã ký. Kiến trúc 32 bit chỉ có 32 bit mà nó có thể sử dụng để lưu trữ các số nguyên đã ký trong khi kiến ​​trúc 64 bit có 64 bit! Nói cách khác, tập hợp các số nguyên có thể được lưu trữ là hữu hạn. Một nửa bộ này đại diện cho số âm và một nửa đại diện cho số dương. Số nguyên đã ký bằng -1 được biểu diễn dưới dạng số lớn nhất có thể được lưu trữ trong một số bit nhất định cho kiến ​​trúc đó. Trên hệ thống 32 bit, -1 có thể được biểu thị bằng giá trị hex 0xFFFFFFFF (là 32 bit nhị phân, tất cả đều bằng 1). Trên hệ thống 64 bit, 0xFFFFFFFF chuyển thành 4.294.967.295, cơ sở 10 trong khi 0xFFFFFFFFFFFFFFFF là đại diện cho -1). Bạn có thể thấy cách điều này sẽ dễ dàng chia tỷ lệ cho các hệ thống tương ứng 8- hoặc 16 bit, tương đương -1 tại 0xFF và 0xFFFF, tương ứng.

0
b_laoshi