默认讨论 Ubuntu Server,Ubuntu Server 和 Ubuntu Desktop 的稳定性和使用体验完全是天壤之别。
人生苦短,我不用 Linux Desktop。实在要用的建议使用 Gnome 之外的图形界面。
Network
网络的相关配置在中国大陆太重要了,如果你解决了网络问题,那你已经解决了全部问题的一半。
SSH
Ubuntu Server 安装时自带 OpenSSH Server,可以直接连接。
Proxy
海的那边原来是网络。
System Proxy
左转 Mihomo,在此不能多说。
Docker Proxy
Docker 不会自动走系统代理(HTTP_PROXY 及 HHTPS_PROXY),独立代理配置参考博客 Docker: 虚拟世界的集装箱船。
SSH Tunnel
如果你通过一台已经配置代理的电脑连接服务器,那其实可以直接让服务器通过 SSH 隧道正常连接互联网
参考我的 SSH 笔记
Firewall
ufw
查看状态和规则
sudo ufw status verbose
# 显示规则编号
sudo ufw status numbered
放行特定端口(以 9100 为例)
sudo ufw allow 9100/tcp
删除对应的放行规则
sudo ufw delete allow 9100/tcp
启用防火墙。通过 SSH 连接时,务必提前放行实际使用的 SSH 端口(默认 22),避免失去远程访问。
sudo ufw allow 22/tcp
sudo ufw enable
停用防火墙(会停止 UFW 的过滤保护)
sudo ufw disable
参考:UFW 手册。UFW 与 firewalld 选择一种管理即可,避免同时启用。
firewalld
查看 public zone 的运行时配置(加 --permanent 查看永久配置)
sudo firewall-cmd --zone=public --list-all
放行特定端口(以 9100 为例)
sudo firewall-cmd --zone=public --add-port=9100/tcp --permanent
# 重新加载规则
sudo firewall-cmd --reload
云服务器设置
有的时候端口连接不上不是系统设置的问题,而是你在阿里云、腾讯云等云服务器的防火墙设置页面中没有放行所需端口。
Troubleshooting
Change network interface name
- Ref systemd.link
cd /etc/systemd/netowrk
sudo touch 10-wlan.link
sudo chmod 777 10-wlan.link
sudo vim 10-wlan.link
Insert follow content:
This example assigns the fixed name “wlan0” to the interface with the MAC address 00:a0:de:63:7a:e6:
[Match]
MACAddress=00:a0:de:63:7a:e6
[Link]
Name=wlan0
NamePolicy= is not set, so Name= takes effect. We use the “10-” prefix to order this file early in the list. Note that it needs to be before 99-default.link, i.e. it needs a numerical prefix, to have any effect at all.
Ubuntu 虚拟机网络设置选项消失
lshw: list hardware
lshw -C net
you may see *-network DISABLED
then run sudo nmcli connection
If no device is assigned for network
Refer to https://askubuntu.com/questions/1190504/why-is-nmcli-not-configuring-device
run nmcli networking on to enable network control by NetworkManager
Otherwise
Refer to https://askubuntu.com/questions/1341472/ubuntu-20-04-network-disabled
Find a way to make NetworkingEnabled=true
Open /etc/NetworkManager/NetworkManager.conf
You may see
[ifupdown]
managed=false
change false to true only works when an /etc/network/interfaces is in use (before ubuntu 17.0)
Packages
Sources Mirror
如果你已经在 Network 部分设置了 proxy,那么可以跳过这个环节。
为了缓解国内镜像源时常出现对上游官方源同步失败的情况,建议直接使用教育网联合镜像站,自动选择网络条件最佳的镜像站。配置方式见镜像站帮助。
删除不用的源
- 传统格式(Ubuntu 24.04 之前):删除
/etc/apt/sources.list中对应的行 - DEB822 格式:删除
/etc/apt/sources.list.d/ubuntu.sources
Installing
在软件仓库源种搜索
sudo apt search <package-name>
从软件仓库源安装
sudo apt install <package-name>
查看包的依赖
sudo apt show <package-name>
手动安装 .deb 文件,apt 会自动处理依赖问题
sudo apt install <package-path>
不推荐使用 sudo dpkg -i 进行安装,dpkg 不会自动处理依赖问题。
Uninstalling
查看已安装的包
dpkg -l | grep -i <package_name>
删除包并保留系统配置文件
sudo apt remove <package_name>
删除包及其系统配置文件
sudo apt purge <package_name>
Sanpd
这玩意实在太难用了,尤其是在大陆使用还会容易遇到网络问题,直接删了。
sudo apt purge snapd
Development
自动化脚本
目前主要通过自动化脚本一键配置,参考 https://github.com/squarezhong/dotfiles
一些 dotfiles 中没有的开发环境配置参考:
Java
sudo apt update
sudo apt install openjdk-25-jdk -y
# 如果需要切换默认 jdk 版本
sudo update-alternatives --config java
# 部分软件需要环境变量 JAVA_HOME
echo 'JAVA_HOME="/usr/lib/jvm/java-25-openjdk-amd64"' | sudo tee -a /etc/environment > /dev/null
source /etc/environment
# 验证环境变量是否生效
echo $JAVA_HOME
Miniforge
# 下载 Miniforge 安装脚本
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
# 安装
bash Miniforge3-$(uname)-$(uname -m).sh
# 安装完成后根据提示初始化 conda
LaTeX
参考 All-platform Local LaTeX Solution
NPM
使用 nvm 进行管理
自动化脚本中已经安装了 nvm,也可以选择手动安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash
几个最常用的命令
# 安装特定版本的 node
nvm install 24
# 使用特定版本的 node
nvm use 24
# 设置别名
nvm alias my_alias 22
# 若已安装对应版本 node 可以直接使用别名
nvm use my_alias
修改 NPM 全局安装路径
对于多用户的服务器来说,用户不一定有读写 npm 默认全局安装路径的权限,所以将其修改为安装在用户目录的自定义文件夹。
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
接下来尽情使用 npm 的全局安装命令吧。
Docker
System
Check system info
Check partitions info
$ parted -l
$ df
check date and set timezone
$ date
$ timedatectl list-timezones
$ sudo timedatectl set-timezone Asia/Shanghai
check disk usage
sudo du -h --max-depth=1
Ubuntu check user group
sudo groups <USER>
Change the password
sudo passwd <user_name>
Troubleshooting
双系统中彻底卸载 Ubuntu
献给 Ubuntu 桌面版用户。
- 进入 BIOS,设置 Windows 为第一启动项
- 在 Windows 删除 Ubuntu 所占用的分区。如果你的 Ubuntu 使用独立的 EFI 分区,那么到这一步就已经完成卸载了。
- 如果你的 Ubuntu 和 Windows 共用同一个 EFI 分区,先使用 diskpart 挂载 EFI 分区(终端窗口不用关)
diskpart
list disk
# 选择 EFI 所在的硬盘和分区
select disk 0
list partition
select partition 1
# 分配盘符 P
assign letter = p
- 在文件管理器中选择磁盘 P,删除 Ubuntu 所在的文件夹,比如
\EFI\ubuntu - 回到 diskpart 取消盘符分配并退出
remove letter = p
exit