Làm thế nào để biết nếu có bản cập nhật có sẵn?


8

Tôi đang chạy một máy chủ Ubuntu 12.04 LTS. Và tôi nghĩ sẽ thật tuyệt nếu tôi có thể được thông báo khi có bản cập nhật. Nhưng tôi không thể tìm ra cách để biết ...

Tôi đã thử nhìn vào apt-gettrang người đàn ông. Từ đó tôi có thể sử dụng apt-get -s upgradeđể có được đầu ra apt-get trong một tập lệnh mà không chặn các câu hỏi.

Bây giờ, tôi thấy rõ sự khác biệt:

Cập nhật có sẵn:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  dpkg dpkg-dev libdpkg-perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])

Cập nhật không có sẵn:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Nhưng tôi không biết làm thế nào để tiến hành từ đó. Làm thế nào tôi có thể nói, từ một tập lệnh bash (hoặc tập lệnh php) rằng có bản cập nhật có sẵn hay không?

Biên tập :

Đây là mã bash hiện tại của tôi. Nó không hoạt động.

updates_available=`/etc/update-motd.d/90-updates-available`

if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
   echo "No updates are available"
else
   echo "There are updates available"
fi

Vâng, nó sẽ chỉ nói 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.nếu không có cập nhật.
Nattgew

Câu trả lời:


18

Đọc các trang người đàn ông cho motd(5), pam_motd(8)update-motd(5). Trên hệ thống của tôi, /etc/update-motd.d/90-updates-availablegọi /usr/lib/update-notifier/update-motd-updates-availablenó sẽ hiển thị điều này khi tôi đăng nhập:

19 packages can be updated.
12 updates are security updates.

Giảm sâu hơn một chút, kịch bản "...- cập nhật có sẵn" gọi /usr/lib/update-notifier/apt-check --human-readable. Nếu bạn đọc (python), bạn sẽ thấy rằng nếu bạn bỏ qua cờ có thể đọc được của con người, nó sẽ xuất "19; 12" thành stderr. Chúng ta có thể lấy điều đó với điều này:

IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates 
19
12

Bây giờ bạn có thể nói:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi

Tôi có thể đi với điều đó và test if [ / etc / update-motd.d / 90-Updates-Available` = "0 gói có thể được cập nhật. 0 cập nhật là cập nhật bảo mật." ]; sau đó ... fi`
Adeline

Thật không may, kiểm tra không hoạt động (tôi đã thêm các trích dẫn bị lãng quên trong câu trả lời trước đây của tôi.) Tôi nghi ngờ có gì đó để làm với các dòng mới. Tôi đã cập nhật bài viết của mình với mã tôi nhận được từ câu trả lời của bạn.
Adeline

câu trả lời tinh tế.
glenn jackman

Câu trả lời tuyệt vời, @glennjackman. Tôi sẽ trả lời với google.com/search?q=apt-get+check+if+updates+are+av Available #ImNotHelpfulToday =)
0xSheepdog
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.