如何在 Ubuntu for Windows 上手动替换 libapt-private.so.0.0.0?

Jon*_*een 8 permissions apt windows bash

我在 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 工具(例如文件资源管理器和cmdshell)更改这些文件- 但是,即使cmd以管理员权限运行也会给“ Access is denied.

如何在 Ubuntu for Windows 下替换这个库文件?甚至有可能吗?Google 和 StackExchange 搜索没有帮助。

Sal*_*ner 9

因此,由于 Windows Defender 将我检测libapt-private.so.0.0.0为木马程序,我的 WSL 被破坏了。[在此处插入具有讽刺意味的评论]

更新:这个 SO 回答报告了微软关于这个问题的一些新闻

解决方案

首先,最烦人的是每次尝试删除或移动库时都会出现“权限被拒绝”错误。为了防止这种情况发生,请确保您以管理员身份运行:从提升的 cmd/powershell 打开您的 WSL shell并在那里工作。

接下来是(几乎)Imaginecat22的答案的实现。

  1. 找到你的版本 apt

    $ dpkg -l apt
    
    [. . .]
    ||/ Name                              Version               Architecture          Description
    +++-=================================-=====================-=====================-=======================================================================
    ii  apt                               1.6.11                amd64                 commandline package manager
    
    Run Code Online (Sandbox Code Playgroud)

    写下 的值Architecture

  2. 下载.deb

    大多数包都可以通过Ubuntu 包搜索找到

    并非所有版本都可用,因此您可能需要手动下载:

    • 使用网络浏览器打开:

      https://launchpad.net/ubuntu/+source/apt/<VERSION>/

      替换<VERSION>Version步骤 1中返回的值,例如:

      https://launchpad.net/ubuntu/+source/apt/1.6.11/

    • 找到Builds部分并选择与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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用 dpkg 安装包

    $ dpkg -i apt_1.6.11_amd64.deb
    
    Run Code Online (Sandbox Code Playgroud)

应该用它覆盖您以前的版本和损坏的库。