路径和环境

参考:生信技能树
https://www.bilibili.com/video/BV1ds411g7eg?p=5

什么是环境变量

bash shell 通过一种叫做环境变量,environment variable 的特性来存储有关shell 会话和工作环境的信息。

这项信息允许你在内存中存储数据,以便程序或shell 中运行的脚本能够轻松访问到它们,这也是存储数据的一种简便方法。

一般来说,环境变量分为两种:1)全局变量;2)局部变量。

全局变量

linux 系统在开始bash 会话时就设定了一些全局变量,可以通过env 查看。

另外,还可以查看个别环境变量的值。

$ printenv HOME
/Users/mugpeng
# 二者都可
$ echo $HOME
/Users/mugpeng

局部变量

局部变量只能在定义它们的进程中可见。尽管它们是局部的,但是和全局变量一样重要。

除了Linux系统默认的一些标准局部环境变量外,我们也可以定义自己的局部变量,这些变量被称为用户定义局部变量。

linux 还没有专门查看局部变量的指令,但是我们可以通过set 命令,查看所有环境变量,包含全局与局部,以及用户定义的。

设置局部用户定义变量

首先要注意,所有的环境变量名均使用大写字母(系统定义全局变量),而自己的局部变量或shell 脚本,要使用小写字母。这样可以避免重新定义系统环境变量造成的灾难。

我们可以自己定义一个变量。需要注意,当变量中有空格时,要把赋值的对象用引号包起来。

$ a_a=a
$ echo $a_a 
a

设置了局部环境变量后,就能在shell 进程的任何地方使用它。但是,如果生成了一个子shell,则在该子shell 下是不可用的了。

设置全局环境变量

之前提到过,设定的局部变量只能在当前shell 下使用它。父shell 内的变量无法在子shell 内使用,而子shell 内的变量也无法在父shell 中使用。

我们可以使用export。

$ export a_a
$ bash
$ echo $a_a
a

但是,在子shell 中对同一变量进行的修改,不会被反映到父shell 中,哪怕是使用了export 命令。

删除环境变量

使用unset命令。

unset a_a

PATH 环境变量

PATH 环境变量定义了用于用户进行命令和程序查找的目录。

如果命令或者程序不在PATH 变量中,则必须得使用绝对路径才能进行调用。

查看PATH 环境变量

echo 可以用来打印内容

$ echo $PATH 

返回结果便是路径

但并不好看,因此我们可以利用管道(传递结果),及tr 操作以及换行符\n,将输出结果修改。

echo $PATH|tr ':' '\n'

打印结果,因为我安装了java 和minicoda,因此还有一些其他的路径。

/root/miniconda3/envs/wes/bin
/root/miniconda3/condabin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/usr/local/java/jdk1.8.0_251/bin
/root/bin

顺便利用管道我们还可以借助环境变量查看一些其他东西。
ls 可以列出当前所有内容, 选项l 表示多行输出,h 则可以显示出其详细信息,xargs则是给其他命令传递参数的一个过滤器,在默认设置下相当于echo。
可以列出所有环境下的文件

echo $PATH|tr ':' '\n'|xargs ls -lh

除此之外,我们也可以查看某个环境下的文件信息

ls -lh /root/miniconda3/bin

绿色的都是可执行文件


设置PATH 环境变量

通常来说,会把. 当前目录也添加到PATH中。

一种有两种方法。

第一种

可以直接把新的搜索目录添加到现有PATH 环境变量中,无需从头定义。只要引用原来的PATH值,再给它添加新目录就行了。
下面的export 可以省去。

export PATH="$PATH:环境所在的绝对路径"

该方法相对比较省事,一行代码就可以解决问题。
可是上述的PATH 在连接关闭后就会失效。

第二种

第二种方法通过修改/etc/profile 从而改变环境。

vim /etc/profile # 通过vim 编辑器进入文件
export PATH="$PATH:环境所在的绝对路径" # 指定环境,添加到文件末尾
:wq # 保存并退出vim

通过source /etc/profile 激活环境,没有报错就成功啦。

