Shell: 入门Linux
可以把 Linux 的学习过程分成6个阶段,一般来说,每个阶段都需要至少一天以上的学习:
- 第1阶段:把
linux
系统玩得跟Windows
或者MacOS
那样的桌面操作系统一样顺畅,主要目的就是去可视化,熟悉黑白命令行界面,可以仅仅以键盘交互模式完成常规文件夹及文件管理工作。 - 第2阶段:做到文本文件的表格化处理,类似于以键盘交互模式完成Excel表格的排序、计数、筛选、去冗余,查找,切割,替换,合并,补齐,熟练掌握
awk
,sed,
grep``这文本处理的三驾马车。 - 第3阶段:元字符,通配符及 shell 中的各种扩展,从此 linux 操作不在神秘!
- 第4阶段:高级目录管理:软硬链接,绝对路径和相对路径,环境变量
- 第5阶段:任务提交及批处理,脚本编写解放你的双手
- 第6阶段:软件安装及 conda 管理,让 linux 系统实用性放飞自我
仅仅是以自己多年处理生物信息学数据经验给大家总结一下 Linux 该如何学,希望这个给初学者的知识点路线图能帮助到你。可以把Linux的学习过程分成 6 个阶段 ,一般来说,每个阶段都需要至少一天以上的学习:
第一阶段:常规文件夹及文件管理工作
1 | $ ls ## list 列出当前路径下信息 |
比如ls命令,就是lst , 可以列出当前路径下信息,就有大量的参数:
1 | ## 常见参数 |
第二阶段:文本文件处理大全
1 | $ head # 功能:显示文档的开头至标准输出中,默认显示十行。 |
同样的,每个命令都是有着不同的参数,来扩展它们的功能,比如cat
命令就可以加上:
1 | -A:显示全部内容,包括特殊字符,可列出一些特殊字符而不是空白而已; |
1 | $ sort #排序, sort lines of text files 对文件的数据进行排序(默认根据ASCII表升序排列) |
初学者需要花费时间和精力来体验它们的各种参数效果。比如grep
就可以进行查找和筛选,提供它这些功能的参数主要是:
1 | -v ## 逆向匹配 |
值得一提的是,grep,awk,sed
被我称为 linux 下的文本处理三驾马车,其中awk
和sed
命令, 还专门有一个 400 页的书籍来进行讲解,这里就不强调大家称为两个命令高手了,一定要是有需求再学习,但是需要对它有一定的基础认知,做到随学随用!
第三阶段:元字符,通配符及shell中的各种扩展
瞬间生成 1000 个文件夹
1 | $ mkdir -p dir{1..1000} |
这里就是{1..100}语法,是 shell 的扩展,shell 扩展有以下几种,并按以下顺序处理,当然如果没找到匹配的扩展格式,那就不处理
- brace expansion 大括号({})扩展
- tilde expansion ~字符扩展
- parameter and variable expansion 参数和变量扩展
- arithmetic expansion 算术扩展
- command substitution 命令替换
- process substitution 过程替换
- word splitting
- Filename Expansion 通配符扩展
以上扩展中,只有 brace expansion,word splitting,filename expansion
三种扩展可以改变 token 个数,我们演示的{1..100}语法就是这个大括号扩展(brace expansion)
的序列输出功能,其中两个点是进行序列输出,然后外面套的大括号是进行扩展,这样我们就一下子新建了成百上千个文件夹。
linux shell 通配符(wildcard),实际上就是一种 shell 实现的路径扩展功能,就是前面提到的 Filename Expansion 通配符扩展。在 通配符被处理后, shell 会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
shell常见通配符不多,如下图:
加快效率的最后一个必备知识点就是shell元字符(特殊字符 Meta),就是一系列自己的其他特殊字符。比如我们在演示 cd
这个命令的时候,提到过一系列高级操作,如下:
1 | $ cd ## 回到用户家目录 |
这里面的特殊字符就是shell元字符啦,还有一系列其它 shell 元字符,如下表:
熟练掌握这些特殊字符,就可以很容易看懂大神那些看起来是鬼画符一样的NGS流程啦,比如:
第四阶段:高级目录管理
主要是理解软硬链接,绝对路径和相对路径,环境变量这些概念。
用type
命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。主要的命令类型:
- alias:别名。
- keyword:关键字,Shell 保留字。
- function:函数,Shell 函数。
- builtin:内建命令,Shell 内建命令。
- file:文件,磁盘文件,外部命令。
- unfound:没有找到。
你会发现很多命令,都存在于下面的目录:
1 | /usr/local/sbin |
如果你 echo $PATH
就能发现这些目录都是存储在 PATH
这个变量,在 shell 里面的变量需要使用 这个美元符合来进行标识。这个 PATH 变量就是我们的环境变量啦,掌握它是 linux 的一个分水岭,我们生物信息学领域大名鼎鼎的 conda 软件,就是通过修改你的环境变量PATH
值来进行软件管理。
不仅仅是PATH
,linux 系统还预设了大量的变量,大全如下:
1 | $SHELL 默认Shell |
- 绝对路径:从根目录 / 开始,用 / 隔开的各级目录,例如 /home/vip1 这个目录。
- 相对路径:目标目录相对于当前目录的位置。主要是活学活用 . 和 .. 这两个特殊字符。
第五阶段:任务提交及批处理,脚本编写
任务提交在生物信息学领域是一个刚需,因为大量的NGS数据处理流程耗时都很长,如果仅仅是运行命令会面临电脑的命令行交互界面被占用几个小时以上时间,需要提交任务到其它节点,取决于大家的实际计算机资源,或者在单机上面直接提交到后台,就是格式是 nohup(要提交的任务) &
, 比如我们提交一个命令:
1 | sleep 100 |
批处理更多的时候属于编程的概念了,我们前面演示的短小精悍的一句话即可1000个文件夹瞬间生成:
1 | $ mkdir -p dir{1..1000} |
就是一种批处理的概念,等价于循环,我们这里只推荐大家学习两个语法,for and while:
1 | $ for i in {1..1000}; do (mkdir -p dir${i}); done |
第六阶段:软件安装及conda管理
软件安装的规律我总结如下:
- 二进制可执行程序,解压即可使用
- https://www.ncbi.nlm.nih.gov/sra/docs/toolkitsoft/
- ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
- http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/blat/
- 系统级别的,演示ubuntu系统的apt功能
- 编程语言级别
- C源代码
- cd 到家目录
- vim ~/.bashrc
- G跳转最后一行
- i 输入 export PATH=$PATH: ~/opt/biosoft/…/bin/
- wq退出
- source .bashrc
- which …
- 编译型语言
- 源代码:下载—解压—编译—安装
- http://www.htslib.org/download/
- 二进制:下载—解压—安装
- wget + 网址
- 添加到环境变量
- java/python/perl/R
conda 的下载和安装见 conda 官网,我们也在生信技能树写过系列推文conda管理生信软件一文就够 , 主要是需要理清楚下面这些概念:
- miniconda安装
- miniconda配置镜像
- 创建小环境
- 查看小环境
- 进入小环境
- 查找软件
- 安装软件
- 指定软件安装版本
- 更新软件
- 查看已安装软件
- 退出小环境
- 移除小环境
大部分人的疑问集中在使用conda安装软件结束后,无法得心应手的管理它们,尤其有些需要调py的一些包的时候,会出错,或者python版本不兼容,在使用软件的时候,软件即会出现异常报错。
转自 - 生信技能树: 生信分析人员如何系统入门Linux(2019更新版)