前言
在 Ubuntu 虚拟机嵌入式开发(地平线 X5 SDK 编译、烧录环境搭建)过程中,经常遇到两个高频问题:
- Ubuntu 自动更新占用 apt 锁,导致所有
apt install卡死无法安装软件。 - 新版 Ubuntu 默认没有
ifconfig网络命令,无法查看虚拟机 IP。 - 没有 SSH 服务,无法 Windows 远程连接虚拟机开发。
本文基于真实实操排错命令,彻底解决 apt 锁冲突、安装网络工具、搭建 SSH 远程服务,全程可直接复制执行。
一、问题一:apt 缓存锁占用报错
1.1 报错现象
执行任意 apt 安装命令,一直卡住:
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend.
It is held by process xxx (unattended-upgr)
原因:Ubuntu 自带自动更新服务 unattended-upgrades 后台占用 dpkg 锁,导致用户无法安装软件。
1.2 终极解决方法(实测有效)
依次执行全套解锁、停服务、清锁、修复依赖命令:
bash
# 1. 杀死自动更新进程
sudo killall -9 unattended-upgr
# 2. 删除前端锁、dpkg 主锁
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
# 3. 彻底停止自动更新服务
sudo systemctl stop unattended-upgrades
# 4. 清空所有残留锁文件
sudo rm -rf /var/lib/dpkg/lock* /var/cache/apt/archives/lock
# 5. 修复损坏的 dpkg 依赖状态
sudo dpkg --configure -a
二、问题二:Ubuntu 找不到 ifconfig 命令
2.1 报错原因
Ubuntu 20.04/22.04 新版本默认舍弃 net-tools,不再预装 ifconfig、route、netstat 等经典网络工具。
2.2 安装 net-tools 完整命令
bash
# 更新源并安装
sudo apt update && sudo apt install -y net-tools
# 单独安装(解锁后直接执行)
sudo apt install -y net-tools
2.3 验证是否安装成功
bash
ifconfig
正常输出网卡 IP、MAC 地址、子网掩码即为成功。
三、搭建 SSH 远程连接服务(Windows 远程连虚拟机)
开发必备:开启 SSH 后,可使用 Xshell、FinalShell、MobaXterm 远程连接 Ubuntu 虚拟机,无需虚拟机内操作。
3.1 安装并启动 openssh-server
bash
# 安装 ssh 服务
sudo apt install openssh-server -y
# 启动 ssh 服务
sudo systemctl start ssh
3.2 查看虚拟机 IP(用于远程连接)
bash
ifconfig
获取 ens33 网卡的 inet 地址,例如:192.168.x.x。
3.3 远程连接方式
- 主机:虚拟机 IP
- 端口:22
- 用户名/密码:Ubuntu 登录账号密码
四、全套整合一键修复命令(懒人版)
直接复制整段执行,一次性解决锁问题 + 装网络工具 + 开 SSH:
bash
sudo killall -9 unattended-upgr
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
sudo systemctl stop unattended-upgrades
sudo rm -rf /var/lib/dpkg/lock* /var/cache/apt/archives/lock
sudo dpkg --configure -a
sudo apt update && sudo apt install -y net-tools openssh-server
sudo systemctl start ssh
ifconfig
五、实操总结(排错核心)
- apt 锁卡死 99% 都是自动更新服务导致,不要重启虚拟机,直接杀进程清锁即可解决。
- 新版 Ubuntu 必须手动安装 net-tools 才能使用
ifconfig。 - 开发环境必装 SSH,极大提升虚拟机开发效率。
- 所有命令为项目实操有效命令,适配地平线 X5 SDK 编译、嵌入式 Ubuntu 开发环境。
六、附:本次实操有效历史指令
bash
sudo apt install net-tools
sudo killall -9 unattended-upgr
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
sudo apt update && sudo apt install -y net-tools
sudo kill -9 509951
sudo systemctl stop unattended-upgrades
sudo rm -rf /var/lib/dpkg/lock* /var/cache/apt/archives/lock
sudo dpkg --configure -a
sudo apt install -y net-tools
ifconfig
sudo apt install openssh-server
sudo systemctl start ssh
ifconfig
七、进阶配置与注意事项
7.1 永久禁用自动更新(可选)
为防止 unattended-upgrades 服务再次启动占用锁,可将其永久禁用:
bash
# 禁用自动更新服务
sudo systemctl disable unattended-upgrades
# 确认服务状态
sudo systemctl status unattended-upgrades
注意 :禁用自动更新后,需定期手动执行 sudo apt update && sudo apt upgrade 来保持系统安全更新。
7.2 配置 SSH 开机自启
确保 SSH 服务在虚拟机重启后自动启动:
bash
# 启用 SSH 开机自启
sudo systemctl enable ssh
# 验证是否已启用
sudo systemctl is-enabled ssh
7.3 使用 ip 命令替代 ifconfig(现代推荐)
Ubuntu 推荐使用更强大的 ip 命令,它默认已安装:
bash
# 查看所有网络接口信息
ip addr show
# 查看路由表
ip route show
# 查看网络统计信息
ss -tuln
7.4 防火墙配置(如启用)
如果系统启用了 ufw 防火墙,需放行 SSH 端口:
bash
# 查看防火墙状态
sudo ufw status
# 允许 SSH(如果防火墙已启用)
sudo ufw allow ssh
# 或直接放行 22 端口
sudo ufw allow 22/tcp
7.5 安全建议
- SSH 密钥登录:建议配置 SSH 密钥登录替代密码,更安全。
- 修改默认端口:可将 SSH 默认端口 22 改为其他端口,减少扫描攻击。
- 定期更新:在开发环境稳定后,可重新启用定时安全更新。
八、常见问题排查(Q&A)
Q1:执行 sudo killall -9 unattended-upgr 提示无此进程?
A:可能进程名不同或已结束。可直接执行后续的清锁命令。
Q2:ifconfig 显示 ens33 没有 IP 地址?
A:检查虚拟机网络设置是否为 NAT 或桥接模式,并尝试重启网络:
bash
sudo systemctl restart systemd-networkd
# 或
sudo netplan apply
Q3:SSH 连接被拒绝?
A:确认 SSH 服务正在运行:sudo systemctl status ssh,并检查防火墙设置。
Q4:执行一键修复命令后,apt update 仍失败?
A:可能是源问题或网络不通。可尝试更换国内镜像源。