第一章:Linux系统基础——高通量计算的基石

说实话,很多刚接触高通量计算的朋友,第一关就卡在Linux上。我见过不少人在Windows下跑得飞快的脚本,一上集群就各种报错。嗯,这很正常。Linux不是Windows,它的设计哲学完全不同。但只要你掌握了核心的几个点,后面就会顺风顺水。

1.1 文件系统与权限管理

Linux的文件系统,说白了就是一棵倒挂的树。根目录是/,所有东西都从这里长出来。我刚开始用的时候,总觉得这结构很别扭,后来习惯了才发现,这种设计其实特别清晰。

核心目录速查表:

目录用途我的经验
/home用户家目录你的代码、数据都放这里
/tmp临时文件跑任务时中间结果可以扔这,但重启就没了
/var可变数据日志文件常在这,排查问题先看这里
/opt第三方软件我习惯把编译好的软件放这

权限管理这块,我踩过不少坑。Linux的权限分三组:所有者、所属组、其他人。每个组有读(r)、写(w)、执行(x)三种权限。

我曾经犯过的错:有一次在集群上跑任务,脚本死活没权限执行。查了半天,发现是chmod没给对。记住:chmod +x script.sh是基本操作,但别忘了检查目录的权限——目录需要x权限才能进入。

常用的权限命令就这几个:

# 查看权限
ls -l filename

# 修改权限(数字法)
chmod 755 script.sh   # 所有者rwx,组和他人r-x

# 修改权限(符号法)
chmod u+x script.sh   # 给所有者加执行权限

# 修改所有者
chown user:group filename

你想想看,为什么高通量计算特别在意权限?因为集群上几百人共用资源,权限设错了,要么别人看不了你的数据,要么你的任务被误删。我建议你养成习惯:数据目录设755,敏感文件设600

1.2 Shell脚本基础

Shell脚本,说白了就是把一堆Linux命令串起来自动执行。高通量计算里,你不可能手动一个个提交任务,必须靠脚本。

我个人习惯用Bash,它是最通用的。写脚本时记住几个要点:

  • 第一行写shebang#!/bin/bash,告诉系统用哪个解释器
  • 变量赋值别加空格name="hello",不是name = "hello"
  • 引用变量用花括号${var},避免歧义

我的小技巧:写脚本时,set -e一定要加。它的作用是:脚本中任何一条命令失败,整个脚本就停止。不然你可能会发现,前面的命令报错了,后面的还在傻傻地跑,最后结果全是错的。

来看一个高通量计算中常用的脚本模板:

#!/bin/bash
set -e

# 参数设置
INPUT_DIR="/data/input"
OUTPUT_DIR="/data/output"
THREADS=16

# 创建输出目录
mkdir -p ${OUTPUT_DIR}

# 遍历输入文件
for file in ${INPUT_DIR}/*.fastq; do
    basename=$(basename ${file} .fastq)
    echo "Processing ${basename}..."
    
    # 核心计算命令
    some_analysis_tool \
        -i ${file} \
        -o ${OUTPUT_DIR}/${basename}_result.txt \
        -t ${THREADS}
    
    echo "Done: ${basename}"
done

echo "All tasks completed!"

这个脚本里,for循环是核心。高通量计算就是处理大量文件,循环遍历是最基本的操作。我建议你多练练forwhileif这些控制结构。

1.3 环境变量与软件包管理

环境变量,你可以理解成系统的"全局设置"。最常用的就是PATH——系统去哪里找可执行文件。

我在项目中遇到过一个问题:明明装了某个软件,但命令行就是找不到。后来发现是PATH没设对。检查方法很简单:

# 查看当前PATH
echo $PATH

# 临时添加路径
export PATH=/opt/mysoftware/bin:$PATH

# 永久添加(写入~/.bashrc)
echo 'export PATH=/opt/mysoftware/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

环境变量速查:

变量名作用说明
PATH可执行文件搜索路径最常用,改完要source
LD_LIBRARY_PATH动态库搜索路径编译好的软件常需要设这个
HOME用户家目录一般不用改
OMP_NUM_THREADSOpenMP线程数高通量计算里特别重要

软件包管理这块,不同的Linux发行版不一样。Ubuntu用apt,CentOS用yum。但在高通量计算集群上,你往往没有root权限。这时候怎么办?

我的做法是:用conda或者自己编译。Conda是个神器,它可以在用户目录下安装软件,不需要root权限。比如:

# 安装conda(一次性的)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

# 创建环境并安装软件
conda create -n myenv python=3.9
conda activate myenv
conda install samtools bedtools

注意:集群上不要装太多conda环境,每个环境都会占空间。我一般只建两三个:一个基础环境,一个项目专用环境。用完就删,保持干净。

自己编译软件时,记得用./configure --prefix=$HOME/local指定安装路径。这样所有东西都装在你自己的目录下,不会影响别人。

本章知识体系

下面这张图,是我梳理的本章核心逻辑。你可以把它当成一个"地图",学完后再回来看,会更有感觉。

Linux系统基础 文件系统与权限 目录结构 权限管理 chmod/chown 安全策略 Shell脚本基础 变量与参数 循环控制 条件判断 错误处理 环境变量与包管理 PATH设置 Conda使用 源码编译 模块管理 高通量计算 = 文件管理 + 脚本自动化 + 环境配置 三者缺一不可,建议反复练习

好了,第一章的内容就这些。记住:文件系统是基础,脚本是工具,环境变量是桥梁。这三样东西,你练得越熟,后面学高通量计算就越轻松。

最后送你一句话:别怕命令行,它只是看起来吓人。用多了你会发现,敲键盘比点鼠标快多了。我当年也是从"ls"开始,一步步走到现在的。


公众号:蓝海资料掘金营,微信deep3321