学生信的那些事儿之四 - Linux基础之Linux是什么? - Go语言中文社区

学生信的那些事儿之四 - Linux基础之Linux是什么?


科技始终来自于人性。

大佬说"如果连Linux都不想学,都学不好,就别想搞生信了"。那么为什么Linux技能对于生信工程师这么重要,它到底是个啥?

Linux是个相当丰富的存在,对于一个初学者来说不想介绍的太复杂(主要是也没那个能力),但是也无法接受说的太简单,比如"Linux是个操作系统"之类的(等于说"我是个人"一样没什么有用的信息),那就试试吧。

Linux的前世今生

篇首的引用就是呼应这一部分的。详细的历史不想赘述,网上的介绍已经足够详细足够有趣。主要是想感慨下探索发现过程中前辈的好奇心和共享精神,尤其是Linux的发展完善,可说是全人类的智慧的集结,很多很多人可能从未谋面,但是都为了一个更美好的事物无私地贡献自己的才华和精力,让更多的人更多的行业因此受益。

现在国内也有很多很多优秀的个人和团队不知疲倦地分享自己的生信知识和经验,做这件事的时候他们可能并没有想过什么功与名,但是这种行为让更多的人受益,慢慢也加入这个行列里来,久而久之大家都因此成长,也终会找到自己的价值。

难道不是很美妙的一件事么~

Linux是什么

上一篇里简单提到,Linux系统两大核心组成部分是内核和系统调用,负责计算机的资源调配和硬件驱动工作。既然是操作系统,跟我们熟知的Windows操作系统(或者Mac OS)有什么不同?

最突出的一个差异应该就是非可视化了吧。我们惯用的Windows系统的操作都会有一个对话框与我们进行交互,这样的体验当然很棒,因为想做什么想找什么只需要鼠标不停地点点点就行了,一眼就能看到自己在哪里,找什么,干什么,很多应用程序或者网页设计的很精美,赏心悦目。相对而言,Linux好像就不那么友好,长时间面对的就是一个黑底白字的对话框,每一个操作都需要手动写入命令,而不是点点点,鼠标对Linux系统而言是一个很鸡肋的存在。BUT,Linux系统的优点也是非常突出的,突出到可以让人忘记非可视化带来的痛苦(其实这个真的是暂时的,熟练了基本命令之后会嫌弃鼠标操作,想想在window系统下我们喜欢使用很多快捷键就晓得啦)。

  • 非可视化 (原谅我开始说它是缺点,现在又把它放到优点里面,以后慢慢体会)

    非可视化最大的威力我觉得就是可以批量处理数据(文件)。毕竟组学的数据动辄几十个G几百个G,各种数据格式,各种表格,如果没有批量处理,生信工程师的人生该多么灰暗。

    当然了,Windows系统中的各种操作Linux系统中都有对应的命令,而且用溜了可以快到飞起 (毕竟鼠标还要在鼠标垫上滑来滑去···)。也就是说Windows能干的,Linux都能干,Windows干不了的,Linux照样可以办到~

  • 多用户、多任务

    如果了解Linux系统常用的应用场景就会明白这个优点有多可爱。它允许多个用户同时访问一台服务器,而且可以同时运行多个任务 (这个能力当然跟服务器配置有关了)。放到实验室,是不是每只勤奋的科研狗都有资源可用呢;放在企业,是不是有利于teamwork共同协作完成一个任务呢;或者Linux教学,学员都访问同一台服务器,那样大家的基础就是一样的,容易控制整体进度,等等等~

  • 权限 (用户组,用户)

    虽说Linux系统支持多用户、多任务,但是并不意味着每个用户(组)拥有的东西都是一样的。因为权限的存在(可以设置),假如用户A、B、C同时访问同一台主机,他们可以有共享部分,也可以有隐私部分(可以理解成一个三室一厅一厨一卫的大房子,客厅厨房卫生间ABC都可以使用,但是各自的卧室可就不允许其他人随随便便出入了)。简单说就是有很好的系统保密性

当然了,还有很多其他的优点,不一一列举了,可以自己看书or看视频学习。

作为生信工程师需要学习Linux的什么技能

