Ubuntu的下载地址
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04.1/
系统为
安装界面如图所示
这里我选择的时区Asia/Shanghai
安装 OpenSSH Server
我习惯用一台主力设备来统一管理其他设备。正如我在《2024年终,个人设备盘点》中提到的,我现在使用的是 MacBook Air M3。为了方便在局域网中实现跨设备管理,我们需要在新安装的系统上配置 SSH 服务器。
安装完系统后,打开终端,首先更新软件包索引并安装 openssh-server
:
1
|
sudo apt update && sudo apt install -y openssh-server
|
这里我们先不执行 upgrade
命令。因为在更换软件源之前,升级所有软件包会耗费大量时间,我们把这步放到后面再做。
SSH 免密登录配置
当我们完成程序安装后,可以通过 ssh username@host-ip
命令来访问 Linux 设备。如果你的本地用户名和 Linux 设备上的登录用户名相同,那么可以直接省略 username。
第一次连接时,你会看到这样的提示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
ssh-copy-id xfhuang@192.168.91.129
/usr/sbin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/xfhuang/.ssh/id_ed25519.pub"
/usr/sbin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/sbin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
xfhuang@192.168.91.129's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'xfhuang@192.168.91.129'"
and check to make sure that only the key(s) you wanted were added.
xfhuang ~ v3.13.1 16:26
ssh xfhuang@192.168.91.129
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
Expanded Security Maintenance for Applications is not enabled.
159 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
Last login: Sat Jan 25 16:26:46 2025 from 192.168.91.1
|
执行特权命令时不用重复输入密码
在日常使用 Linux 系统时,不管是通过 SSH 远程登录设备,还是直接打开本地终端,当我们需要执行一些系统维护操作(比如更新软件包)时,都会遇到这样的情况:使用 sudo
命令后,系统会要求我们输入密码。
1
2
|
sudo apt update
[sudo] password for soulteary:
|
虽然这个设计出发点是安全考虑,但在个人使用场景下,频繁输入密码确实会影响工作效率。其实我们可以通过一个更优雅的方式来解决这个问题:在 sudoers.d
目录下创建独立的用户权限规则文件,而不是直接修改系统的默认配置。
只需要执行下面这条命令:
1
|
echo "`whoami` ALL=(ALL) NOPASSWD:ALL" | sudo tee "/etc/sudoers.d/dont-prompt-$USER-for-sudo-password"
|
设置完成后,我们先按 CTRL+D
退出当前会话,然后重新使用 ssh <设备 IP>
登录系统。这时候再执行任何需要 sudo
权限的命令,就不会再提示输入密码了,整个操作流程会更加顺畅。

更换软件源并更新系统
在 Ubuntu 24.04 中,系统引入了全新的软件源配置格式。现在的源配置文件内容更加结构化且清晰,主要包含了软件类型 (Types)、源地址 (URIs)、版本代号 (Suites) 以及组件 (Components) 等信息。
1
2
3
4
5
6
7
8
9
10
11
12
|
xfhuang@xfhuang-VMware-Virtual-Platform:~$ cat /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: http://jp.archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
|
为了加快国内用户的下载速度,我们可以用一行命令将源切换到清华镜像:
1
|
sudo sed -i 's/\(archive\|security\).ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources && sudo apt update && sudo apt upgrade -y
|
切换完源后,建议执行上文中一直没有执行过的系统更新 upgrade
命令了:
1
|
sudo apt update && sudo apt upgrade -y
|

因为更换了国内的软件源,所以安装过程中可以节约大量时间。接下来重启一下