PS1 设置

PS1 是系统终端的命令提示符变量。

echo $PS1 # 查看当前的环境
[\u@\h \W] # 返回的内容

那么这些命令提示符变量分别代表什么含义呢?

这里参考:https://www.cnblogs.com/feiyun126/p/6125608.html

\d :代表日期,格式为weekday month date,例如:Wed Dec 12
\H :完整的主机名称。例如:hostname是debian.linux
\h :仅取主机的第一个名字,如上例,则为debian,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称 如:root
\v :BASH的版本信息  如:3.2
\w :完整的工作目录名称。家目录会以 ~代替 如显示/etc/default/
\W :利用basename取得工作目录名称,所以只会列出最后一个目录 如上例则只显示default
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

而我的root@VM_0_3_centos ~ 对应的命令提示符变量为[\u@\h \W]

  • 还可以通过修改PS1 内容,从而修改各种类型提示符的颜色。

通常来说提示符颜色格式为\[\e[F;Bm\] F 表示字体颜色,B表示背景颜色。
比如我设置的就是PS1="\[\e[35;1m\]\u \[\e[31;1m\]\t \[\e[32;1m\]\w \n\[\e[30;1m\]$"
可以参考://www.greatytc.com/p/0ad354929baf

你可以通过cat >>vim 的方式进入 .bashrc 文件。在文件末尾加上即可。
记得结束以后source ~/.bashrc 激活新配置

激活后

.bashrc 与profile 区别

bashrc和profile都是Shell的启动设置文件,可以初始化环境变量。
但profile是在用户登录后才会运行,而bashrc在系统一启动便会运行。

另一方面,bashrc属于non-login shell,可以在非交互模式下运行,即不通过shell 进行交互(比如你通过ssh 连接输入cd, ls等交互),而是通过读取存放在文件中的命令,并进行执行。直到读取至文件的末尾,shell 才终止。

而profile 则属于交互式的 login shell,与bashrc 相反。

conda 中的环境

conda 是个管理linux 包的好东西。
你可以通过下面这个代码安装

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh #安装软件到服务器目录
bash Miniconda3-latest-Linux-x86_64.sh # 用bash 运行该脚本
source ~/.bashrc # 激活conda

conda 非常厉害的一点在于,它提供了一个创建环境的功能。

一些非常有用的conda 指令。

conda --version # 查看conda 版本
conda create -n xxx python=2 # 创建xxx 的环境,依赖py2.0
conda info --envs # 查看当前环境
conda info -e # 也可以查看环境
conda env remove -n env_name # 删除某个环境
source active xxx # 激活环境
source deactivate # 退出当前环境
conda remove package_name # 删除某个包
conda create -n new_env_name old_env_name # 直接复制某个环境
conda install package_name # 安装某个包
conda search package_name # 在conda 软件库中搜索某个包
conda update package_name # 更新某个包
conda list # 查看当前环境下安装的内容

调用文件

最直接的方式,便是通过文件的路径,一点一点打出,或者通过相对路径打开文件。

简化调用文件的方式

1)通过赋值。
给变量赋值为某个对象

bowtie2=/root/biosofts/bowtie2/bowtie2-2.2.9/bowtie2
$bowtie2 # 调用变量

2)使用alias。
类似于快捷方式。

alias bowtie2=/root/biosofts/bowtie2/bowtie2-2.2.9/bowtie2 # 给变量简称
bowtie2 # 调用变量

3)添加环境变量。

export PATH="$PATH:/root/biosofts/bowtie2/bowtie2-2.2.9/"

这时候,在任意位置都可以使用bowtie2 啦。
但需要注意的是,在环境变量中提过,这种方式在重新连接服务器后会失效。因此我们可以尝试第二种。

这里还提供一种方式。可以修改.bashrc文件。和修改profile 文件一样,在文件的末尾添加指定环境。而至于二者的差异,上文也简单的介绍了。

通过cat 在文件后追加。

cat >> ~/.bashrc

或者还可以通过echo 添加。

echo 'export PATH=~/xxx/xxx/bin:$PATH'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352