Linux非常强大,但是本着"工具原则",没必要学习Linux的所有技能,只需把那些对我们做生信分析来说很重要的技能学到家即可。

  1. 在非可视化的环境下高效工作

    其实主要就是对应Windows系统中的基本操作:cd, ls, pwd, touch, mkdir, rm, mv, cp,等等。不展开说,看书看视频自学,因为太简单~

  2. 文本处理能力

    这部分很重要,同样的命令,大神和菜鸟用起来可以相差十万八千里,因为有发挥空间在里面,有逻辑和智慧在里面。常用且必须掌握的命令:grep, sed, cut, awk, vim, |, paste, 等等。后续可能会一个一个专门介绍下,看书看视频自学不可抛···

  3. 生信软件安装

    软件主要处理的对象就是实实在在组学数据,上面的文本处理大部分时候是在整理数据,使其变得更整齐,便于后续的分析或者结果展示。说起来软件安装其实是相当简单了,就像我们在Windows上面安装各种各样的APP一样。

    难点在于首先得知道需要安装什么软件,这必然是跟我们的目的相关的。常用的生信软件建议去看生信技能树的1000个常用软件安装。

    然后就是安装方法,可以通过命令下载然后解压使用(针对二进制的软件),省事一点的方法是通过conda下载 (可以吧conda理解成我们手机上的APP store),里面存放了绝大部分生信分析的常用软件,安装命令也是简单的感人。这个部分推荐看生信技能树录制的B站视频,在Linux基础里面有一节专门讲的软件下载。

  4. shell脚本编程

    目前对这部分还没有很系统的学习,不敢乱说,后面打算专门写写。

    现在的理解是,写shell脚本也是为了处理文本,通过(循环、逻辑判断)命令实现批量操作,提高效率。而且脚本写了就可以长时间用,比如保存到某个地方,需要的时候拷贝一下,修改下关键的参数直接run即可,无需每次都写一遍。

    可以看《Linux命令行与shell脚本编程大全》《鸟哥的Linux私房菜》。

  5. 理解环境变量

    定义:bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息。这项特性允许你在内存中存储数据,以便程序或者shell中运行的脚本能够轻松访问到它们,包括全局变量和局部变量。

    看不太懂对不对,我其实也不是很懂,但是看多了就会有模模糊糊的感觉。我尝试把它解释的形象一点(可能不完全对):把我们打开的每个Linux交互界面(就是那个黑底白字的框)都可以称作为一个shell(一个壳儿),就像是开辟出了一个特定的区域打算干点儿特别的事儿。或者把这个环境比作一个大房子(我是多喜欢大房子···),shell就是一个大房子。但是房子得装修得规划吧,所以有了卧室,厨房,客厅和卫生间,而这些分区都可以理解成是环境变量,在这些变量里面可以做更有针对性的事情,比如在厨房就是做饭。对应的,如果我生成一个叫作RNA的环境变量,那我就可以在这个变量里面专门安装RNA数据处理的相关软件,并且只在这个环境里面做转录组的数据分析。有了环境变量工作起来会更有条理,更方便,但愿讲清楚了···

  6. 各种数据格式

    组学的数据格式丰富多样,不同的格式可能会需要不同的命令和软件进行处理。常用的数据格式有:fastq, fasta, sam, bam, vcf, gtf, gff, bed等等~ 具体什么意思,自己去查吧。

  7. 练习

    对于一项操作技能掌握,包括理论知识和实际操作两个方面。概念和用法"知道了"还远远不够,得真的在电脑上一行一行的把命令都敲出来,这是个非常重要的体验,唯有这部分也很熟练了才是真的学会了。毕竟熟记游泳的每个动作根本无法保证你会游泳,非得去泳池里呛几口洗脚水才可以,因为在水里时体验到的紧张,呛水时的难受,甚至是身体感受到的水温和压力都是重要知识。

几句啰嗦

省略了很多内容,比如硬盘分区操作,文件属性,系统管理等,毕竟大部分时候我们用不到,了解一下就可以。当然了,如果基础的搞定了,多学点肯定没坏处,随着学习的深入,这些技能终有一天也会用到。

还是那句话,很多内容可能理解的不对,欢迎所有人的所有建议和指正。

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/1ffe0e4af1d4
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 13:15:04
  • 阅读 ( 1040 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