我在 Windows 上使用 Ubuntu,已经使用了一段时间了。/etc/debian_version
将其命名为buster/sid
。由于最近怀疑磁盘损坏,/usr/lib/x86_64-linux-gnu/libapt-private.so.0.0.0
似乎已被一个仅包含(二进制)零的相同大小的文件替换。
apt
当然,这会破坏并阻止其自我修复。
同事给了我一份相同文件的副本。但是,我找不到替换文件系统中该文件的方法。即使bash
使用 Windows 管理员权限启动,然后在该 shell 中获取 root 权限,也不允许我重命名或替换该文件。
强烈建议不要尝试使用 Windows 工具(例如文件资源管理器和cmd
shell)更改这些文件 - 但是,即使cmd
以管理员权限运行也会出现“ Access is denied.
”
我如何在 Ubuntu for Windows 下替换此库文件? 有可能吗? Google 和 StackExchange 搜索没有帮助。
答案1
因此,我的 WSL 被破坏了,因为 Windows Defender 将我的检测libapt-private.so.0.0.0
为木马。[在此处插入讽刺评论]
(更新:这个SO答案报告了一些微软关于该问题的新闻)
解决方案
首先,最烦人的是每次尝试删除或移动库时都会出现“权限被拒绝”错误。为了防止这种情况,请确保您以管理员身份操作:从提升的 cmd/powershell 打开 WSL shell并在那里工作。
接下来是(几乎)Imaginecat22
答案的实现。
查找您的版本
apt
$ dpkg -l apt [. . .] ||/ Name Version Architecture Description +++-=================================-=====================-=====================-======================================================================= ii apt 1.6.11 amd64 commandline package manager
写下 的值
Architecture
。下载
.deb
包大多数软件包都可以找到Ubuntu 软件包搜索。
但并非所有版本都可用,因此您可能需要手动下载:
使用网络浏览器打开:
https://launchpad.net/ubuntu/+source/apt/<VERSION>/
替换为步骤 1 中返回
<VERSION>
的值,例如:Version
找出构建
Architecture
部分并选择与步骤 1 中的值匹配的构建。
复制 URL 以下载文件
apt_<VERSION>_<ARCHITECTURE>.deb
。从 WSL Linux shell 下载软件包:$ wget https://launchpad.net/ubuntu/+source/apt/1.6.11/+build/16829590/+files/apt_1.6.11_amd64.deb
使用 dpkg 安装包
$ dpkg -i apt_1.6.11_amd64.deb
应该用它覆盖你以前的版本和损坏的库。
答案2
我的 Windows Defender 刚刚删除了我的 sudo_libutil.so.0.0.0。我设法解决了该问题,而无需重新安装任何软件包。
我将答案发布到了 superuser.com这里
答案3
我刚刚遇到了同样的问题。只需获取一个新的 apt.deb 包,然后使用 dpkg -i 手动重新安装即可
我得到了https://packages.ubuntu.com/bionic/apt
然后运行 apt update、upgrade、probably fix-broken 等等。
答案4
嘿,我遇到了完全一样的问题 - 以至于我一直在关注你的讨论并跟进。我创建了一个 Stack Overflow 帐户,只是为了让你知道我解决了这个问题!(这是我的第一篇帖子,哈哈) 诀窍是在另一台机器上安装(或像我一样安装)WSL,然后将 libapt-private.so.0.0.0 文件直接 scp 到目录中!
之后,我输入 sudo apt-get -f install 并且它像正常运行一样:)希望这会有所帮助!