重启完成后,继续连接即可。
安装基础的系统软件工具
在配置 Linux 开发环境时,有一些基础且实用的系统工具是必不可少的。下面我来分享下这些工具的安装方法,它们能让你的开发工作更加顺畅。
首先是一些基础开发工具包,包括 build-essential(编译工具)、git(版本控制)、curl 和 wget(文件下载)、net-tools(网络工具)等:
1
2
|
# 安装基础开发工具
sudo apt install -y build-essential git curl wget net-tools
|
遇到报错
1
2
3
|
Package build-essential is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
|
修改 /etc/apt/sources.list.d/ubuntu.sources文件,只保留如下信息
1
2
3
4
5
6
7
8
9
10
11
12
|
xfhuang@xfhuang-VMware-Virtual-Platform:~$ cat ```bash
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
|
1
2
3
4
5
|
其次是一些系统监控工具,它们能帮助你实时观察系统状态:
```bash
# 安装系统监控软件
sudo apt install -y neofetch glances htop iftop iotop bmon dstat
|
最后是文本处理和终端管理工具:
1
2
3
4
|
# 安装常用文本工具
sudo apt install -y vim jq
# 安装常用终端复用工具
sudo apt install -y tmux screen
|
当然,这只是一个基础配置建议,你完全可以根据自己的实际需求来增减工具。比如如果你更习惯使用 nano 编辑器,可以用 nano 替换 vim;如果你不需要终端复用,可以去掉 tmux 和 screen 的安装。
上面的每个工具都有其特定用途:
htop
和 glances
用于系统资源监控
iftop
和 iotop
分别用于网络和磁盘 IO 监控
tmux
和 screen
让你能更好地管理终端会话
jq
则是一个强大的 JSON 处理工具
选择合适的工具,能让你的开发工作事半功倍。
ZSH 的快速安装与简单配置
我日常中的 SHELL 环境是 ZSH,搭配经典的开源软件 OH-MY-ZSH,能够节约大量时间。网上已经有很多关于它们的详细介绍,这里我就直接分享一下最实用的安装和配置步骤。
在开始之前,首先需要安装 zsh
(git
我们前面已经装好了):
1
|
sudo apt install -y zsh
|
虽然 OH-MY-ZSH 官网提供了标准安装方式,但考虑到网络环境不稳定的问题,我们可以使用“清华镜像源”来加速安装:
1
2
3
|
git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git
REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh ohmyzsh/tools/install.sh
rm -rf ohmyzsh
|
安装过程中会询问是否将 zsh
设置为默认 shell,大家可以根据个人需求选择。安装完成后,我们就可以开始打造自己的专属终端了。
这里我要分享一个非常实用的插件 zsh-autosuggestions
。它不同于普通的自动补全,而是会根据你的历史命令智能提示,让终端操作更加顺滑:
1
|
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
安装好插件后,需要修改配置文件来启用它:
1
|
sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions)/' ~/.zshrc
|
我在多个设备上都安装了OH-MY-ZSH,为了方便区分,我会给非主力设备换个主题:
1
|
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="half-life"/' ~/.zshrc
|

Docker 基础环境配置
首先,让我们从 Docker 的基础安装开始。我写了一个完整的安装脚本,它会自动完成证书配置、软件源设置和Docker的安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo gpasswd -a ${USER} docker
|
将上面的内容保存为 docker.sh
,然后执行 bash docker.sh
,等待安装完成后,我们可以通过运行 docker info
命令来验证安装是否成功。输出结果会显示 Docker 的详细信息,包括版本号、运行状态、系统配置等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# docker info
Client: Docker Engine - Community
Version: 27.5.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.19.3
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.32.4
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.5.0
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc version: v1.2.4-0-g6c52b3f
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.8.0-41-generic
Operating System: Ubuntu 24.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 20
Total Memory: 62.32GiB
Name: ThinkBook-14-G6-IRL
ID: b9a0619f-1a5d-4810-97e4-db3491519cea
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
|
这里遇到一个报错:
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info
这里是权限的问题,重启服务器试一下,看看
成功了。

