TL; DR
Nỗ lực thứ 3 thực sự hiệu quả! Tôi sẽ rời khỏi 2 lần thử đầu tiên để những người khác có thể gặp Q & A này trong tương lai hy vọng sẽ hiểu được một số vấn đề không quan trọng để phân tích thông tin phiên bản RPM và xác định dòng dõi đến trước, thứ hai, Vân vân.
Nỗ lực số 1 (OP cho biết không hoạt động)
Lệnh này sẽ sắp xếp đầu ra và cung cấp cho bạn theo thứ tự phiên bản:
$ 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
TẠI SAO NÓ KHÔNG LÀM VIỆC: Một người ngây thơ sẽ nghĩ rằng bạn có thể sử dụng một số biến thể của sort
lệnh để thực hiện nhiệm vụ này, nhưng có đủ sự thay đổi và không nhất quán trong định dạng thông tin phiên bản thực tế cho một RPM nhất định mà nó không phải là ' t đến nhiệm vụ.
Nỗ lực số 2 (OP nói không hoạt động)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
TẠI SAO NÓ KHÔNG LÀM VIỆC: Tôi rất hy vọng rằng cách tiếp cận này sẽ mang lại kết quả mà OP đang tìm kiếm, nhưng vấn đề với điều này như @Joel đã chỉ ra trong các ý kiến, là việc --last
chuyển đổi chỉ đơn thuần là trả về kết quả được sắp xếp theo ngày RPM được cài đặt.
Nỗ lực số 3
Điều này chắc chắn sẽ làm công việc. Tôi tìm thấy một bộ công cụ gọi là Công cụ phát triển RPM. Có 2 công cụ trong bộ công cụ này sẽ cung cấp cho bạn khả năng xác định xem một phiên bản RPM mới hơn hay cũ hơn phiên bản khác.
Nếu RPM chưa được cài đặt, bạn có thể làm như sau:
yum install rpmdevtools
Công cụ đầu tiên hữu ích được gọi là rpmdev-vercmp
. Công cụ này có thể so sánh 2 tên của RPM và cho bạn biết cái nào mới hơn. Ví dụ:
$ 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
Sau khi tìm thấy điều này, tôi đã sẵn sàng kết hợp một tập lệnh shell nhưng rồi nhận ra, người đàn ông tôi lười biếng, vì vậy tôi đã chọc thêm vài phút nữa và tìm thấy một công cụ khác trong bộ công cụ được gọi rpmdev-sort
.
Công cụ này là bụi bẩn. Bạn có thể sử dụng nó như sau:
$ 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
Có rất nhiều công cụ trong Công cụ phát triển RPM có thể đáng để người khác tìm kiếm vì vậy tôi sẽ liệt kê chúng ở đây để tham khảo trong tương lai.
$ 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
Một thay thế cho # 3
Một thay thế mà OP đề cập trong các ý kiến là sử dụng sort -V
. Đó là một thủ đô -V
. Tôi cũng chưa bao giờ nghe về công tắc này. Từ sort
trang người đàn ông:
-V, --version-sort
natural sort of (version) numbers within text
Hóa ra, sort
nó cung cấp một phương tiện để sắp xếp số phiên bản để bạn cũng có thể thực hiện việc sắp xếp như vậy:
$ 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