写在开头:我曾经跟过各种视频教程详细学习Linux的系统使用,各位老师讲解得也非常详细,但很多内容对于我一个初学者来说非常晦涩难懂,并且很多实际的测序数据分析过程也用不到。我的此次分享主要是讲解生信分析实战过程中常用的Linux操作。
我们以bulk转录组为例
首先我们拿到了公司返回的测序fastq文件,如C1_R1.fq.gz,需要建立一个文件夹(也叫目录)来存放本次分析所用到数据、得到的结果
mkdir RNA-seq
mkdir fastq
#或者加上-p参数,可以实现创建连续多层级的目录
mkdir -p RNA-seq/fastq
#创建成功后使用ls命令查看目录下的所有文件夹和文件,-l用于显示该目录中的文件和文件夹的详细列表。
ls -l
#如果目录创建错误,使用rm命令删除,其中-r参数是向下递归 删除RNA-seq目录及其下所有文件夹和文件,如果只删除文件不用加上-r,-f是直接强行删除,无任何提示,慎用。
rm -rf RNA-seq
#注意无论是删除目录还是文件,都需要进入到它的上级目录下才能成功删除,用cd命令切换路径
cd /home/RNA-seq/
#目前是处于home目录下的RNA-seq目录,需要返回到home目录下,再删除RNA-seq目录下的所有内容。其中第一个/是根目录,是Linux系统中所有目录和文件的起始点
cd /home/ #可以写绝对路径
cd ../ #也可以使用相对路径,../是返回上一级目录,./是当前目录
接下来
需要安装用于分析的包。首选使用conda,Conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。可以避免包的版本冲突,可以快速安装、运行和更新软件包及其依赖项。避免由于包的依赖包未安装导致包不能使用。
其次对于不能使用conda下载的安装包或者网站上的文件等,使用wget命令,wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。
#首先去清华镜像源去下载conda (https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/),-c是可以继续中断的下载
wget –c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh
#更改文件的权限
chmod 777 Anaconda3-2022.10-Linux-x86_64.sh
linux下的文件的权限包括可读(r=4),可写(w=2),可执行(x=1)。图中就是ls -l命令输出的详细信息,第1列就是文件夹(d)或文件(-)调用的权限,调用权限分为三级 : 文件所有者(Owner)、同组用户(Group)、其它用户(Other Users),每一级都有r w x三种权限。第2列是链接数,表示有多少不同的文件名指向同一个节点。第3列是文件或目录的所有者的用户名。第4列是文件或目录的所属的组名。第5列是文件的大小(以字节为单位)。第6列是最后修改时间。第7列是文件或目录的名称。
#运行安装,刚刚下载的文件是一个安装脚本(.sh)
bash Anaconda3-2022.10-Linux-x86_64.sh
安装完成后,选择 yes,自动初始化 Anaconda3 环境
退出终端,重新登录,可以看到用户名前出现 (base) 提示,说明已经成功激活 Anaconda 环境
#为了保证各种版本的包之间有兼容性,conda 环境管理器允许用户创建多个隔离环境,通过虚拟环境实现。
#列出conda下的环境
conda env list
#创建名为bulk_RNA-seq的新环境,并在该环境下安装名python 3.10版本
conda create -n bulk_RNA-seq python=3.10
#激活该环境
conda activate bulk_RNA-seq
#退出该环境
conda deactivate
#删除环境
conda remove --name bulk_RNA-seq
#删除特定环境下的安装包
conda remove -name bulk_RNA-seq python=3.10
#channels是conda下载包的镜像网站,在安装包的时候,conda会依次查找各个channnels,直到某个channel中包含所需的packages
#查看通道 默认最近添加的通道为最高优先级
conda config --get channels
#添加通道,如使用清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
#删除通道
conda config --remove channels channel_name
#编辑.condarc文件改变通道优先级, 排序越靠前,优先级越高,
#vi是文件编辑器,i:切换到插入模式,在光标位置插入文本。Esc:从任何模式返回到正常模式。:w:保存文件。:q:退出编辑器。:wq:保存文件并退出。:q!:不保存更改强制退出。
vi ~/.condarc
#conda安装包,在浏览器搜索包名+conda,进入anaconda.org网站,其中可以找到安装该包的安装命令
conda install bioconda::fastqc
#如果要安装旧的版本方法:先看看有哪些可以安装的版本
conda search fastqc
#安装指定版本的软件
conda install fastqc=0.11.7
在实际应用中,conda安装包的速度还是很慢,有时候由于源不合适找不到包,无法成功安装。因此出现了mamba,它是 Conda 的一个替代品,Mamba 与 Conda 使用相同的命令行语法,可以作为 Conda 的直接替换。Mamba 在解析包依赖和安装过程中使用了 C++ 实现的 libsolv 库,而 Conda 使用的是 Python,运行效率显著提高,可以进行并行的下载,使用管理工具中的 libsolv,可以更快的解决环境依赖问题。
mamba 的使用也比较简单,首先使用 conda 安装 mamba,后面所有用到 conda 的地方,
都可以使用 mamba 替换即可
#切换到base 环境中进行使用,确保我们确实是在base 环境中
conda activate base
conda update conda
#依据其他教程,安装并设置 libmamba 求解器,ibmamba 求解器比默认的 conda 求解器快得多,尤其是在处理大规模依赖关系时。切换到 libmamba 可以显著提升包管理的性能和速度。
conda install conda-libmamba-solver
conda config --set solver libmamba
#安装,装在base 环境中的包在所有的小环境中依然可以调用,因此装在base环境中之后不需要再每个环境中再重新安装一遍。
conda install conda-forge::mamba
但是我用conda下载mamba总是停在solving environment这一步,于是我直接在github上下载安装包(Release Release 24.3.0-0 · conda-forge/miniforge · GitHub),直接bash Mambaforge-Linux-x86_64,即可安装成功,成功替代conda,以后运行conda命令时直接将conda换为mamba。
我可以使用mamba成功安装大部分包,同时安装速度极大提升。但需要注意的是在安装部分包时,可能会出现RuntimeError: Multi-download failed
这说明源可能已经不可用,例如清华的 conda 镜像源已经废弃,需要去掉有问题的源,或者是修改成可以使用的不会报错的镜像源。使用mamba安装一般不需要自己添加一些镜像源,用conda自带的即可。
vi ~/.condarc
#修改成
channels:
- bioconda
- conda-forge
- defaults
show_channel_urls: true
channel_priority: flexible
或者使用wget命令直接下载工具包的压缩文件tar.gz
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/3.1.1/sratoolkit.3.1.1-centos_linux64.tar.gz
#tar是压缩/解压缩的命令,-x解压缩,-c建立压缩,-z:gzip文件,-v :显示所有过程,-f :使用档名,在 f 之后要立即接文档名!不要再加参数!
tar zxvf sratoolkit.3.1.1-centos_linux64.tar.gz
#在.bashrc文件中加入环境路径
vi ~/.bashrc
export PATH="/home/.../software/sratoolkit.3.1.1-centos_linux64/bin:$PATH"
#输入自己的文件路径,保存并退出
source ~/.bashrc
#接下来就可以成功使用工具了
接下来将使用安装的包进行分析了。
有些命令可能需要耗时几个小时,如果不慎电脑休眠,联网失败,命令可能就停止运行了。这时候如果把命令放在后台,即使终端关闭命令也会在后台运行,使用到的命令是nohup &
#nohup 命令 & 它会输出一个nohuo.out文件,是该命令的运行日志,可以检查命令是否正确运行
nohup hisat2-build -p 4 --ss GRCm38.splice_sites.gtf --exon GRCm38.exons.gtf genome.fa genome &
对于一些文本文件(.txt、.csv等),日志文件(.log等)、脚本文件(.sh等)、代码文件(.py、.html、.php等)、配置文件(.conf等)等,可以使用命令来查看文件的内容。
#我们就以这个nohup.out为例
#查看整个文件的内容,将整个文件的内容输出到终端界面上
cat nohup.out
#分页查看文件的内容。less命令的用法与more命令类似,它可以用来随意浏览文件,且支持翻页、搜索,还支持向上翻页、向下翻页。
less nohup.out
#less命令搜索文件内容可以通过 / 进行搜索,运行命令后按下 / 键,输入您想要搜索的内容,按下回车键。less 将会高亮显示匹配的内容,并且您可以通过按下 n 键来查看下一个匹配项,按下 N 键来查看上一个匹配项
#分页查看文件内容,more命令类似cat,不过会以一页一页的形式显示,更方便使用者逐页阅读,按Enter键就往下一页显示,按B键就会往回一页显示,按Q键会退出查看,而且还有搜寻字串的功能。
more nohup.out
#两者的不同在于:less可以按键盘上下方向键显示上下内容,而more不能通过上下方向键控制显示。less不必读整个文件,加载速度会比more更快。less退出后终端不会留下刚显示的内容,而more退出后会在终端上留下刚显示的内容。阅读到文件结束时,less不会退出,而more会。相比more,less提供更加友好的检索
#查看文件的前10行(默认)
head nohup.out
#查看文件的后5行,默认n为10
tail -n 5 nohup.out
这是比较基础的数据分析可能会用到的一些命令,因为没有结合数据进行实战,肯定会有所遗漏。我会在接下来的教程中继续补充的。