今天详细聊聊环境变量吧。这个十分常见而基础的问题,想必经常困扰初学者,属于众多“我问了,人家也答了,我还看了帖子,但始终没搞明白”的问题之一。岛主试试用写科普的啰嗦风格解释一下。今天还会出现export/ln/alias等指令,不展开,想必大家也知道岛主想说啥了。
. Q55:常听说装完软件要添加环境变量,到底是什么意思?有时你明明安装成功了某个软件,却无法启动。输入指令后提示“command not found”。 这时,先排除拼写错误,大小写混淆等。 如果拼写和安装本身没有问题,最有可能是命令的执行文件不在系统默认的搜索路径中,系统搜了一圈没找到它。 系统的环境变量是一个内置的参数:PATH。还记得前两天讲过用echo 可以查看变量吗?无论是自己定义的变量,还是这种内置变量,都可以用echo 来查看:echo $变量名 所以,查看当前系统环境变量PATH 就是: echo $PATH /usr/local/sbin:/usr/bin:/Users/ialbert/bin:/home/ubuntu/miniconda3/bin
每个人的系统设置不同,显示结果可能不太一样。 乍一看,长长一串很让人头晕。但仔细看一下,会发现: PATH的内容是多个目录,彼此由冒号(:)隔开,除此之外也没啥玄机了。当你启动某个命令或软件,系统会按这些目录的顺序寻找相应的启动文件。我们可以用which 指令查看某命令当前的位置,如: $ which samtools /usr/bin/samtools
$ which nanopolish /home/ubuntu/miniconda3/bin/nanopolish
你会发现,能正常使用的指令,其路径在PATH变量里都有迹可循。如果都找不到,系统就会报错。前几天介绍的生信分析必备的软件管理系统conda(我们装的是其精简版miniconda3),就能有效避免这种问题。 你是否还记得,最初安装miniconda的时候,中途会问你: Installation finished Do you wish the installer to initialize the Miniconda3 in your home/user/.bashrc? [yes|no] [no]>>> # 新手一般此处输入yes
回答yes,就是允许conda自动帮你配置环境变量。于是它会在PATH变量中添加一个属于它的目录,如/home/ubuntu/miniconda3/bin/ 。此后,用conda install 安装的软件,其执行文件就会自动收在这个目录下,那自然也就包含在PATH变量里了,使用起来通常没啥问题。 但conda并没有收录所有的软件。有些很新、或不能用conda安装的软件,就需要手动安装。而如果启动文件的位置比较特立独行,不在PATH已有的范围里,这时你就需要手动帮它归队了。 . Q56:如何手动添加呢?当然是修改PATH变量啦,把那个软件所在的目录用冒号:目录路径 追加进PATH里就好了。 这种修改分两种,临时和永久。 临时,顾名思义,仅限当前有效,重启Linux系统后就没用了。永久添加,就是彻底写进系统的脚本文件里。如home目录下的~/.bashrc 文件,其中记录了对当前用户有效的各种系统默认设置,每次启动Linux系统,这些设置都会自动生效。 临时修改: 用到export 命令。 用法:export 变量名=变量值
我们需要在PATH那一长串后追加新目录,写在冒号后就行了:原PATH : 追加目录 。假设你要追加的目录是 /your_free_style_path/ (瞎编的): export PATH="$PATH:/your_free_style_path/"
切记,这里原PATH的内容($PATH)要保留,冒号后再追加新内容,否则其他软件都不能用了。 有些帖子里的顺序可能是追加目录:$PATH ,$PATH变量放在了后面。这其实无所谓,只是系统搜索时的先后顺序不同,追加在前面就先搜索前面的。 如果你在不同目录下装了同一款软件(比如不同版本),启动命令相同,那么按照PATH里的目录顺序,先搜到谁就用谁。除非你对另一个重命名以作区分。 # 打开 ~/.bashrc的编辑模式 vim ~/.bashrc
# 找到 PATH 变量的内容,手动把`:/your_free_style_path/`写进去。
# 退出vim,要激活修改才能生效。 source ~/.bashrc
记得用>> echo export PATH="$PATH:/your_free_style_path/" >> ~/.bashrc
. Q57:除了改PATH还能怎么做?受修改变量的启发,还有一个非常有用的重命名指令alias ,用惯了简直爱不释手。基本用法是:alias 别名='原命令 -参数' 比如说,你要用的软件叫toolx,试体会一下: alias toolx = '/your_free_style_path/toolx'
以后每当你敲toolx ,实际敲的是/your_free_style_path/toolx ,路径跟着走,这样也可以愉快地使用软件了。同样,要把这句写进 ~/.bashrc 里并激活,否则效果也是临时的。 alais非常好用。由于可以带着参数一起重命名,就可以这么用: # 简化常用指令: alias ll = 'ls -l'
# 指定最近常用的工作目录,方便随时跳转 alias work ='~/project/analysis/variants/' cd work
# 简化软件的常用代码,比如一步激活一个conda小环境: alias clairev='conda activate clairvoyante-env'
. Q58:如果我不想动配置文件呢?假设你正在一个目录里分析数据,最近你的工作都在这里,有个软件出现了上述情况,但你不想动系统的配置文件,有办法吗? 有的。你可以把那个软件的启动文件链接过来,就像“新建快捷方式”一样。注意链接要具体到文件名。 ln -s [对象的路径] [目标位置]
ln -s /your_free_style_path/软件名 ./
其实,既然可以链接到当前目录,何不链接到PATH下的某个目录(如/usr/bin/),更加一劳永逸? cd /usr/bin/ ln -s /your_free_style_path/软件名 ./
|