Linux¶
约 1131 个字 4 行代码 预计阅读时间 4 分钟
HPC 离不开 Linux,绝大多数的 HPC 生态都围绕 Linux(乃至 RHEL)开发。下到硬件和驱动,上到科学计算、生物信息、AI、工程设计、量化交易,只要涉及高性能的地方就一定有 Linux 的身影。
Linux 的安装在入门基础已经介绍了,这里就介绍一些 Linux 的小技巧。
包管理器¶
包管理器(Package Manager) 是现代 Linux 发行版的灵魂,它极大地简化了软件的获取、安装、升级和移除过程:
- 一键安装:用户只需一条简单命令(如
apt install firefox)即可完成软件安装,无需手动从官网下载、解压、配置编译环境、编译、设置路径等繁琐步骤。 - 依赖解析:自动处理软件包之间复杂的依赖关系(Dependencies),确保所需的所有库和组件都能被正确安装。
- 仓库管理:软件包来源于集中管理的软件仓库(Repositories),便于分发、更新和安全审计。
主流 Linux 发行版都拥有自己的包管理器:
- APT (Advanced Package Tool):是 Debian、Ubuntu 及其衍生版的默认包管理器。其基本用法介绍详见此文档。
- YUM (Yellowdog Updater, Modified) / DNF (Dandified YUM):是 Red Hat Enterprise Linux (RHEL)、CentOS、Fedora 等发行版使用的包管理器(DNF 是 YUM 的现代替代品)。YUM 速查表, DNF 官方文档。
这些包管理器的核心功能和使用逻辑(安装 install、更新 update/upgrade、查询 search、移除 remove 等)非常相似,查阅各自文档即可快速掌握。
在国内访问国外软件仓库源速度往往较慢。为了显著提升下载速度,强烈建议将系统的软件源替换为国内的镜像源(如 TUNA, USTCLUG, 阿里云)。各大发行版均有详细的换源教程可供参考。
环境变量¶
在操作系统概论中介绍过,环境变量是进程共享的,会复制地继承给子进程。它本质上是一个 string 到 string 的键值映射,不同于 argument 仅仅传给一个进程,当一个进程设置了一个环境变量,整个进程树都会复制地共享它。由于这个共享特性,我们近似可以认为它是全局的、所有进程都可以访问的,尤其是在 Bash 中设置,而用此 bash 启动子进程时。在 Bash 里通常用 export VARNAMME=XXX 来设定环境变量。
由于环境变量的全局共享性,有一些约定俗成的环境变量:
System Path Variables
PATH- 定义了寻找可执行文件的路径。事实上一个程序要被启动,必须找到其绝对路径,再交给内核加以加载;Shell 通过 PATH 定义了寻找路径,让我们只需记忆程序名作为命令,无需记住并输入其冗长的储存位置LD_LIBRARY_PATH- 类似 PATH,不过是为动态链接器 ld.so 找到动态链接库使用的;可用于注入不同版本的动态链接库
Network & Proxy
http_proxy/HTTP_PROXY- HTTP 代理服务器,用于在无法直接访问外网的内网机器访问外网使用https_proxy/HTTPS_PROXY- HTTPS 代理服务器,同上
proxy 环境变量的作用
在命令行中运行
# 设置proxy为一个实际上没有运行服务的端口
export https_proxy=http://localhost:8000
然后运行
curl -v https://xflops.sjtu.edu.cn
查看输出内容。 接着运行
curl -v http://www.baidu.com
查看输出内容。
运行 unset https_proxy 后再次运行上述两个命令,查看输出是否存在区别。
System Configuration
HOME- 用户家目录,注意结尾不带/。USER- 当前用户名SHELL- 默认 shell 程序PS1- 主提示符字符串,在 shell 光标前显示。Bash 配置可见文档LANG/LC_ALL- 语言设置
Development Tools
CC/CXX- C/C++ 编译器CFLAGS/CXXFLAGS- C/C++ 编译器 flagLDFLAGS- 连接器 flagPKG_CONFIG_PATH- pkg-config 搜索路径
HPC/Parallel Computing
OMP_NUM_THREADS- OpenMP 线程数MPI_ROOT- MPI 安装路径CUDA_VISIBLE_DEVICES- 可见 CUDA 设备列表SLURM_*- 一些 SLURM 变量
Application Specific
TMPDIR/TMP- 临时路径DISPLAY- X11 显示服务器SSH_AUTH_SOCK- SSH 认证 socketGPG_AGENT_INFO- GPG agent 信息
这些变量控制不同操作系统和用例的系统行为、应用程序设置和开发环境。
环境变量练习
PATH可谓是最重要的环境变量之一了。尝试在 bash 里unset PATH看看会发生什么?如何恢复?- 在一个脚本里修改环境变量,分别用
bash <script>andsource <script>运行,再echo $MYVAR,看看环境变量有没有被修改?为什么?