在我们的培训课程改为长期课之后 (易生信培训改为长周期模式),大家学习、练习、理解宏基因组、扩增子、转录组、全基因组各个分析流程的时间也多了,每次直播都能提出很多代码使用的问题,更加促进了 代码的理解、培训知识的落地、应用于自己的分析。有时一次直播全用来回答最近一周练习时出现的问题,这是一个很好的形式。
其中提到有一个问题是:下面代码中的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
也是常用的写法。