节选自:这个为生信学习打造的开源Bash教程真香!!!

习惯了Windows电脑下的所见即所得,找到程序或文件双击即可运行或打开;于是我们被惯得以为电脑会像人一样聪明,给他一个名字就可以运行程序或打开文件;于是在命令行下或程序里不断碰壁,为啥这个命令不运行了呢?

我们不能太高估电脑(或操作系统),不要以为只要输入一个程序名或文件名,电脑(或操作系统)就可以满硬盘的去找这个文件在哪;这一来效率太低了,二来重名了怎么办?比如有2个文件都叫“子房.txt”,一个存储汉初三杰之张良,一个存储被子植物生长种子的器官;可能打开前我们自己也不知道要开哪个吧。

想一下,我们在Windows下寻找文件时,是不是先打开我的电脑,然后打开D盘,打开学习目录,再打开学习计划.docx这个文件。即便我们从来没有执行过这个计划,每天我们还是不厌其烦的一层层打开然后制定新的计划。只是,我们忽略了这个一层层打开。

path我们一般指文件的路径,也就是一层层打开的过程。以Linux为例:

我们要查看一个在自己家目录下的文件 I_am_home.txt,那登录后,直接可见:

YSX@ehbio:~$ tree
.
├── I_am_home.txt
└── train├── amplicon│   └── pipeline_amplicon.sh├── metagenome│   └── pipeline_metagenome.sh├── population_genomics│   └── pipeline_gatk.sh├── single_cell│   ├── Scanpy.ipynb│   └── Seurat.Rmd└── transcriptome└── pipeline_salmon.sh
YSX@ehbio:~$ head I_am_home.txt
I am home!

那如果想看Seurat.Rmd,怎么查看?一步步找下去就对了。

YSX@ehbio:~$ less Seurat.Rmd
Seurat.Rmd: 没有那个文件或目录
YSX@ehbio:~$ less train/Seurat.Rmd
train/Seurat.Rmd: 没有那个文件或目录
YSX@ehbio:~$ less train/single_cell/Seurat.Rmd

也可以一步步先做目录切换,然后再查看

YSX@ehbio:~$ cd train
YSX@ehbio:~/train$ cd single_cell/
YSX@ehbio:~/train/single_cell$ less Seurat.Rmd

那如果你这时你想运行pipeline_metagenome.sh快速分析宏基因组数据怎么办?

YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh
-bash: pipeline_metagenome.sh: 未找到命令

pipeline_metagenome.sh命令去哪儿了?上面我们都看到了,就在metagenome目录下,为啥电脑(操作系统)这么笨却找不到?另外为什么运行head就可以找到?难道有一些黑魔法在里面?

确实是有一些黑魔法的,不过我们一般称之为规则

操作系统为了便捷性和安全性,定义了一系列环境变量,存储常用信息,PATH (注意全是大写)是其中一个。

PATH: 是存放有(可执行)命令和程序的目录集合;在操作系统接到用户输入的命令时,会对PATH存储的目录进行查找,看下是否有与用户输入的命令同名的文件存在,而且是从前到后一个个查找,而且是查到就停,最后查不到就报错。(从这几个加粗的文字,可以看到操作系统很懒,当然懒是好的程序员的必备属性。)

我们先看下PATH里面存了哪些目录?

YSX@ehbio:~/train/single_cell$ echo $PATH
/usr/bin:/usr/local/bin

在我们前面输入head命令时,操作系统收到回车指令后,先去看下$PATH里面有哪些目录,然后从第一个/usr/bin开始寻找,很幸运,一下找到了/usr/bin/head文件,尝试运行,成功。所以在这个情况下,我们输入head等同于输入/usr/bin/head。那这个会不会给我们一些启发呢?

我们只要提供pipeline_metagenome.sh的路径就可以运行了。

# 相对路径
YSX@ehbio:~/train/single_cell$ ../metagenome/pipeline_metagenome.sh
# 绝对路径
YSX@ehbio:~/train/single_cell$ ~/train/metagenome/pipeline_metagenome.sh
# 再绝对一些
YSX@ehbio:~/train/single_cell$ /home/YSX/train/metagenome/pipeline_metagenome.sh

程序可以运行了,但是不是写起来太麻烦了?既然head可以只写命令,系统就可以帮着我们去找,那么我们是否也可以把/home/YSX/train/metagenome/放到PATH里面。这就是如何去设置环境变量了。

# 给原变量PATH后面加一个路径(绝对路径),冒号(:)分割
YSX@ehbio:~/train/single_cell$ PATH=$PATH:/home/YSX/train/metagenome/
# 导出变量,使其对系统(Shell)可见
YSX@ehbio:~/train/single_cell$ export PATH
# 上面两句可以合并为一句,如下:
YSX@ehbio:~/train/single_cell$ export PATH=$PATH:/home/YSX/train/metagenome/
# 再次运行,可以运行了
YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh
# 看下PATH存储的目录,多了我们的新增
YSX@ehbio:~/train/single_cell$ echo $PATH
/usr/bin:/usr/local/bin:/home/YSX/train/metagenome/

