我知道我不应该这么做,但它确实发生了(Ubuntu 12.04.1 LTS),作为 root 用户,我删除了 /usr/lib 文件夹。有什么办法可以恢复它吗?
答案1
有一些工具可以帮助您恢复已删除的文件,但通常这是一个缓慢且主要手动的过程。搜索引擎是您的朋友。
启动实时 CD 或 USB、挂载系统的根分区、然后将 /usr/lib 复制到 /mnt/{root.drive}usr/lib 可能会更容易,但您只会获得默认的 lib 文件,而不是您可能添加的文件。
我认为最好的选择是重新安装操作系统。当然,你会希望将数据放在一个单独的分区上,这个分区在安装过程中不会被格式化,在我看来,这是个好习惯。
答案2
假设apt-get
仍然有效,您可以尝试使用dpkg
来获取包含文件的软件包列表,然后使用来安装它们apt-get
。您可以使用这个 Ruby 脚本,但同样的想法可以在 python 或 bash 中实现:
raw_pkgs = `dpkg --get-selections`.split("\n")
need_reinstall = []
path="/usr/lib"
raw_pkgs.each do |x|
pkg = x.split(" ")[0]
if `dpkg -L #{pkg}`.include? path
puts "-> #{pkg} has files in #{path}"
need_reinstall << pkg
end
end
puts "\nYou need to reinstall #{need_reinstall.size} packages:"
puts "\tsudo apt-get install --reinstall " + need_reinstall.join(" ")
这是一个有点蛮力的解决方案并且会花费一些时间(在我的系统中,列出的是安装的总软件包的~65%...),但是应该可以起作用。
答案3
然后创建一个 ubuntu USB 启动。然后启动到“尝试 ubuntu”模式。然后挂载你的磁盘以访问 /usr/lib 文件夹从实时模式访问主目录中的文件。将 /usr/lib 从其他计算机复制到您的计算机。重新启动。然后您的计算机几乎可以正常工作,并且几乎所有基本功能都可以使用。您可以稍后安装缺少的库
答案4
import subprocess
from functools import cache
def main():
run_cmd = subprocess.run(["dpkg", "--get-selections"], capture_output=True)
path = "/usr/lib/python3"
output = {x for x in run_cmd.stdout.decode().split("\n")}
app_box = []
for x in output:
pkg = x.split("\t")[0]
the_process = {x for x in subprocess.run(["dpkg", "-L", pkg], capture_output=True).stdout.decode().split("\n")}
if path in the_process:
print(f"-> {pkg} has file in {path}")
app_box.append(pkg)
else:
print(f"-> {pkg} has no file in {path}")
print(f"you need to reinstall {len(app_box)} package")
print(f"\tsudo apt install --reinstall {' '.join(app_box)}")
if __name__ == "__main__":
main()
如果您对@Salem 提供的答案的 Python 版本感到好奇……就是这里。嗯,不是那么高效,但它有效,哈哈。