在我们的培训课程改为长期课之后 (易生信培训改为长周期模式),大家学习、练习、理解宏基因组、扩增子、转录组、全基因组各个分析流程的时间也多了,每次直播都能提出很多代码使用的问题,更加促进了 代码的理解、培训知识的落地、应用于自己的分析。有时一次直播全用来回答最近一周练习时出现的问题,这是一个很好的形式。
其中提到有一个问题是:下面代码中的rm 为什么要写成/bin/rm?
- 大文件清理,高宿主含量样本可节约>90%空间
-
- /bin/rm -rf temp/qc/*contam* temp/qc/*unmatched* temp/qc/*.fq
- ls -l temp/qc/
这是一个很好的问题,观察很仔细, 也带着了自己的思考。
rm是 Linux 下的一个危险命令,用于删除文件或文件夹,删除后很难恢复。程序员常做的删库跑路之一就是rm -rf /,在有权限的情况下递归删除服务器所有文件。
通常为了避免误删或使用方便,一般大家会在自己的~/.bashrc 或类似的文件中重定义一些命令,比如alias rm='rm -i'或复杂一些, 如下
- function rm(){
- if [[ $# -lt 1 ]]; then
- echo "Usage: rm input"
- return 1
- fi
- /bin/mkdir -p ~/trash
- /bin/mv $@ ~/trash
- }
所以,看上去同样写法的命令在不同的电脑上行为可能完全不一样。
我们自己在写脚本时要尽量保证代码适用于不同的电脑,所以这里我们用了复杂写法,直接指定用/bin 目录下的rm,看上去是麻烦了些,但好处是不受用户自定义行为的影响,更通用。类似的/bin/cp 和/bin/mv 也是常用的写法。
后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集




题图:https://pixabay.com/illustrations/banner-header-light-lightning-949943/