Linux 入门¶
约 1133 个字 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
,看看环境变量有没有被修改?为什么?