Ubuntu 解决 apt 锁占用 + 安装 net-tools + 搭建 SSH 远程连接(保姆级实操)

前言

在 Ubuntu 虚拟机嵌入式开发(地平线 X5 SDK 编译、烧录环境搭建)过程中,经常遇到两个高频问题:

  1. Ubuntu 自动更新占用 apt 锁,导致所有 apt install 卡死无法安装软件。
  2. 新版 Ubuntu 默认没有 ifconfig 网络命令,无法查看虚拟机 IP。
  3. 没有 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,不再预装 ifconfigroutenetstat 等经典网络工具。

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

五、实操总结(排错核心)

  1. apt 锁卡死 99% 都是自动更新服务导致,不要重启虚拟机,直接杀进程清锁即可解决。
  2. 新版 Ubuntu 必须手动安装 net-tools 才能使用 ifconfig
  3. 开发环境必装 SSH,极大提升虚拟机开发效率。
  4. 所有命令为项目实操有效命令,适配地平线 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 安全建议

  1. SSH 密钥登录:建议配置 SSH 密钥登录替代密码,更安全。
  2. 修改默认端口:可将 SSH 默认端口 22 改为其他端口,减少扫描攻击。
  3. 定期更新:在开发环境稳定后,可重新启用定时安全更新。

八、常见问题排查(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:可能是源问题或网络不通。可尝试更换国内镜像源。

相关推荐
Better Bench4 小时前
WSL2 Ubuntu 中 Claude CLI “command not found” 故障排查与修复
linux·ubuntu·claude·wsl·claudecode
实心儿儿4 小时前
Linux —— 进程间关系和守护进程
linux·运维·服务器
Dawn-bit6 小时前
Linux磁盘管理详解
linux·运维·服务器·计算机网络·云计算
RisunJan6 小时前
Linux命令-sftp(SSH 文件传输协议客户端)
linux·运维
龙仔7258 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
老杨聊技术9 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos
xiaoye-duck9 小时前
《Linux系统编程》Linux 系统多线程(六):<线程同步与互斥>线程同步(下):POSIX 信号量与环形队列生产者消费者模型详解
linux·线程
三言老师10 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
大鱼>11 小时前
eBPF内核编程:从TC到XDP的全栈可观测性
linux·服务器·php
sxstj12 小时前
老旧电脑 Linux 系统完整推荐(按内存分档,新手友好)
linux