ubuntu 离线安装包,以 vim 为例

整个过程主要分为"联网电脑上下载打包 "和"离线电脑上安装使用"两大步。

在联网电脑上:准备离线安装包

  1. 创建并进入工作目录。为了保持整洁,我们创建一个专门存放包的文件夹:

    bash 复制代码
    mkdir -p ~/offline-vim
    cd ~/offline-vim
  2. 下载 vim 及其所有依赖包 。这里用了一条命令,它会自动分析 vim 的全部依赖并下载 :

    bash 复制代码
    apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u)

    命令执行后,~/offline-vim 文件夹里会出现很多 .deb 文件。

  3. 生成软件包索引文件 。为了让 apt 能识别这个文件夹为一个"软件源",需要生成索引 :

    bash 复制代码
    sudo apt install dpkg-dev -y       # 安装所需工具
    dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz

    这个 Packages.gz 文件就是 APT 的"目录",记录了有哪些包以及它们的依赖关系 。

  4. 打包并传输到U盘 。将整个 offline-vim 文件夹复制到U盘:

    bash 复制代码
    cd ~
    cp -r offline-vim /media/你的U盘路径/

    请将 /media/你的U盘路径/ 替换为实际的U盘挂载点。

在离线电脑上:配置本地源并安装

  1. 从U盘复制到系统 。将U盘插入离线电脑,把整个 offline-vim 文件夹复制到一个方便的地方,比如家目录 :

    bash 复制代码
    cp -r /media/你的U盘路径/offline-vim ~/
  2. 配置本地 APT 源。我们需要告诉系统,把这个文件夹当作安装源 。

    bash 复制代码
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份原文件
    echo "deb [trusted=yes] file:///home/你的用户名/offline-vim ./" | sudo tee -a /etc/apt/sources.list
    • [trusted=yes] 表示信任这个本地源,跳过GPG密钥检查 。
    • file:///home/你的用户名/offline-vim 是包的路径。
    • 请务必将 你的用户名 换成实际的用户名。
    • 如果为了更加直观,可以将 /etc/apt/sources.list 中的其他源都注释了,只留下最后一行。
  3. 更新源并安装 vim。现在就可以像在线一样操作了:

    bash 复制代码
    sudo apt update      # 读取本地Packages.gz,更新列表 
    sudo apt install vim # 从本地安装vim及其依赖 

    注意这里执行的是 sudo apt update 而不是 sudo apt upgrade

    执行之后,用命令 apt list 查询可安装的依赖,或者定点查询 apt search

  4. 验证安装。安装完成后验证一下:

    bash 复制代码
    vim --version
  5. 其它验证方式。如果安装的是一些依赖,则可以使用如下命令进行检查:

bash 复制代码
apt list --installed | grep libusb
# 或者
dpkg -l libusb-1.0-0

⚠️ 关键注意事项

  • 系统版本必须一致 :联网和离线电脑的 Ubuntu 版本(如 20.04、22.04)和系统架构(如 amd64) 必须相同,否则依赖可能不兼容 。
  • 用完记得恢复源 :安装成功后,建议删除或注释掉 sources.list 里添加的那一行,并把备份的 .bak 文件还原,以免影响后续使用。

整个过程就是这样。如果在下载依赖包或者配置源的时候遇到什么报错,随时把具体信息发给我,我帮你看看问题出在哪。

相关推荐
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
奔跑的大白啊2 小时前
多容器共享目录权限踩坑记
linux·ubuntu·共享目录·linux权限·docker 容器化部署
Android系统攻城狮5 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
H.莓飛6 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
91刘仁德6 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
硅基手札7 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
沫璃染墨8 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
工作10年+,存储芯片行业9 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
wuminyu9 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
她说彩礼65万9 小时前
C语言 堆区和栈区
java·linux·c语言