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

news2024/9/29 13:31:15

习惯了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系统的环境变量择日再推一期,喜欢的话不妨多多关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年的设计理念革新:快速获取设计趋势的资源集合!

随着2024年第三季度开始,今年的设计趋势也逐渐出现。与2023 年设计相比,趋势变化空间不大,大部分是在 2023 年度设计趋势的延伸和发展。即使趋势不会一直改变,了解趋势对设计师来说仍然非常重要。接下来,本文将与你分享…

lora训练调参

Stable Diffusion 训练指南 (LyCORIS) | Coding HuskyStable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。https://ericfu.me/stable-diffusion-fin…

阿里云通义千问开源两款语音基座模型分别是SenseVoice和CosyVoice

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM,该项目包含了两个核心模型:SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆。 SenseVoice:精准多语言识别与情感辨识 SenseVoice主要致力于高精度多语言语音识别、情感辨识和…

【搭建Nacos服务】centos7 docker从0搭建Nacos服务

前言 本次搭建基于阿里云服务器系统为(CentOS7 Linux)、Nacos(2.0.3)、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …

暑期旅游季必备,用这款客服神器应对爆棚的客流咨询

解决暑期旅游客流高峰问题 暑期是旅游高峰季节,客流量剧增,客户咨询纷至沓来。在这个时候,如何高效处理客户的咨询成为每家旅游机构和景点不可忽视的挑战。 聊天宝快捷回复助手是一款强大的工具,可帮助企业在客流高峰期快速回复客…

使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响吗?

使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响吗? 使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响。私模定制耳塞是根据用户的耳型定制的,因此其大小和形状与用户的耳朵形状相匹配,能够减少漏音和外部噪音的干扰&a…

基于SpringBoot构造超简易QQ邮件服务发送(分离-图解-新手)

目录 获取QQ 授权码 SpringBoot构建 依赖 Yaml配置 服务编写 测试 获取QQ 授权码 https://mail.qq.com/ 接着后就会有对应的密钥了 SpringBoot构建 依赖 这里的建议是 2.0系列的Springboot版本用低一点的邮件依赖 <!-- 电子邮件 --> <dependency>&…

pwn误区的buffer

注意栈顶是闭合的&#xff0c;栈底才是打开的 栈图&#xff1a; |--------------------------| | | | | buffer溢出的时候&#xff0c;是从栈底到栈顶方向

apache python使用

修改httpd.conf文件。 AddHandler cgi-script .cgi .py 代码 #!自己的python.exe #-*- coding:UTF-8 -*- print ("Content-type:text/html") print () print (<html>) print (<head>) print (<meta charset"gb2312">) print (<tit…

房地产销售管理能力提升之资产复用、优化管理

提升房地产销售管理能力&#xff0c;从哪些场景入手&#xff1f;惟客数据认为可以从放大流量、提升优化、资产复用、优化管理四方面入手。 本篇继续拆解如何做好“资产复用、优化管理”&#xff1a; 一、资产复用 首先&#xff0c;通过全渠道客户数据的整合与挖掘&#xff0c;…

案列:Nginx+Tomcat负载均衡、动静分离群集

一、案列&#xff1a;部署Tomcat&#xff08;在192.168.10.102和192.168.10.103&#xff09; 1.关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2.安装java环境 [rootlocalhost ~]# yum -y install java [rootlocalhost ~]# jav…

微软发布E2 TTS: 一种简单但效果优秀的文本转语音技术

本文介绍了一种名为“Embarrassingly Easy Text-to-Speech&#xff08;E2 TTS&#xff09;”的文本转语音系统。 该系统通过将输入文本转换为填充标记字符序列&#xff0c;并基于音频填充值任务训练流匹配基mel频谱生成器&#xff0c;实现了人类水平的自然度和最先进的说话人相…

大模型应用中什么是SFT(监督微调)?

大模型应用中什么是SFT&#xff08;监督微调&#xff09;&#xff1f; 一、SFT的基本概念 监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;是对已经预训练的模型进行特定任务的训练&#xff0c;以提高其在该任务上的表现。预训练模型通常在大量通用数据上进行训…

APP项目开发的费用估计

APP项目的开发方式主要有以下几种&#xff0c;需要注意的是&#xff0c;以下只是一些估算值&#xff0c;实际的开发成本可能会有所不同。建议您在开发APP项目之前&#xff0c;先咨询专业的开发公司&#xff0c;获取详细的报价。北京木奇移动技术有限公司&#xff0c;专业的软件…

QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成

目录 引出qt中的注释和多行注释方法的注释生成 总结日积月累&#xff0c;开发集锦方法参数加const和不加const的区别方法加static和不加static的区别Qt遍历list提高效率显示函数的调用使用&与不使用&qt方法的参数中使用&与不使用&除法的一个坑 项目创建相关新建…

爬虫-豆瓣读书排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析&#xff1a; 导入requests库调用了requests库中的…

人生苦短,我用Python+Docker

今天用一个简单的例子&#xff0c;介绍下如何使用Docker进行Python部署。 前期准备 本地需要有Python环境&#xff1b; 一个Linux的服务器并已经装好Docker &#xff1b; 能把代码上传到服务端的工具。 本文的本地环境是Win10Python3.12&#xff0c;服务器使用Ubuntu的云服…

二进制安装nexus

今天安装nexus&#xff0c;想看看别人怎么安装的&#xff0c;结果找了一圈&#xff0c;没有一个靠谱的&#xff0c; 有些题目是二进制安装nexus&#xff0c;内容是东家长李家短胡扯&#xff0c;一个字&#xff0c;不要脸&#xff1b; 详细安装步骤如下&#xff0c;一起学习&…

打通智能体「自我进化」全流程!复旦推出通用智能体平台AgentGym

AI通用智能体的自我进化能力&#xff0c;并非遥不可及。 LLM-based Agent&#xff0c;已经不再需要人类监督者的帮助&#xff0c;开始实现「自我进化」&#xff01; 这个智能体在学习了专家轨迹以后&#xff0c;获得了基础的通用能力&#xff0c;能够在更广泛、更真实的未知环…

ELK集群搭建

ELK集群搭建 文章目录 ELK集群搭建1.环境准备2.Elasticsearch环境搭建1.创建es账户并设置密码2.选择对应版本进行下载3.编辑配置文件4.设置JVM堆大小 #7.0默认为4G5.创建es数据及日志存储目录6.修改安装目录和存储目录权限 3.系统优化1.增加最大文件打开数2.增加最大进程数3.增…