这样就新增一个目录到环境变量里面了,可以依次继续增加更多目录。

YSX@ehbio:~/train/single_cell$ export PATH=$PATH:/home/YSX/train/metagenome/:/home/YSX/train/amplicon/

有时我们也会看的这样的写法:export PATH=my_path:$PATH,这与export PATH=$PATH:my_path有什么区别呢?

回顾下这几个关键字:从前到后查到就停。写出官话就是:PATH中越靠前的路径优先级越高。这有什么用处呢?

比如,一般的操作系统都会有系统的pythonR,通常版本比较老,我们作为普通用户也没权限修改。

那怎么办?自己装一份,然后用自己的,这时就涉及到优先级问题了。

假如我在/home/YSX/soft/anaconda/bin下安装了一个python,那么我需要设置优先调用我自己的python,设置环境变量时,我就得把/home/YSX/soft/anaconda/bin放到前面,如export PATH=/home/YSX/soft/anaconda/bin:$PATH。如果反过来写,就/usr/bin/python优先被调用了。

# which 常用工具,查看当前调用的程序的具体来源
YSX@ehbio:~/train/single_cell$ which python
/usr/bin/python
# 优先调用自己的python
YSX@ehbio:~/train/single_cell$ export PATH=/home/YSX/soft/anaconda/bin:$PATH
YSX@ehbio:~/train/single_cell$ which python
/home/YSX/soft/anaconda/bin/python

环境变量学会怎么设置了,关机,下班,睡觉。

第二天早上起来,打开电脑,再运行程序

YSX@ehbio:~/train/single_cell$ which python
/usr/bin/python
YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh
-bash: pipeline_metagenome.sh: 未找到命令

结果发现昨天的设置都无效了,去生信宝典群里提问 “有谁对Linux比较精通?”。半晌,无人响应,敢说自己精通的不多。

后来,有好心人回复“你遇到什么问题,具体描述下?”

经过半个小时的沟通,理清了,关键点:环境变量设置后失效了,怎么长期有效?

如果早这么问,估计程序都运行完了。

这时需要用到另一个规则: 登录远程服务器时,系统会自动运行~/.bash_profile里面的命令,所以把前面写的这句话export PATH=/home/YSX/soft/anaconda/bin:$PATH:/home/YSX/train/metagenome/:/home/YSX/train/amplicon/放到文件~/.bash_profile里面就好了。

文件输入后,不要忘记source ~/.bash_profile使设置生效(当然,关掉登录窗口,再次登录也可以)。

以上就是Linux系统的环境变量设置,Windows系统的环境变量择日再推一期,喜欢的话不妨多多关注。

其它被忽略的事情

  1. 软件可执行属性

  2. 其它环境变量

  • 环境变量PATH:

    定义可执行程序的目录

  • LD_LIBRARY_PATH:

    定义动态库的目录

  • PYTHONPATH:

    定义Python包的目录

  • PERL5LIB:

    定义Perl模块的目录

  • .bashrc和.bash_profile

    • ~/.bashrc本地登录时读取 (文件若无,可新建)

    • ~/.bash_profile远程登录时读取(文件若无,可新建)

  • 如果想在系统层面设置环境变量,应该写到/etc/profile.d/custom.sh里面(文件若无,可新建)。

  • 软件安装

    • Linux - 命令运行监测和软件安装

    • Linux - 应用Docker安装软件

    • Linux - Conda软件安装方法

    • Nature Method:Bioconda解决生物软件安装的烦恼

    • 手把手教你生信分析平台搭建

    • Windows轻松实现linux shell环境:gitforwindows

    • Bioconda软件安装神器:多版本并存、环境复制、环境导出

    推荐阅读

    • 免费Linux系统和生信宝典原创学习教程

    • Linux - 文件和目录

    • Linux - 文件操作

    • Linux - 文件内容操作

    • Linux - 环境变量和可执行属性

    • Linux - 命令运行监测和软件安装

    • Linux - 常见错误和快捷操作

    • Linux - 应用Docker安装软件

    • Linux - Conda软件安装方法

    • Linux - 查看服务器配置信息

    • Linux - 那些查找命令

    • Linux - 原来你是这样的软连接

    猜你喜欢

    10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

    系列教程:微生物组入门 Biostar 微生物组  宏基因组

    专业技能:学术图表 高分文章 生信宝典 不可或缺的人

    一文读懂:宏基因组 寄生虫益处 进化树

    必备技能:提问 搜索  Endnote

    文献阅读 热心肠 SemanticScholar Geenmedical

    扩增子分析:图表解读 分析流程 统计绘图

    16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

    在线工具:16S预测培养基 生信绘图

    科研经验:云笔记  云协作 公众号

    编程模板: Shell  R Perl

    生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

    写在后面

    为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

    学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

    点击阅读原文,跳转最新文章目录阅读

