4. Linux基础与命令行操作
做RNA-seq分析的,几乎绕不开Linux服务器。不管你是用本地集群,还是租云服务器,都得跟命令行打交道。说实话,我第一次接触Linux时也觉得“这界面也太丑了”,但用顺手之后,你会发现命令行比图形界面高效得多。这一章,我就带你走一遍最核心的部分,保证不堆砌无关命令。
4.1 文件系统:记住这三个关键目录就够了
Linux的目录结构是一个倒挂的树,根是 /。你不需要背所有目录,但下面这几个天天见面:
- /home/你的用户名 — 家目录,简称
~。你下载的测序数据、脚本、分析结果,基本都放这里。 - /tmp — 临时存储,重启就清空。我习惯把大的中间文件扔这里,跑完就删,省得占磁盘。
- /data 或 /project — 有些服务器会有专门的共享存储区,放参考基因组、公共数据库。
路径分绝对路径(从 / 开始)和相对路径(相对当前目录)。举个例子:
# 绝对路径
cd /home/lihua/rnaseq_project
# 相对路径(假设当前已经在 /home/lihua)
cd rnaseq_project
个人习惯:我在家目录下总放一个 projects 文件夹,每个项目一个子目录。时间久了,用 ls -lh 一眼就能看出哪个项目最占空间。
4.2 常用命令:我每天敲得最多的就是这些
RNA-seq分析中,你不会用到所有Linux命令,但下面这张表里的命令,几乎每步都要用。我把它们按场景分好了:
| 场景 | 命令 | 典型用途 |
|---|---|---|
| 浏览文件 | ls -lh tree -L 2 | 看目录结构,确认文件大小 |
| 移动/复制 | cp -r mv rsync -av | 备份原始fastq,重命名输出文件 |
| 查看内容 | head -n 20 less -S | 快速预览fastq、counts表格 |
| 搜索过滤 | grep -c ">" awk '{print $1}' | 统计序列条数,提取某列 |
| 系统信息 | df -h free -h nproc | 检查磁盘、内存、CPU核心数 |
| 任务管理 | nohup command & htop | 后台跑pipeline,监控资源 |
我特别想强调一个命令:less -S。RNA-seq输出的counts矩阵经常很宽,普通 less 会把行折叠,加上 -S 就不会,左右箭头可以横向滚动。这个参数我几乎天天用。
避坑指南:我曾经用 rm -rf 手滑删了跑了一天的结果。从那以后,我习惯先 ls 确认,再用 mv 到临时目录“软删除”,过两天确认没问题再真删。
4.3 权限管理:别让权限卡住分析流程
RNA-seq分析经常需要多人协作,权限设置不对,你会发现 Permission denied 满天飞。理解下面三个东西就够了:
- 读(r=4):可以
cat文件,ls目录。 - 写(w=2):可以编辑文件,在目录里创建/删除文件。
- 执行(x=1):可以运行脚本,
cd进入目录。
数字模式最常用,比如 chmod 755 script.sh 表示自己可读写执行,组和他人只能读和执行。我一般这样设置:
# 自己写的Python/R脚本
chmod 750 run_analysis.py
# 共享给组员的配置文件
chmod 640 config.yaml
# 别人也需要运行的二进制工具
chmod 755 tools/salmon
注意:如果你需要组员往你的项目目录里传数据,记得给目录加执行权限:chmod g+w your_project。否则对方 scp 时会报错,但错误信息里不会直接说缺写权限,排查起来很头疼。
另外,用 umask 0022 可以设默认新建文件的权限。我习惯在自己服务器里设成 0002,这样组员也能写。
4.4 远程服务器连接:SSH才是命根子
你的笔记本电脑不可能扛着几T的fastq运行STAR,真正干活的是远程服务器。SSH是你跟服务器之间的唯一通道。
基本连接命令:
ssh lihua@192.168.1.100
但每次都输密码太麻烦。我强烈建议你配置密钥认证,三步搞定:
- 本地生成密钥对(如果还没有的话)。
- 把公钥拷贝到服务器。
- 以后登录就不用密码了。
# 本地执行
ssh-keygen -t ed25519 -C "your_email@example.com"
# 一路回车,不要设密钥密码(除非你特别在意安全)
# 复制公钥到服务器
ssh-copy-id lihua@192.168.1.100
你还应该配置 ~/.ssh/config,省得每次都打一长串IP。举个例子:
Host cluster
HostName 192.168.1.100
User lihua
Port 22
IdentityFile ~/.ssh/id_ed25519
然后你只需 ssh cluster 就能连上去。我自己的配置文件里写了好几个主机别名,不同服务器对应不同密钥和端口,用起来很方便。
我踩过的坑:有一次改变了服务器IP,但 ~/.ssh/known_hosts 里还记录着旧IP的公钥,SSH会报 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED。遇到这种情况,直接 ssh-keygen -R "新IP" 清除一下对应记录就行,不用删整个文件。
4.5 本章知识体系速览
下面这张SVG图把Linux基础操作的核心关系串了起来,左边是文件系统结构,右边是命令+权限+远程连接,也就是我们这章的三个实战模块。
说到底,Linux命令不用一次性记住所有参数。你只要知道大概有什么命令,用到时查一下手册或历史记录就够了。我刚开始时经常在终端敲 man 查看帮助,后来逐渐形成了自己的命令快捷键清单,贴在显示器旁边。这一章的核心就是建立起“在命令行里解决问题”的感觉,给后面的pipeline搭建铺好路。