TL; DR
ความพยายามครั้งที่ 3 ใช้งานได้จริง! ฉันออกจากความพยายาม 2 ครั้งแรกเพื่อให้คนอื่น ๆ ที่อาจเจอคำถาม & คำตอบนี้ในอนาคตหวังว่าจะได้รับข้อมูลเชิงลึกเกี่ยวกับปัญหาที่ไม่น่ารำคาญในการแยกวิเคราะห์ข้อมูลรุ่น RPM และกำหนดสายเลือดที่มาก่อนวินาที เป็นต้น
พยายาม # 1 (OP กล่าวว่าไม่ทำงาน)
คำสั่งนี้จะเรียงลำดับผลลัพธ์และให้ลำดับตามรุ่น:
$ rpm -q kernel --queryformat "%{VERSION} %{RELEASE}\n"|sort -n
2.6.18 238.12.1.el5
2.6.18 238.19.1.el5
2.6.18 274.12.1.el5
2.6.18 308.8.2.el5
ทำไมมันไม่ทำงาน:คนไร้เดียงสาจะคิดว่าคุณสามารถใช้sort
คำสั่งบางอย่างในการทำงานนี้ แต่มีความแปรปรวนและความไม่สอดคล้องกันมากพอในการจัดรูปแบบของข้อมูลรุ่นจริงสำหรับ RPM ที่กำหนดซึ่งมันไม่ใช่ ' t ขึ้นอยู่กับงาน
พยายาม # 2 (OP กล่าวว่าไม่ทำงาน)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
ทำไมมันไม่ทำงาน:ฉันมีความหวังสูงว่าวิธีการนี้จะให้ผลลัพธ์ที่ OP กำลังมองหา แต่ปัญหาของวิธีนี้เป็น @Joel ชี้ให้เห็นในความคิดเห็นว่า--last
สวิตช์เป็นเพียงการคืนผลลัพธ์เรียงตาม วันที่ติดตั้ง RPM
ลอง # 3
อันนี้จะทำงานแน่นอน ฉันพบชุดเครื่องมือที่เรียกว่า RPM Development Tools มี 2 เครื่องมือในชุดนี้ที่จะให้ความสามารถในการตรวจสอบว่ารุ่นหนึ่งของ RPM เป็นรุ่นที่เก่ากว่าหรือใหม่กว่า
หาก RPM ยังไม่ได้ติดตั้งคุณสามารถทำได้ดังนี้:
yum install rpmdevtools
rpmdev-vercmp
เครื่องมือแรกที่มีประโยชน์ที่เรียกว่า เครื่องมือนี้สามารถเปรียบเทียบชื่อ RPM 2 ชื่อและบอกให้คุณทราบว่าชื่อใดที่ใหม่กว่า ตัวอย่างเช่น:
$ rpmdev-vercmp kernel-2.6.35.14-100.fc14.x86_64 kernel-2.6.35.14-103.fc14.x86_64
0:kernel-2.6.35.14-103.fc14.x86_64 is newer
หลังจากพบฉันนี้คือทุกชุดที่จะใส่กันเชลล์สคริปต์ rpmdev-sort
แต่ก็รู้แล้วคนที่ฉันขี้เกียจดังนั้นผมแหย่ไม่กี่นาทีมากขึ้นและพบว่าเครื่องมืออื่นในห้องสวีทที่เรียกว่า
เครื่องมือนี้จ่ายสิ่งสกปรก คุณสามารถใช้มันได้ดังต่อไปนี้:
$ rpm -q kernel | rpmdev-sort
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64
มีเครื่องมือมากมายในเครื่องมือพัฒนา RPM ที่อาจคุ้มค่ากับการมองหาผู้อื่นดังนั้นฉันจึงแสดงรายการไว้ที่นี่เพื่อใช้อ้างอิงในอนาคต
$ rpm -q --queryformat '[%{NAME} %{FILEMODES:perms} %{FILENAMES}\n]' rpmdevtools \
| grep -E "^.* -..x..x..x " \
| awk '{print $3}' \
| sed 's#/usr/bin/##' \
| paste - - - \
| column -t
annotate-output checkbashisms licensecheck
manpage-alert rpmargs rpmdev-bumpspec
rpmdev-checksig rpmdev-cksum rpmdev-diff
rpmdev-extract rpmdev-md5 rpmdev-newinit
rpmdev-newspec rpmdev-packager rpmdev-rmdevelrpms
rpmdev-setuptree rpmdev-sha1 rpmdev-sha224
rpmdev-sha256 rpmdev-sha384 rpmdev-sha512
rpmdev-sort rpmdev-sum rpmdev-vercmp
rpmdev-wipetree rpmelfsym rpmfile
rpminfo rpmls rpmpeek
rpmsodiff rpmsoname spectool
ทางเลือกที่ # 3
ทางเลือกที่ OP sort -V
ที่กล่าวถึงในการแสดงความคิดเห็นเป็นไปใช้งานที่ -V
นั่นเป็นทุน ฉันไม่เคยได้ยินเกี่ยวกับสวิตช์นี้เช่นกัน จากsort
หน้าคน:
-V, --version-sort
natural sort of (version) numbers within text
ตามที่ปรากฎsort
จะมีระบบอำนวยความสะดวกในการจัดเรียงหมายเลขรุ่นดังนั้นคุณสามารถทำการเรียงลำดับดังนี้:
$ rpm -q kernel | sort -V
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64