刚刚运行了这个,它看起来无法取消。
很多东西正在被清除。
我只是想删除并重新安装所有 ssl ssh 设备。
存在严重的版本不匹配问题。
答案1
您可以轻松地重新安装已删除的软件包。
Apt 有一个历史文件,这个文件是/var/log/apt/history.log
。在终端中运行以下命令查看:
cat /var/log/apt/history.log
您将看到开始日期,命令行用过的,被要求用户名等
因此运行:
grep -hA5 "remove openssl" /var/log/apt/history.log | grep "Remove"
这应该会打印出被删除的软件包。单词“Remove”应该只出现一次,在列表的开头。
如果此列表看起来就是被删除的内容,则继续。
首先,进入用户的主目录,然后将列表发送到名为“removedpackages”的文件。
cd
grep -hA5 "remove openssl" /var/log/apt/history.log | grep "Remove" > removedpackages
现在我们需要在将列表发送给之前对其进行清理apt
。
此命令将在新行上打印所有内容:
sed -e "s/ [a-z0-9(]/\n&/g" removedpackages
这应该只 grep 包名称(以空格开头,后跟小写字母或数字的行)。
sed -e "s/ [a-z0-9(]/\n&/g" removedpackages | grep '^ [a-z0-9]'
现在软件包应该以 packagename:amd64 或 packagename:all 或 packagename:i386 等形式列出。
如果是,则将列表发送到名为 removedlist 的新文件。
sed -e "s/ [a-z0-9(]/\n&/g" removedpackages | grep '^ [a-z0-9]' > removedlist
最后重新安装软件包,将文件内容发送至apt
。
sudo apt update
sudo apt install $(cat removedlist)
并删除您的工作文件:
rm removedlist removedpackages
对所用选项的解释:
sed -e "s/ [a-z0-9(]/\n&/g"
-e
打印或回显输出而不是编辑文件s///g
是替代字符串的标准形式[a-z0-9(]
匹配任何空格后跟一个小写字母或数字或左括号。\n&
\n
在匹配项前用新行替换&
。
还:
为了grep -hA5
-h
说不要在输出中列出文件名,并且A5
说还要列出比赛后的 5 行
答案2
它是操作系统的命令行界面。
在这种环境下,许多命令可能变得非常危险,尤其是在复制粘贴时,尤其是当-y
其中留下了无意的或未意识到的选项时。
我似乎发现很多人(新手,但有时也包括系统管理员)似乎只能以自己的代价来学习尊重这种环境,有时甚至要付出巨大的代价。
与此同时,我建议依靠对apt-get
命令--simulate
或等效--dry-run
选项进行检查,以查看此类命令的影响,而不必承担后果。