Từ trình bao và không có quyền root, làm cách nào tôi có thể xác định phiên bản Red Hat Enterprise Linux nào tôi đang chạy?
Lý tưởng nhất là tôi muốn có cả phiên bản phát hành chính và phụ, ví dụ: RHEL 4.0 hoặc RHEL 5.1, v.v.
Từ trình bao và không có quyền root, làm cách nào tôi có thể xác định phiên bản Red Hat Enterprise Linux nào tôi đang chạy?
Lý tưởng nhất là tôi muốn có cả phiên bản phát hành chính và phụ, ví dụ: RHEL 4.0 hoặc RHEL 5.1, v.v.
Câu trả lời:
Bạn có thể sử dụng lsb_release
lệnh trên các bản phân phối Linux khác nhau:
lsb_release -i -r
Điều này sẽ cho bạn biết Phân phối và Phiên bản và chính xác hơn một chút so với việc truy cập các tệp có thể hoặc không được sửa đổi bởi quản trị viên hoặc gói phần mềm. Cũng như làm việc trên nhiều distro.
Đối với RHEL, bạn nên sử dụng:
cat /etc/redhat-release
lsb_release -i -r
-bash: lsb_release: không tìm thấy lệnh. Tuy nhiên, cat /etc/redhat-release
Red Hat Enterprise Linux Server phát hành 5.6 (Tikanga)
Bạn có thể xem nội dung của / etc / redhat-phát hành, nó sẽ trông giống như thế này:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
Các nội dung là khác nhau cho một hệ thống RHEL thực tế. Kỹ thuật này hoạt động trên tất cả các dẫn xuất RedHat, bao gồm cả CentOS, Fedora và các công cụ khác.
lsb_release
là điều đầu tiên để thử, nhưng vì nó có thể không được cài đặt, nhìn vào các tệp là một Kế hoạch B. tốt
Tôi thích sử dụng tập tin / etc / vấn đề.
$ cat /etc/issue
Tôi đã thấy nhiều tình huống trong đó / etc / redhat-phát hành đã được sửa đổi để đáp ứng các yêu cầu tương thích phần mềm (ví dụ: các đại lý quản lý của Dell hoặc HP).
/etc/issue
cũng hoạt động trên các HĐH khác, chẳng hạn như Debian & Ubuntu và hoạt động với các HĐH Linux không tuân thủ Cơ sở Tiêu chuẩn Linux và các HĐH nhẹ không cài đặt tiện ích lsb *.
/etc/issue
là có nghĩa là được phân tích cú pháp bởi agetty , thay thế các chuỗi thoát bằng thông tin thích hợp. Nếu bạn chỉ cat
có nó, kết quả có thể bị áp đảo. Trên Fedora, người ta nhận được Fedora release 20 (Heisenbug) Kernel \r on an \m (\l)
, điều này cho bạn biết điều gì đó nhưng trên RHEL7, người ta chỉ nhận được \S Kernel \r on an \m
.
/etc/issue
có thể được thay thế bởi quản trị viên cục bộ và do đó không phải là nguồn thông tin đáng tin cậy.
Cách đáng tin cậy nhất khi lsb_release
không được cài đặt là:
# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server
# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6
Trên các cài đặt tối thiểu, lsb_release
bị thiếu.
Để làm việc này cũng với bản sao Red Hat (tín dụng đi vào bình luận):
# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')
Hoặc, dưới dạng một lệnh đơn (thay vì hai "vòng / phút" đang được thực thi):
# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'
Sử dụng sed
/ cut
và văn bản khác thao tác các công cụ UNIX để có được những gì bạn muốn.
rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)'
sl dành cho Khoa học Linux; nếu bạn biết tên đúng cho các bản dựng lại khác của RHEL, có thể bình luận bên dưới. Cảnh báo - không được thử nghiệm rộng rãi.
rpm -qa | grep release
thậm chí còn dễ dàng hơn
Giả sử nó thực sự là một bản phát hành Red Hat (không phải Centos):
rpm -q redhat-release
Hoặc chỉ cần chạy:
uname -r
Và lập bản đồ đầu ra. Hạt nhân 2.6.9 là RHEL4, hạt nhân 2.6,18 là RHEL5. Nếu cần, bạn có thể ánh xạ phiên bản đầy đủ tới các bản phát hành cập nhật cụ thể từ Red Hat (tức là 2.6.9-89 là RHEL5 U4).
rpm -q redhat-release
chỉ trả lại package redhat-release is not installed
cho tôi và uname -r
chỉ cho tôi bản phát hành kernel.
Tôi thích hostnamectl
:
$ hostnamectl
Static hostname: xxxxxx.xxx.xxx
Icon name: computer-server
Chassis: server
Machine ID: 3e3038756eaf4c5c954ec3d24f35b13f
Boot ID: 958452e0088b4191a4ea676ebc90403b
Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.5:GA:server
Kernel: Linux 3.10.0-862.3.3.el7.x86_64
Architecture: x86-64
Tôi khá thích sử dụng /etc/os-release
tệp trong bản phát hành RPM:
# yum whatprovides /etc/os-release
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
* base: dl.za.jsdaav.net
* extras: dl.za.jsdaav.net
* updates: dl.za.jsdaav.net
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo : base
Matched from:
Filename : /etc/os-release
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo : @anaconda
Matched from:
Filename : /etc/os-release
Tập tin này có thể có nguồn gốc trong các tập lệnh, như:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Nếu bạn muốn chỉ lấy số phiên bản, phần sau đây ngắn và đơn giản như tôi có thể lấy.
Đã thử nghiệm trên rrc 6.7, rrc 7.2, debian 8.3 và ubfox 14.04:
lsb_release -s -r | cut -d '.' -f 1
Đối với một ví dụ thực tế, giả sử bạn muốn thử nghiệm phiên bản chính và phân phối nhỏ và thực hiện mọi việc dựa trên điều đó:
#!/bin/bash
major=$(lsb_release -s -r | cut -d '.' -f 1)
minor=$(lsb_release -s -r | cut -d '.' -f 2)
if (( "$major" >= 7 ))
then
echo "Do stuff, OS major version is $major"
echo "OS minor version is $minor"
else
echo "Do other things"
echo "Your version is $major.$minor"
fi
Một sự xuất hiện muộn này, nhưng tôi đã rất vui khi cố gắng tìm ra phiên bản RHEL trên một số nút từ xa. Vì vậy, nếu bạn có một loạt máy chủ sử dụng cùng một mật khẩu (tôi biết, tôi biết ...) thì đây là một cách nhanh chóng và bẩn thỉu để kiểm tra phiên bản RedHat:
Tạo một kịch bản mong đợi
vim server-version.sh
Tập lệnh mong đợi để kiểm tra phiên bản RedHat chính trên nhiều máy chủ từ xa
#!/usr/bin/expect
log_user 0
spawn ssh -l root [lindex $argv 0]
expect "assword:"
send "sUp3rS3cr3tP4ssW0rd^\r"
expect "# "
log_user 1
send "cat /etc/redhat-release\r"
expect "*#"
log_user 0
send "exit\n"
Chạy tập lệnh cho tất cả các nút của bạn
[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;
Đầu ra
server1: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server1 ~]#
server2: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server2 ~]#
...