日常瞎掰
为期两天的RNAseq分析实操课程结束了,前面一直忙着准备课程相关的内容没有时间更贴,今天来写一写,内容稍微有点多,阅读起来需要一点耐心。培训中linux
系统使用入门由本人负责,在准备的时候心里预期给大家讲解一些范式,正所谓授之以鱼,不如授之以渔。可效果似乎没有达到预期,大家心里对linux
使用没有概念的时候,好像范式显得有点深奥让人一时难以接受。也许对系统一无所知的时候使用的过程中去理解会更加深刻。但是,学习嘛,事先心里有个概念,然后通过操作将实践与概念联系起来也不失为一个好方法。
当然,之所以学习linux
最重要的目的是利用服务器中的资源来分析数据,因为现在的组学数据量都很大,所谓数据量大有两层含义,一是单个样本数据量大,这就需要大的计算资源来操控这些数据,如在分析组学数据的时候,前期的处理步骤如mapping
等就要借助服务器来实现,即利用服务器的内存、存储、cpu等资源;二是样本量多,此时并行就可以大大缩短处理多个样本的时间,如mapping
不仅耗费计算资源,运行起来也需要一定的时间,如果一个个来处理就得浪费更多的时间,所以就有必要借助批处理并行的方式来节约时间,即利用服务器的并行计算能力。当然,这里所说的并行计算是狭隘的,这里不深究了。
也许使用服务器的原因,可以用一句话概括:有限的时间做更多的事,时间是有限且宝贵的。正所谓天下武功唯快不破,有时候抢先一步可能就是不一样的期刊了。说的有点跑偏了,咱们言归正传。那么,该如何开始linux
系统入门学习呢?个人觉得首先得弄明白后面的几个方面。
交互方式
如上图所示,使用计算机的方式无非就是GUI
、CLI
两种,前者大家都很熟悉,咱们日常使用的电子产品都是采用这种图形界面的方式实现人机交互,只需点击操作即可完成任务,很直接易于接受;而服务器基本都是采用后者,即通过命令的方式(命令行)来实现人机交互完成任务,给人一种晦涩难懂的感觉。那为什么要采用这种交互方式呢?
答案很简单,命令行模式无需额外消耗图形界面所带来的资源开销,更重要的是便于批处理的实现。正所谓,有舍才有得,舍弃图形界面的可视化,得到批处理的强大能力。虽然使用的门槛稍微高了一点,但一旦熟悉就会发现命令行操作才是计算机使用的本质。
如上图所示是服务器的抽象框架,做为使用者咱们没有必要了解那么清楚,只需知道一点使用服务器的时候是通过一个叫做shell
的命令接口应用程序来指挥服务器干活的。shell
种类很多,最常用的有sh
、bash
等,其中bash
最为普遍,没有必要纠结shell
的类型,就好像会使用office word
换成WPS
照样可以编辑文档一样。
服务器相对于自己的电脑来说是远程资源,如果想要使用必须借助一个俗称终端(terminal)的软件来登录,才能使用服务器里面的一切资源。这类软件有很多大家可以自行选择,之前本人也有介绍过一款终端软件,大家可以参考:MobaXterm: 功能强大的终端。登录后,便可以在服务器的世界里遨游。
命令使用
在服务器里面,一切操作都要通过相应的命令来完成,这里列举一些文件操作中常用的命令:
- 基础命令
pwd:获取当前路径
ls:查看目录内容
cd:切换工作目录
head:查看文件前topN行内容
tail:查看文件后topN行内容
cat:查看文件内容
less:交互式查看文件,由于是交互式查看,结束查看需要用q来停止
touch:创建文件
mkdir:创建目录
cp:复制文件或目录
mv:移动或重命名文件及目录
ln:创建链接
find:搜索文件及目录
sort:文件排序
rm:删除文件或目录
- 文件处理
awk:文件内容的增删改查
sed:文件内容的增删改查
grep:文件内容的匹配
- 脚本编辑
- vim:linux系统自带的文本编辑器,可用来编辑shell脚本,对于初学者使用门槛稍微有点高。同时,注意不要该命令用来打开很大的文件。
命令的使用这里就不做详细介绍了,毕竟每一个命令使用起来都不是一两句话能说完的,尤其是awk
,sed
,grep
这些可用处理文件的命令。之前有介绍过使用awk
的做文件去重的用法,大家可以参考:文件去重:awk的高级用法。linux
的命令那么多,就拿基础命令来说,咱们没有必要记住每一个命令的详细用法,只需知道指定的操作应该有谁来完成,使用时可以使用特定方法的详细帮助文档,实在不行可以从书上或者网上找一找示例教程。
linux
里面有两种可以获取命令帮助的方法,一是通过命令自带的帮助选项,如-h
、--help
;二是通过man
帮助命令。
- 命令的帮助选项
适用于有帮助选项的命令,如下面mkdir
命令可以通过--help
帮助选项查看该命令所有选项的详细介绍:
mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'
-
man
帮助命令
适用于所有命令,有些命令没有帮助选项,可用这种方式查看帮助,记住需要用字母q
来结束:
man mkdir
结果如下:
文件路径
在windows
系统中打开一个文件,好似忽略了路径的概念,这是因为基于可视化操作的反馈淡化了路径的存在,事实上在windows
中文件也是存放在不同的文件夹下。相对于windows
,路径在linux系统中就显得很重要了,因为这将直接影响命令是否能够找到文件。有这么一句话,linux里面一切皆文件,而这些文件是如何存储的呢?
通过一种特别的文件(文件夹),以层次结构的方式来存放普通文件,这种层次结构就形成了所谓的路径,类似下图所示:
文件路径的作用应该很好理解,目的就是找到需要处理的特定文件,同样也可以避免文件同名的尴尬,例如在不同的文件夹下有两个同名的文件,可以通过路径指定具体的文件。所以,在linux中处理文件都是要加路径的,也许这时候就有人会说,不对吧!命令处理文件时,文件名前面可以不加路径。不加路径其实只是一种障眼法,是一种特殊情况,是文件刚好存在于执行命令时shell
所停留在的目录里面(此时的目录有个专业的称呼叫做工作目录或当前目录,英文简写WD
,可以用pwd
命令查看,工作目录这个概念很重要)省略了当前路径的写法,当前路径./
符号为了方便是可以省略的,这才造成了没有路径的假象。
所以,再次强调在linux里面使用文件都是要有路径的,只不过提供的方式不同而已。根据目录的起点可分为绝对路径和相对路径两种,绝对路径从/
根目录开始后面接每一层的目录名,直到文件结束,格式形如/path1/path2/path3/file.txt
,这种方式在任何时候都不会有问题;相对目录根据起点的不同又可以分成三种情况:当前目录、上一级目录、家目录,分别用符号.
、..
、~
表示,这其中前面两个是相对于工作路径来说,后者是任何情况下起点都是家目录(即登录终端时所在的目录)。既然绝对路径肯定不会有错,为什么还要用相对路径呢?原因很简单,人性化设置,一般绝对路径都很长,相对路径较短在使用时很方便。这感觉就像是抄近路一样!
绝对路径很容易理解,相对路径这个概念性的东西听起来比较抽象,可能有点令人疑惑,结合实际操作去理解才会更容易消化。
结束语
linux
说到底也是计算机,只不过由于交互方式的变化,带来了使用上的差异,需要慢慢适应的过程,一旦习惯了命令行操作,便能体会到其效率事实上远大于可视化界面,尤其是批处理。
GUI
到CLI
转化就好像黑夜里关灯一样,刚开始处在灯火通明,一切尽在眼中,脑海里对周围的环境有直观地印象,突然把灯一关,眼前一黑,脑子里失去了视觉的既视感,一时有点不知所措。一旦完成这种转化,就会发现一切实际都没变,便能体会到在黑暗里快速操控一切的快感。这里补充一点,bash
是有命令补全功能的,使用过程无论是命令还是文件名只需输入开头几个字符,然后按tab
键即可自动补全,可以大大增加工作效率。
在这过程中,需要从命令使用和文件路径这些最基本的东西开始,在实践中慢慢适应。然后,是编写简单的脚本实现简单任务处理。再然后,是学习简单的流程控制语法如变量、分支判断、循环等完成复杂的批处理任务。复杂的编程大概率用不到,组学数据分析中的shell
脚本大抵是简单的。
分析组学数据时,服务器不只是前期数据处理的专属,只要够熟悉,后期数据处理也可以轻松完成。如RNA-seq前期处理做到定量后,可以选择将表达谱拷到自己电脑上进行后续的差异、富集等分析,但如果用服务器来处理的话还是能体会到文件分享的便利。两方面,一是服务器是多用户系统,同一个分组的用户可以分享文件,无需拷贝给个路径便可访问;二是换个电脑照样可以做事,只要有网能登录服务器,便可处理数据,不用拷贝数据和安装软件。
服务器确实是好用的,用不用取决于个人意愿。虽然这里的内容很基础,但还是能给想学习使用linux
服务器的初学者带去一点提示。天下凡事,久为则易。废话天天有,今天特别多。不废话了,来来来,让咱们一起从入门到放弃。。。😄😄😄
往期回顾
武林大会之对角线热图
ggplot2 | 绘制双y轴的图型
tidydr | 一行代码搞定小坐标系
rnanorm | 一行命令搞定RNA-seq标准化
rGREAT | 基因组区间功能富集
网友评论