习惯了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模块的目录

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

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

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

  2. 软件安装

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

  • Linux - 应用Docker安装软件

  • Linux - Conda软件安装方法

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

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

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

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

PATH和path,傻傻分不清相关推荐

  1. 国防大学计算机学院,国防大学和国防科技大学是同一所学校吗?很多人傻傻都分不清!...

    国防大学和国防科技大学,这两所大学名字相近,极易混淆,在很多网站搜索"国防大学录取分数线",出来的全是国防科技大学的的高考录取分数线,所以给广大考生带来了很大困惑,难道国防大学和国 ...

  2. path.Dir? filepath.Dir? 傻傻分不清楚

    Go语言关于路径的操作有path和filepath两个包.他们都可以处理路径相关操作,但你是否疑惑过这两个包该用哪个?它们有什么区别呢?小小的脑袋充满大大的疑惑呢. 它们的区别其实看看源码就明白了,p ...

  3. 傻傻分不清的Manifest

    在前端,说到manifest,其实是有歧义的,就我了解的情况来说,manifest可以指代下列含义: html标签的manifest属性: 离线缓存(目前已被废弃) PWA: 将Web应用程序安装到设 ...

  4. 国家电网和南方电网还傻傻分不清?

    参看:都2020年了,国家电网和南方电网还傻傻分不清? 一.名称不同 一个叫南方电网,一个叫国家电力电网,虽然都是电网,但是区别还是很大的 而且成立时间不一样:国家电力电网有限公司成立于2002年12 ...

  5. cdn厂商 同兴万点_同兴万点:TXNetworks和CDNetworks让我们傻傻分不清

    原标题:同兴万点:TXNetworks和CDNetworks让我们傻傻分不清 在2008年2月25日成立的同兴万点,公司全称为同兴万点(北京)网络技术有限公司(TXNetworks),一直专注于CDN ...

  6. Executor 与 ExecutorService 和 Executors 傻傻分不清

    转载自  Executor 与 ExecutorService 和 Executors 傻傻分不清 java.util.concurrent.Executor, java.util.concurren ...

  7. 2运行内存多大_智能设备中的内存与容量为何傻傻分不清?它们的区别是什么?...

    在日常生活中,很多时候会把某些电子产品的容量说成内存,或者把内存说成了容量.比如有人问:"这个手机的内存多大?"或许会有这样回答的:"内存是256G."这种问答 ...

  8. 数据平台、大数据平台、数据中台……傻傻分不清?这次终于有人讲明白了!

    来源 | 智领云科技 造概念,在IT行业可不是一件陌生的事儿,中文博大精深,新名词.新概念往往简单准确,既可以被大众接受,又可以被专家把玩,真正做到雅俗共赏.各有趣味.近年来,数据中台之火爆,什么数据 ...

  9. c语言位运算符怎么用,傻傻分不清

    c语言位运算符怎么用,傻傻分不清 左移运算符 << 右移运算符 >> 左移运算符 << 左移运算符**<<**用来把操作数的各个二进制位全部左移若干位. ...

最新文章

  1. react 错误边界_React with GraphQL和错误边界中的自定义错误页面
  2. 时间序列(三)滑动窗口
  3. powerdesigner生成php代码,让powerdesigner生成的sql语句在mysql上成功执行
  4. 'CUDA driver version is insufficient for CUDA runtime version
  5. 如何入门技术、进阶技术(技术开发人员)
  6. PostProcessor
  7. 信息学奥赛一本通C++语言——1055:判断闰年
  8. Firefox Test Pilot 计划正式关闭
  9. bash 别名_必不可少的Bash别名
  10. python打砖块游戏算法设计分析_python小游戏--打砖块的实现与讲解(python自学总结系列)...
  11. Ajax学习笔记-JQuery中的Ajax
  12. lena-ts 图像处理和卷积操作
  13. 头条小程序对接微信、支付宝
  14. SptingBoot+RabbitMQ整合出现的异常【Connection reset和Channel shutdown: connection error和ForgivingExceptionHa】
  15. 2010年美国计算机图书市场Part1
  16. 【无标题】微信小程序:强制更新(测试编译)
  17. PHP获取网页返回的JSON数据并在微信换行展示
  18. hnu 模型机组合部件的实现(一)
  19. MySQL闪退解决办法看这里!
  20. 10招有效预防电脑辐射

热门文章

  1. 【操作系统】信号量的用法
  2. 排序分发“魔法照片”(洛谷P1583题题解,Java语言描述)
  3. 【Python】Matplotlib利用指数函数的向量及其逆向向量绘图
  4. 7-7 六度空间(30 分)
  5. NLTK学习笔记(八):文法--词关系研究的工具
  6. Why React?
  7. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
  8. 采用Angular勾画SVG圆环形进度条
  9. Xcode工程添加第三方文件的详细分析 Create folder references for any added folders(转)
  10. 当自动化遇见数字化——德资企业儒拉玛特的数字化实践