aht*_*rix 18 drivers arch-linux pacman package-management
跑完后
sudo pacman -Syyu
Run Code Online (Sandbox Code Playgroud)
或者
sudo pacman -S [something to install]
Run Code Online (Sandbox Code Playgroud)
为了安全起见,我应该重新启动吗?
小智 11
最好的方法是找到哪些程序/服务使用旧库并重新启动它们。您可以通过使用“lsof”列出所有使用过的文件并找到具有“DEL”类型的文件来实现它。DEL 表示文件名已从文件系统中删除,但由于有人使用它,它仍停留在内存中。
这是完整的命令行:
sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u
Run Code Online (Sandbox Code Playgroud)
小智 8
重新启动的唯一强制原因是新内核(您可以使用 kexec 软重新启动)。有关详细信息,请参阅https://wiki.archlinux.org/index.php/Kexec,简而言之:
加载新内核 initramfs 并指定启动 cmdline
kexec -l /boot/new-kernel --initrd=/boot/new-initramfs --reuse-cmdline
Run Code Online (Sandbox Code Playgroud)invoke kexec(systemctl用于正确关闭,kexec -e将直接执行)
systemctl kexec
Run Code Online (Sandbox Code Playgroud)请注意,如果您kexec-load@.service按照 wiki 中的说明创建一个,如果您重新启动,systemd将使用kexec而不是执行 bios 重新启动自动软重新启动
提供 systemd 服务名称的一点改进版本:
PIDS="(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u)"
for PID in $PIDS; do
systemctl status $i
done | grep '?' | awk '{print $2}' | sort -u
Run Code Online (Sandbox Code Playgroud)
或单行:
for i in $(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u); do systemctl status $i; done | grep '?' | awk '{print $2}' | sort -u
Run Code Online (Sandbox Code Playgroud)
请注意,有一些问题:
systemctl daemon-reload 应该在重新启动其他任何东西之前执行systemd本身)需要重新启动,可以使用systemctl daemon-reexecsystemctl restart dbus.service 中断了一些其他服务,它们需要在 dbus 重启后重新启动:
systemd 本身: systemctl daemon-reexecsystemd-logindsystemd-machineddbussystemctl restart sshd只要连接就不会重新启动,我看到 2 个选项:
systemctl restart sshd使用at/cron/systemd定时器进行调度SSH使用另一个远程(安全)shell重新启动,例如moshscreen/tmux也可能会阻止服务SSH重启,最简单的方法是在重启服务之前关闭这些会话