Linux基础与服务器配置:SSH连接、文件系统、权限管理、包管理
我个人习惯,把服务器配置比作「进实验室前先认门」。你空有一身分析本领,连不上机器、找不到数据、装不了软件,那啥也干不了。这一节,我把最常用的几个操作拆开讲。你跟着做一遍,后面三十章都会顺畅很多。
SSH 远程连接:怎么登陆服务器
说白了,SSH 就是你坐在自己电脑前,远程操作实验室那台服务器的「钥匙」。我刚开始做宏基因组时,实验室服务器是台老旧的 Dell 工作站,我靠 SSH 连着它跑了整整两年。
基本命令很简单:
ssh username@server_ip -p 22
举个例子,连一台内网机器:
ssh metagenomics@192.168.1.100 -p 22
第一次连的时候,系统会问你接受指纹。输入 yes 就行。然后输密码。嗯,这里要注意:输密码时啥也不显示,很正常,别慌。
我个人习惯用密钥认证,省得每次输密码:
# 本地生成密钥对
ssh-keygen -t rsa -b 4096 -f ~/.ssh/meta_key
# 把公钥传到服务器
ssh-copy-id -i ~/.ssh/meta_key.pub metagenomics@192.168.1.100
# 后续连接就不用输密码了
ssh -i ~/.ssh/meta_key metagenomics@192.168.1.100
我曾经碰到过一个坑:公钥放上去了,但就是连不上。后来发现是服务器上 ~/.ssh/authorized_keys 的权限设成了 777。正确做法是:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
权限不对,SSH 会直接拒绝密钥认证。你想想看,安全机制就是这么设计的。
为什么会这样?因为 OpenSSH 很较真,它发现 .ssh 目录别人也能写,就认为不安全,直接罢工。所以以后配 SSH,先查权限。
文件系统:Linux 目录怎么逛
Linux 的文件系统和 Windows 不一样。没有 C 盘 D 盘,只有一个根目录 /。宏基因组项目里,我经常打交道的是这几个目录:
| 目录 | 用途 | 我常用的场景 |
|---|---|---|
/home | 每个用户的家目录 | 放个人脚本、配置文件 |
/data | 挂载的大容量存储 | 原始 fastq 文件、中间结果 |
/tmp | 临时文件,重启就清空 | 运行中产生的临时中间文件 |
/usr/local | 系统级软件安装目录 | 手动编译的工具放这里 |
/opt | 第三方软件包 | conda 环境有时也放这里 |
基本的文件操作命令,你得背下来:
pwd # 看当前在哪
ls -lh # 列出文件,带大小
cd /data/project # 切换目录
mkdir -p raw/fastq # 递归创建文件夹
cp -r dir1 dir2 # 复制目录
mv file1 file2 # 移动或重命名
rm -rf temp/ # 删除目录(小心用)
我在实验室看到过好几次悲剧:有人用 rm -rf / data/(注意 slash 后面那个空格),直接把系统删了。我个人习惯,凡是 rm -rf 前都先 ls 一遍确认路径,养成肌肉记忆。
你看看,Linux 的哲学就是「一切皆文件」。硬盘是文件、网卡是文件、进程信息也是文件。实操时,切莫手滑。
权限管理:谁可以读写执行
当你执行 ls -l 时,会看到类似这样的输出:
-rwxr-xr-x 1 root root 12345 Mar 15 10:00 run_metagenome.sh
这串字符 -rwxr-xr-x 分三组:
- 第一组
rwx:文件所有者(owner)的权限——读、写、执行 - 第二组
r-x:同组用户(group)的权限——读、执行 - 第三组
r-x:其他用户(others)的权限——读、执行
数字表示更直观:r=4, w=2, x=1。所以 rwxr-xr-x 就是 755,rw------- 是 600。
常用的权限操作:
chmod 755 run_metagenome.sh # 给所有人加执行权限
chmod 600 secret_data.txt # 只有自己能读写
chown alice:bio data.txt # 修改所有者和组
chgrp bio analysis/ # 修改目录的组
我曾经犯过一个新手错误:用 chmod -R 777 /data 给所有人开放权限。表面上方便了,结果隔壁组的人误删了我的 intermediate 目录,白白重新跑了三天分析。我的教训是:权限尽量收紧,多用组权限来共享。
你想想看,宏基因组数据动不动几百 G,如果权限乱了,恢复起来非常费劲。权限管理其实就是「谁可以改、谁可以用」的问题。
包管理:conda/miniconda 安装与配置
装工具是宏基因组分析最头疼的事之一。每个软件依赖的库版本不同,手动编译能把你逼疯。我早期还在用 apt-get 一个个装,后来遇到一个项目需要 Python 2.7 和 Python 3.8 共存,直接把我搞崩溃了。直到我用了 conda,才真正解放双手。
这里我建议大家装 Miniconda,它更轻量,没有那些你用不到的 Anaconda 全家桶。
安装步骤:
# 下载安装包
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh
# 一路按回车和 yes,接受默认路径就好
装完后,一定要初始化 shell,否则 conda 命令没法直接用:
conda init bash
# 然后关掉终端重新打开,或者 source ~/.bashrc
验证安装:
conda --version
# 应该输出类似 conda 23.10.0
我个人习惯的配置清单:
# 添加常用频道(bioconda 做生信必备)
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
# 设置不自动激活 base 环境(省得每次开终端都慢半拍)
conda config --set auto_activate_base false
# 环境创建示例
conda create -n metagenomics python=3.9
conda activate metagenomics
我建议一个项目一个环境。比如你的宏基因组项目建一个环境:
conda create -n metagenomics python=3.9
conda activate metagenomics
conda install -c bioconda kraken2 bracken fastp megahit
这样不同项目的依赖不会打架。
装包的时候,我建议用 mamba 替代 conda 来安装,速度快得多:
conda install -n base mamba -c conda-forge
mamba create -n metagenomics python=3.9
mamba install -n metagenomics -c bioconda kraken2 fastp
为什么用 mamba?因为它并行下载,而且解决依赖的速度是 conda 的几倍。我早期用 conda 装一个工具,等了 15 分钟还在「Solving environment」,换成 mamba 后一分钟搞定。
有个坑我必须提:conda init 之后,你的 .bashrc 里会被加入一段 conda 脚本。如果你不小心把它删了,conda 命令就会报「command not found」。解决方法是重新跑一次 conda init bash。
还有,不要用 sudo 装 conda 包。conda 环境默认装在你的用户目录下,加 sudo 反而会导致权限错乱。我见过有人 sudo conda install 后,普通用户再也激活不了环境了。
最后,记得定期清理缓存,特别是你频繁创建删除环境时:
conda clean --all
# 能释放几个 G 的空间
好了,这下你的服务器就算「能用」了。SSH 连得上、文件找得到、权限不会乱、工具装得上。后面所有的宏基因组分析,都建立在这个基础上。