Linux下为什么ls直接就可以运行,而你的程序要写./dir1/dir2/bin/bwa才可以相关推荐

  1. Linux下 SpringBoot jar项目后台运行、查看、停用

    运行java jar: nohup java -jar **-0.0.1-SNAPSHOT.jar & 查看进程: 采用top或者ps aux命令.一般 如果后台是springboot,jar ...

  2. 记:关于W806的Linux下基本教程(一)——环境建立与第一次烧写

    0x00 前言 本文主要在Linux下实现了对于联盛德的W806芯片的SDK相关的操作,包括但不限于指定烧写.擦除.编译. 技能 熟练度 Linux 熟悉 make 熟悉 C语言 熟悉 0x10 准备 ...

  3. linux下开机自动启动,定时运行shell脚本

    Shell 脚本与window/dos 下的批处理相似,也就是用各类命令预先放入一个文件中,方便一次性执行的的一个程序文件,主要是方便管理员进行设置或者管理用. 一.shell脚本 在Linux下,我 ...

  4. linux有k歌软件吗,在Linux下可用Wine安装和运行暴风影音16、全民K歌

    在Linux操作系统下可用Wine安装和运行暴风影音16.全民K歌.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用暴风影音16和全民K歌了,已亲测有效. 说明 1.如果 ...

  5. linux下运行class,在Linux下可用Wine安装和运行AIclass、希沃白板5

    在Linux操作系统下可用Wine安装和运行AIclass.希沃白板5.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用AIclass和希沃白板5了,已亲测有效. 说明 ...

  6. Linux下编译pjproject-2.6并运行例程simple_pjsua

    近期项目中使用了sip协议进行音视频通话,百度的介绍是: PJSIP同时支持语音.视频.状态呈现和即时通讯.PJSIP具有非常完善的文档,对开发者非常友好. 因特网电话(IP电话)正在向一种正式的商业 ...

  7. linux系统下王者荣耀,在Linux下可用Wine安装和运行腾讯手游助手、王者荣耀电脑版...

    在Linux操作系统下可用Wine安装和运行腾讯手游助手.王者荣耀电脑版.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用腾讯手游助手和王者荣耀电脑版了,已亲测有效. 说 ...

  8. 局域网对战平台 linux,在Linux下可用Wine安装和运行完美对战平台、金山游侠2002体验版...

    在Linux操作系统下可用Wine安装和运行完美对战平台.金山游侠2002体验版.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用完美对战平台和金山游侠2002体验版了, ...

  9. linux运行倩女,在Linux下可用Wine安装和运行新倩女幽魂、迷你世界

    在Linux操作系统下可用Wine安装和运行新倩女幽魂.迷你世界.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用新倩女幽魂和迷你世界了,已亲测有效. 说明 1.如果有原 ...

最新文章

  1. 解决python发送multipart/form-data请求上传文件的问题
  2. 22 面向对象 名称空间 类与对象
  3. UGUI内核大探究(一)EventSystem
  4. php files上传错误,php-PHP上传文件的问题$_FILES['file']['error']
  5. Redis:master/slave、sentinel、Cluster简单总结
  6. php与mysql同步_MySQL 同步(一)
  7. Adobe Acrobat Reader快捷键
  8. Hive hiveserver2 配置运行
  9. 计算机兴趣小组意义,信息技术兴趣小组开展之我见
  10. X86汇编语言从实模式到保护模式18:中断和异常的处理与抢占式多任务
  11. 实现Fragment在ViewPager中滑动
  12. python生成序列_python 之 生成序列号
  13. WDM驱动实操No.1
  14. 国际金融统计 (IFS) 数据库1978-2020
  15. matlab mysql建系统_能环水体治理项目(Mysql数据库,Matlab创建GUI界面)【一】
  16. java poi操作word模版 导出word文档(附工具类)
  17. Latex单行/多行公式居中/左对齐
  18. 信息源按加工深度划分_按文献信息资源内容加工深度可以将文献划分为哪些类型,并简要解释?...
  19. js使用canvas画五角星以及渐变色,瞎画
  20. 大数据实训室课程体系设计案例分享

热门文章

  1. 程序员被知乎优化!瞄准bat大厂再次求职!结果让人意外!
  2. 数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!
  3. 这么流行的ZooKeeper,原来是这样设计的!
  4. 看完秒懂大数据用户画像!
  5. 毕业之后,这些年薪50万+的90后程序员经历了什么?
  6. 小公司该如何吸引人才、留住人才?
  7. Python做web前后端交互
  8. 通俗理解卡尔曼滤波及其算法实现(实例解析)
  9. java抽象类习题_Java练习抽象类
  10. Linux中常见shell命令总结