จากเชลล์และไม่มีสิทธิ์รูทฉันจะทราบได้อย่างไรว่า Red Hat Enterprise Linux เวอร์ชันใดที่ฉันกำลังใช้งานอยู่
เป็นการดีที่ฉันต้องการรับทั้งรุ่นใหญ่และรุ่นรองเช่น RHEL 4.0 หรือ RHEL 5.1 เป็นต้น
จากเชลล์และไม่มีสิทธิ์รูทฉันจะทราบได้อย่างไรว่า Red Hat Enterprise Linux เวอร์ชันใดที่ฉันกำลังใช้งานอยู่
เป็นการดีที่ฉันต้องการรับทั้งรุ่นใหญ่และรุ่นรองเช่น RHEL 4.0 หรือ RHEL 5.1 เป็นต้น
คำตอบ:
คุณสามารถใช้lsb_release
คำสั่งกับลีนุกซ์รุ่นต่างๆได้:
lsb_release -i -r
สิ่งนี้จะบอกคุณเกี่ยวกับการแจกจ่ายและเวอร์ชั่นและมีความแม่นยำมากกว่าการเข้าถึงไฟล์ที่อาจมีหรือไม่มีการแก้ไขโดยผู้ดูแลระบบหรือแพ็คเกจซอฟต์แวร์ รวมถึงทำงานข้ามหลาย distros
สำหรับ RHEL คุณควรใช้:
cat /etc/redhat-release
lsb_release -i -r
-bash: lsb_release: ไม่พบคำสั่ง อย่างไรก็ตาม cat /etc/redhat-release
Red Linux Enterprise Linux Server รีลีส 5.6 (Tikanga)
คุณสามารถดูเนื้อหาของ / etc / redhat-release ซึ่งจะมีหน้าตาดังนี้:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
เนื้อหาต่างกันสำหรับระบบ RHEL ที่แท้จริง เทคนิคนี้ใช้ได้กับอนุพันธ์ RedHat ทั้งหมดรวมถึง CentOS, Fedora และอื่น ๆ
lsb_release
เป็นสิ่งแรกที่จะลอง แต่เนื่องจากว่าอาจจะไม่ได้ติดตั้งกำลังมองหาที่ไฟล์เป็นแผนบีดี
ฉันชอบใช้ไฟล์ / etc / issue
$ cat /etc/issue
ฉันได้เห็นหลายสถานการณ์ที่ / etc / redhat-release ได้รับการแก้ไขเพื่อให้เป็นไปตามข้อกำหนดความเข้ากันได้ของซอฟต์แวร์ (ตัวอย่างเช่น Dell หรือตัวแทนการจัดการของ HP)
/etc/issue
ยังทำงานบนระบบปฏิบัติการอื่น ๆ เช่น Debian & Ubuntu และทำงานร่วมกับระบบปฏิบัติการ Linux ที่ไม่สอดคล้องกับฐานมาตรฐาน Linux และระบบปฏิบัติการน้ำหนักเบาที่ไม่มีการติดตั้งยูทิลิตี้ lsb *
/etc/issue
มีความหมายที่จะแยกวิเคราะห์โดยagettyซึ่งแทนที่ลำดับการหลบหนีด้วยข้อมูลที่เหมาะสม หากคุณเป็นเพียงแค่cat
ผลที่ได้อาจจะล้นหลาม บน Fedora หนึ่งได้รับFedora release 20 (Heisenbug) Kernel \r on an \m (\l)
ซึ่งจะบอกคุณบางสิ่งบางอย่าง แต่ใน RHEL7 \S Kernel \r on an \m
หนึ่งเพิ่งได้รับ
/etc/issue
อาจถูกแทนที่โดยผู้ดูแลระบบท้องถิ่นและดังนั้นจึงไม่ใช่แหล่งข้อมูลที่เชื่อถือได้
วิธีที่น่าเชื่อถือที่สุดเมื่อ lsb_release
ไม่ได้ติดตั้งคือ:
# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server
# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6
ในการติดตั้งขั้นต่ำlsb_release
หายไป
ในการทำให้การทำงานกับ Red Hat clones (เครดิตไปที่ความคิดเห็น):
# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')
หรือเป็นคำสั่งเดียว (แทนที่จะใช้คำสั่ง "rpm" สองอัน):
# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'
ใช้sed
/ cut
และข้อความอื่น ๆ ที่จัดการเครื่องมือ UNIX เพื่อให้ได้สิ่งที่คุณต้องการ
rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)'
sl ใช้สำหรับ Scientific Linux หากคุณรู้ชื่อที่ถูกต้องสำหรับ RHEL อาจจะสร้างความคิดเห็นด้านล่าง คำเตือน - ไม่ผ่านการทดสอบอย่างกว้างขวาง
rpm -qa | grep release
ง่ายยิ่งขึ้น
สมมติว่าเป็น Red Hat จริง ๆ (ไม่ใช่ Centos):
rpm -q redhat-release
หรือเพียงแค่เรียกใช้:
uname -r
และแผนที่เอาท์พุท 2.6.9 ข้าวเมล็ดเป็น RHEL4, 2.6.18 เมล็ดเป็นเมล็ดข้าวเจ้า 5 หากจำเป็นคุณสามารถแมปเวอร์ชันเต็มกับรีลีสการอัปเดตเฉพาะจาก Red Hat (เช่น 2.6.9-89 คือ RHEL5 U4)
rpm -q redhat-release
เพิ่งกลับมาpackage redhat-release is not installed
หาฉันและuname -r
บอกฉันถึงการปล่อยเคอร์เนล
ฉันชอบ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
ฉันชอบใช้/etc/os-release
ไฟล์ซึ่งอยู่ในรุ่น 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
ไฟล์นี้สามารถจัดหาได้ในสคริปต์เช่น:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
หากคุณต้องการได้รับหมายเลขเวอร์ชันต่อไปนี้จะสั้นและง่ายที่สุดเท่าที่ฉันจะหาได้
ทดสอบบน rhel 6.7, rhel 7.2, debian 8.3 และ Ubuntu 14.04:
lsb_release -s -r | cut -d '.' -f 1
สำหรับตัวอย่างที่เป็นประโยชน์สมมติว่าคุณต้องการทดสอบรุ่นสำหรับรุ่นใหญ่และรุ่นรองและทำสิ่งต่าง ๆ ตามนั้น:
#!/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
การมาถึงช่วงปลายปีนี้ แต่ฉันสนุกที่จะลองใช้เวอร์ชั่น RHEL บนโหนดระยะไกลหลายแห่ง ดังนั้นหากคุณมีเซิร์ฟเวอร์ที่ใช้รหัสผ่านเดียวกัน (ฉันรู้ฉันรู้ ... ) ที่นี่เป็นวิธีที่รวดเร็วและสกปรกในการตรวจสอบรุ่น RedHat:
สร้างสคริปต์ที่คาดหวัง
vim server-version.sh
คาดว่าสคริปต์จะตรวจสอบรุ่น RedHat ที่สำคัญในหลายโฮสต์ระยะไกล
#!/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"
รันสคริปต์สำหรับโหนดทั้งหมดของคุณ
[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;
เอาท์พุต
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 ~]#
...