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

相关推荐
s_w.h1 小时前
【 linux 】文件管理与重定向
linux·运维·服务器
Cloud_Shy6181 小时前
Linux 系统定时任务 Cron(d) 服务应用实践(二:生产环境下的用户定时任务)
linux·运维·服务器·centos·云计算
STDD1 小时前
strace 和 perf:Linux 进程调试和性能分析深度指南
linux·运维·php
Rain5091 小时前
05. mini-cc 工具系统:让 AI 拥有动手能力
linux·前端·人工智能·ubuntu·typescript·ai编程
都在酒里1 小时前
Linux字符设备驱动开发(五):PWM调光——实现LED亮度控制与呼吸灯效果
linux·运维·驱动开发
Hani_972 小时前
Code Coverage系列(三)gcov 是什么?做什么?两个参数?检测原理?gcno文件内容?gcda文件内容?
linux·代码覆盖率
青梅橘子皮2 小时前
Linux---进程状态与优先级
linux·运维·服务器
H Journey2 小时前
Linux VIM介绍与常用命令
linux·运维·vim
invicinble2 小时前
设计模式(类的拓扑结构)(为什么会产生设计模式,以及什么是设计模式)
linux·服务器·设计模式