Có cách nào để xác định phiên bản nào (phiên bản phân phối & kernel, tôi cho là) của Linux đang chạy (từ dòng lệnh), hoạt động trên bất kỳ hệ thống Linux nào không?
Có cách nào để xác định phiên bản nào (phiên bản phân phối & kernel, tôi cho là) của Linux đang chạy (từ dòng lệnh), hoạt động trên bất kỳ hệ thống Linux nào không?
Câu trả lời:
Hạt nhân được phát hiện phổ biến với uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
Thực sự không có cách phân phối chéo nào để xác định phân phối và phiên bản nào bạn đang sử dụng. Đã có những nỗ lực để làm cho điều này phù hợp, nhưng cuối cùng nó thay đổi, thật không may. Các công cụ LSB cung cấp thông tin này, nhưng trớ trêu thay không được cài đặt theo mặc định ở mọi nơi. Ví dụ về hệ thống Ubuntu 9.04 với lsb-release
gói được cài đặt:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
Mặt khác, phương pháp phổ biến gần nhất là kiểm tra tệp. Chúng tồn tại trên hầu hết các nền tảng phổ biến và trên các công cụ phái sinh của chúng (ví dụ, Red Hat và CentOS)./etc/something-release
Dưới đây là một số ví dụ.
Ubuntu có /etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Nhưng Debian có /etc/debian_version
:
$ cat /etc/debian_version
5.0.2
Fedora, Red Hat và CentOS có:
Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)
Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)
newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Gentoo:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
Hiện tại tôi không có sẵn hệ thống SUSE, nhưng tôi tin là có /etc/SuSE-release
.
Slackware có /etc/slackware-release
và / hoặc /etc/slackware-version
.
Mandriva có /etc/mandriva-release
.
Đối với hầu hết các bản phân phối phổ biến sau đó,
$ cat /etc/*{release,version}
sẽ thường xuyên làm việc Cài đặt "máy chủ" bị tước và barebones có thể không có gói 'phát hành' cho bản phân phối được cài đặt.
Ngoài ra, hai chương trình của bên thứ 3 bạn có thể sử dụng để tự động nhận thông tin này là Ohai và Facter .
Lưu ý rằng nhiều bản phân phối có loại thông tin này trong /etc/issue
hoặc /etc/motd
, nhưng một số chính sách bảo mật và thực tiễn tốt nhất cho thấy rằng các tệp này nên chứa các biểu ngữ thông báo truy cập.
Liên quan: Làm thế nào để tìm ra phiên bản của gói phần mềm được cài đặt trên nút? , con rối .
Bạn cũng có thể thử:
$ cat /etc/issue
Nó thường (không phải luôn luôn, mặc dù) sẽ cho bạn biết phân phối bạn đang sử dụng. /etc/issue
là tập tin được sử dụng cho màn hình đăng nhập.
\S[newline]Kernel \r on an \m
Hạt nhân: uname -a
cat /etc/os-release
ở mức tối thiểu cho Ubuntu, Fedora và OpenSUSE.
Không hoạt động cho OS X ít nhất cho đến 10.9 (Mavericks). Sử dụng sw_vers thay thế.
OpenSUSE đã phát hành cat / etc / SuSE cho đến ngày 13.1 nhưng không được dùng để phát hành os.
Redhat 6.1 có cat / etc / redhat-phát hành
lsb_release -a && uname -r
Đây vấn đề cũng có thể được giải quyết bằng Python với các platform
mô-đun :
Sử dụng platform()
chức năng:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
Lệnh trên trả về một chuỗi xác định nền tảng cơ bản với càng nhiều thông tin hữu ích càng tốt.
Hoặc sử dụng uname()
chức năng:
python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-amd64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')
Các lệnh trên trả về một namedtuple()
chứa sáu thuộc tính: system
, node
, release
, version
, machine
, và processor
.
Hoặc sử dụng dist()
chức năng:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
Lệnh cuối cùng cố gắng xác định tên của tên phân phối HĐH Linux , nhưng nó không được chấp nhận vì Python 3.5 và sẽ bị xóa trong Python 3.8 .