第一章: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循环是核心。高通量计算就是处理大量文件,循环遍历是最基本的操作。我建议你多练练for、while、if这些控制结构。
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_THREADS | OpenMP线程数 | 高通量计算里特别重要 |
软件包管理这块,不同的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指定安装路径。这样所有东西都装在你自己的目录下,不会影响别人。
本章知识体系
下面这张图,是我梳理的本章核心逻辑。你可以把它当成一个"地图",学完后再回来看,会更有感觉。
好了,第一章的内容就这些。记住:文件系统是基础,脚本是工具,环境变量是桥梁。这三样东西,你练得越熟,后面学高通量计算就越轻松。
最后送你一句话:别怕命令行,它只是看起来吓人。用多了你会发现,敲键盘比点鼠标快多了。我当年也是从"ls"开始,一步步走到现在的。
公众号:蓝海资料掘金营,微信deep3321