跳转至

Linux 入门

约 1133 个字 4 行代码 预计阅读时间 4 分钟

HPC 离不开 Linux,绝大多数的 HPC 生态都围绕 Linux(乃至 RHEL)开发。下到硬件和驱动,上到科学计算、生物信息、AI、工程设计、量化交易,只要涉及高性能的地方就一定有 Linux 的身影。

Linux 的安装在入门基础已经介绍了,这里就介绍一些 Linux 的小技巧。

包管理器

包管理器(Package Manager) 是现代 Linux 发行版的灵魂,它极大地简化了软件的获取、安装、升级和移除过程:

  1. 一键安装:用户只需一条简单命令(如 apt install firefox)即可完成软件安装,无需手动从官网下载、解压、配置编译环境、编译、设置路径等繁琐步骤。
  2. 依赖解析:自动处理软件包之间复杂的依赖关系(Dependencies),确保所需的所有库和组件都能被正确安装。
  3. 仓库管理:软件包来源于集中管理的软件仓库(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++ 编译器 flag
  • LDFLAGS - 连接器 flag
  • PKG_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 认证 socket
  • GPG_AGENT_INFO - GPG agent 信息

这些变量控制不同操作系统和用例的系统行为、应用程序设置和开发环境。

环境变量练习

  1. PATH 可谓是最重要的环境变量之一了。尝试在 bash 里 unset PATH 看看会发生什么?如何恢复?
  2. 在一个脚本里修改环境变量,分别用 bash <script> and source <script> 运行,再 echo $MYVAR,看看环境变量有没有被修改?为什么?