有时候,我们需要在企业环境中统一管理 Docker 的网络访问,包括镜像获取、存储和访问认证。这时候就需要为 Docker 配置代理服务器。代理配置分为两个部分:Docker 服务守护进程 (dockerd
) 代理配置、Docker 客户端代理配置。
先从 Docker 后端服务开始:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 创建专门的配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 创建代理配置
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://proxy-host:port"
Environment="HTTPS_PROXY=http://proxy-host:port"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
EOF
# 重新加载配置并重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
|
接着,配置 Docker 客户端的代理(影响 docker build
过程):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 创建配置目录
mkdir -p ~/.docker
# 创建或编辑配置文件
tee ~/.docker/config.json << EOF
{
"proxies": {
"default": {
"httpProxy": "http://proxy-host:port",
"httpsProxy": "http://proxy-host:port",
"noProxy": "localhost,127.0.0.1,docker-registry.example.com,.corp"
}
}
}
EOF
|
完成配置后,我们可以通过简单的命令来验证代理是否生效。
1
2
3
4
5
|
# 检查服务级别代理
sudo systemctl show --property=Environment docker
# 检查配置是否生效
docker run --rm alpine wget -qO- http://ipinfo.io
|
在实际配置时,请将 proxy-host:port
替换为实际的代理服务器地址和端口,如果你有不需要代理的地址,尤其是局域网内的私有仓库的地址,可以使用 NO_PROXY/noProxy
来指定不需要代理的地址。如果你的地址需要鉴权,可以使用下面的 URL 格式:http://user:password@proxy-host:port
。
如果你想继续折腾下 Docker 和 GPU 环境联动,可以参考下面两篇文章:《基于 Docker 的深度学习环境:入门篇》、《基于 Docker 的深度学习环境:Windows 篇》(基于 WSL2 Linux 环境)。
Python 基础环境配置
在我 2022 年的文章中曾介绍过 Conda 这个实用工具:“使用 Conda 简化 Python 程序环境准备工作”。趁着这篇文章,让我们一起来看看 2025 年最新的使用方法和一些实用技巧。
我们可以在 Conda 官网存档网站 找到各种 CPU 架构的安装包,相比较几年前的 500M 的安装包体积,现在已经膨胀到了 1GB 左右的尺寸:
我们以 Ubuntu(x86架构)为例,安装过程非常简单。首先下载安装包:
1
|
curl -LO https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
|
如果你想要更快的下载速度,推荐使用Conda 的清华源。我测试时速度能达到 120MB/s,一个 1GB 出头的安装包仅需 8 秒就能下载完成。
1
2
3
4
5
|
# curl -LO -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1051M 100 1051M 0 0 118M 0 0:00:08 0:00:08 --:--:-- 120M
|
下载完成后,还是只需要一个命令就能启动安装:
1
|
bash Anaconda3-2024.10-1-Linux-x86_64.sh
|

安装完成后,强烈建议配置国内镜像源来提升使用体验。使用 vim ~/.condarc
编辑配置文件,添加清华源相关配置:
1
2
3
4
5
6
7
8
9
10
|
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
|
配置完成后,按下 CTRL+D
退出登录,然后再次 ssh
到设备上(重新登录使配置生效)。接下来,我们可以通过以下命令来验证配置是否正常:
1
2
3
|
eval "$(/home/xfhuang/anaconda3/bin/conda shell.zsh hook)"
conda clean -i
conda create -n myenv numpy
|
使用方法
镜像站提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch 等,各镜像站镜像的第三方源并不相同,可以参考下方「第三方镜像源」一节)的镜像,各系统都可以通过修改用户目录下的 .condarc
文件来使用镜像站。
不同系统下的 .condarc
目录如下:
- Linux:
${HOME}/.condarc
- macOS:
${HOME}/.condarc
- Windows:
C:\Users\<YourUserName>\.condarc
注:
- Windows 用户无法直接创建名为
.condarc
的文件,可先执行 conda config --set show_channel_urls yes
生成该文件之后再修改。
- 由于更新过快难以同步,TUNA 等镜像站不同步
pytorch-nightly
, pytorch-nightly-cpu
, ignite-nightly
这三个包。
- 如果您正在从某一镜像源切换到另一镜像源,请检查镜像源是否同步了您所需要的 repo,以及该 repo 是否支持您使用的平台 (e.g. linux-64)。
- 为了保证以下配置在所有镜像站可用,配置中只加入了少量必须的第三方源,您可以在下方的列表中自行寻找并添加其他第三方源。
channels:
即可添加 Anaconda Python 免费仓库。
使用下列命令清除索引缓存,并安装常用包测试一下。
conda clean -i
conda create -n myenv numpy
如果下载速度飞快,那么说明配置正常。
如上图所示,速度非常快 ,nice。
速度太快,磁盘已经用完了
