ubuntu基础环境学习

Ubuntu的下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04.1/ 系统为 {7259942F-2141-40C1-A2F1-46EB1EC57262}.png 安装界面如图所示 {FAF231F3-B093-4C67-9A6C-0CCBE48887EA}.png 这里我选择的时区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 权限的命令,就不会再提示输入密码了,整个操作流程会更加顺畅。 {3D5A93DA-9D41-475B-B351-7B36C0DB4A03}.png

更换软件源并更新系统

在 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

{F06F85A6-2F38-49BD-A0E2-80E842819A55}.png

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

1
sudo reboot

{CFDD057E-CAB3-42ED-A8D3-7C414F64A989}.png

{CD6F1EAB-74AE-419B-B58B-3942D040B9DA}.png 重启完成后,继续连接即可。

安装基础的系统软件工具

在配置 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

{F28D9FD7-FE3B-4B47-9BA0-890E8C708A7C}.png

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 这里是权限的问题,重启服务器试一下,看看 成功了。 {8E146E7D-1506-4D79-8D48-6E39FF991ABA}.png

有时候,我们需要在企业环境中统一管理 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

{4D4B5C2C-EE64-4C74-9BFF-361B24D13792}.png

安装完成后,强烈建议配置国内镜像源来提升使用体验。使用 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 如果下载速度飞快,那么说明配置正常。

{3503E834-6B34-4BD5-8980-99C0120BDDDE}.png {D048B589-BE5A-406D-972F-B848397C7B02}.png 如上图所示,速度非常快 ,nice。 速度太快,磁盘已经用完了 {4DDBAC5B-755C-46D9-AC3D-DFF3204FB014}.png

Licensed under CC BY-NC-SA 4.0
最后更新于 Apr 11, 2025 07:19 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up