3. Linux基础与服务器环境配置
说实话,刚入门单细胞分析的同学,很多都在这一步栽过跟头。我自己带过好几拨实习生,头两周基本都在补Linux操作。不是大家不聪明,而是这东西平时接触少。一旦上手scRNA-seq,你会发现99%的工具都跑在Linux服务器上——从数据下载、质量控制、比对、计数到最终的可视化,几乎每一步都离不开命令行。
所以这一章,我不打算讲太深的理论。咱们直奔主题:怎么在服务器上舒服地干活,怎么配环境,怎么不被权限问题搞崩溃。
本章核心目标: 掌握Linux常用命令,学会用conda管理软件环境,熟悉远程连接和数据传输。为后续所有分析打好底座。
3.1 远程连接:SSH 是你的第一道关卡
拿到服务器IP和账号密码后,第一件事就是连上去。别用默认的密码登录太久——我吃过这个亏。有一次我在公共服务器上做项目,忘记改密码,结果第二天发现磁盘空间被占满,查日志才发现有人用我的账号在跑挖矿程序。所以记住了:立刻改密码,配置SSH密钥认证。
基本命令长这样:
ssh username@server_ip -p 端口号
我个人习惯在本地 ~/.ssh/config 里写个别名,省得每次敲一长串:
Host mycluster
HostName 192.168.1.100
User bioinfo
Port 22
IdentityFile ~/.ssh/id_rsa
小技巧: 用 ssh-keygen -t rsa -b 4096 生成密钥对,然后 ssh-copy-id mycluster 把公钥传到服务器。以后登录就免密码了。
如果服务器在你实验室的内网里,还要配置VPN或者跳板机。我见过有人拿着笔记本在咖啡厅远程跑分析,结果因为网速慢断开连接,跑了三天的CellRanger全白费了。所以建议用 tmux 或 screen 保持会话持久。
3.2 文件传输:别再用USB拷数据了
单细胞数据通常很大,一个10x的FASTQ文件夹少说几十GB。用SCP或RSync是最直接的:
# 从本地传到服务器
scp -P 端口号 local_file user@server:~/data/
# 从服务器拉到本地
scp -P 端口号 user@server:~/data/result.csv .
# rsync更高效,支持断点续传
rsync -avzP --progress user@server:~/raw_data/ ./raw_data/
这里有个坑:如果直接用 cp 或 mv 跨服务器操作,那是行不通的。我一开始也犯过这个错,以为Linux跟Windows一样可以直接拖拽。其实跨机拷贝必须用 scp 或 rsync。
警告: 不要在登录节点上直接大量传输大文件,尤其是/home目录满了的时候。我见过有人把实验室服务器的登录节点搞卡死,最后被管理员全组警告。建议使用专用传输节点,或者提交数据传输作业。
3.3 命令行必备命令清单
做单细胞分析,你不需要成为Linux大神,但下面这些命令必须滚瓜烂熟:
| 类别 | 命令 | 作用 |
|---|---|---|
| 文件导航 | ls -lh,cd,pwd |
查看文件、切换目录、显示当前路径 |
| 文件操作 | cp -r,mv,rm -rf |
复制、移动、删除(小心用!) |
| 查看内容 | head,tail,less,zcat |
预览文件,特别是压缩的FASTQ |
| 文本处理 | grep,awk,sed |
筛选、提取列、替换文本 |
| 进程管理 | top,htop,ps aux |
查看CPU/内存使用,杀掉僵尸进程 |
| 磁盘空间 | df -h,du -sh * |
检查磁盘容量和目录大小 |
我经常用 wc -l 统计FASTQ有多少条reads,用 gzip -t 检查压缩包是否损坏。这些在数据质控前必须做一遍。
一个小习惯: 每次运行可能耗时较长的命令前,先 cd /scratch/你的用户目录 切换到工作目录,避免把临时文件扔到/home导致配额爆炸。
3.4 Conda环境管理:避免软件版本冲突
单细胞分析涉及的软件极其繁杂——CellRanger、STAR、samtools、Seurat、Scanpy……不同软件依赖的Python/R版本可能互相打架。我刚开始做的时候,试过手动装各个依赖,结果搞了一周还没跑通一个pipelines。后来改用Conda,世界清净了。
Conda的核心思想:为每个项目创建独立的隔离环境。
# 安装miniconda(如果服务器没有)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建新环境,指定Python版本
conda create -n scrnaseq python=3.9
# 激活环境
conda activate scrnaseq
# 安装核心工具
conda install -c bioconda cellranger star samtools
conda install -c conda-forge r-base r-seurat
注意:不要把所有的包都装进base环境。我见过有人为了省事,直接在base里装了500多个包,最后conda update时版本冲突导致系统崩了。每个分析项目建一个新环境,用完了可以删掉,很方便:
conda deactivate # 退出当前环境
conda env remove -n scrnaseq # 删除环境
推荐配置: 在 ~/.condarc 里添加国内镜像源,加速下载:
channels:
- conda-forge
- bioconda
- defaults
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
show_channel_urls: true
3.5 作业提交系统:SLURM 基础
在实际科研服务器上,你一般不能直接在登录节点跑大型分析,要提交作业到计算节点。最常用的是SLURM。我第一次用的时候完全不理解为什么sbatch xxx.sh之后没反应,后来才知道它只是把任务丢进队列,要用squeue查看。
一个典型的SLURM作业脚本:
#!/bin/bash
#SBATCH -J cellranger_count
#SBATCH -p gpu
#SBATCH -N 1
#SBATCH -n 16
#SBATCH --mem=64G
#SBATCH -t 24:00:00
#SBATCH -o %x_%j.out
#SBATCH -e %x_%j.err
# 激活环境
source /path/to/miniconda3/bin/activate scrnaseq
# 运行CellRanger
cellranger count --id=sample1 \
--transcriptome=/ref/GRCh38 \
--fastqs=/data/sample1_fastq \
--sample=sample1 \
--localcores=16 \
--localmem=60
提交脚本:sbatch run_cellranger.sh
查看队列:squeue -u 你的用户名
取消作业:scancel job_id
关键提醒: 脚本里的 --localmem 值和 #SBATCH --mem 要匹配,否则可能内存不足被杀死。我同事上次就因为这个,跑了20小时的作业被OOM killer干掉了,气得差点砸键盘。
3.6 权限和磁盘管理
实验室服务器经常多人共用,权限控制不好就容易出乱子。你不想自己辛苦分析的中间结果被别人误删吧?
常用命令:
# 查看文件权限
ls -l
# 修改权限:只有自己能读写执行
chmod 700 my_file
# 修改所有者
chown yourname:groupname file_or_dir
另外,磁盘配额也要留意。用 df -h 可以看整体使用率,用 du -sh ~/ 看自己占了多少。如果发现某个目录特别大,又用不着,赶紧清掉。我每次跑完一个项目,都会手动删掉临时文件和重复备份,省得被管理员发邮件警告。
实战建议: 拿到服务器账号后,第一件事就是建立一套自己的目录结构:
mkdir -p ~/project/scRNAseq/{raw_data,processed,results,logs,scripts}
这样后续分析不会乱成一锅粥,也方便写脚本时路径引用。
好了,这一章的内容就到这儿。Linux基础和环境配置是单细胞分析的“基建”,地基不打牢,后面容易塌。多练、多查、多踩坑(但最好别踩我踩过的那些坑),慢慢你就习惯了。记住:命令行不是敌人,是你最强大的朋友。