Dựa trên câu trả lời trước đó của Olli, tôi đã đưa ra một phương pháp để tìm tất cả các gói hiện được cài đặt trên hệ thống của bạn yêu cầu khởi động lại.
~$ mkdir debs
~$ cd debs
~/debs$ apt-get download $(dpkg -l | tail -n +7 | awk '{print $2}')
Đợi quá trình tải xuống hoàn tất, trên hệ thống của tôi có dung lượng khoảng 900 MB nên có thể mất một lúc tùy thuộc vào kết nối của bạn. Sau đó:
~/debs$ for x in $(ls); do y=$(dpkg-deb -I "$x" postinst 2>/dev/null | grep 'reboot-required'); if [ -n "$y" ]; then echo "$x" | grep -Poe '^.*?(?=_)'; fi; done
Đầu ra có thể trông giống như thế này:
dbus
gconf2
initscripts
libc6
libpam0g
libpam-systemd
libssl1.0.0
linux-image-3.19.0-47-generic
linux-image-3.19.0-49-generic
network-manager
upstart
Tất nhiên, phương pháp này không phải là hoàn hảo. Có thể có các gói thông báo về việc khởi động lại được yêu cầu thông qua các phương tiện khác ngoài 'thông báo khởi động lại bắt buộc', và trong khi điều này cho thấy các gói hiện đang cài đặt yêu cầu hoặc không yêu cầu khởi động lại, thì điều đó không chắc chắn sẽ đúng cho lần sau các phiên bản của cùng một gói.
/var/run/reboot-required
đã được tạo trước đó một ngày nhưng không có/var/run/reboot-required.pkgs
tệp @ Ubuntu 16.04.5 LTS.