linux ls不能用_一文理解linux环境变量(初学者之友)

我的戏份在文末,建议结合我们技能树以前出品的一文系列一起学习:

linux命令行文本操作一文就够

c28ac2986a1daa6ca74272f8f63513cc.png健明

继续见证学徒的成长!

对于Linux初学者来说,环境变量是个很陌生的名词,很多人不能理解它是到底是什么,可以用来干嘛。其实,环境变量,在windows中也有,只是我们平时不怎么直接接触它,所以我们下面也只针对Linux来讲环境变量。

什么是环境变量

首先,在百度百科中,环境变量的解释是这样的:

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

描述性文字理解起来还是太抽象了,我们还是用几个简单的例子,来学习一下环境变量吧

首先,我们登陆上服务器,然后输入ls命令:

vip18 10:06:09 ~
$ ls
readme.txt

可以看到,在当前用户vip18的家目录~下,有一个文件叫readme.txt,但是,当前目录下面并没有ls命令所对应的可执行文件。真正的ls命令的可执行文件,其实是在别处,我们用which ls可以查看到ls所在的位置:

vip18 10:06:13 ~
$ which ls
/bin/ls

可以看到,ls其实是保存在/bin/ls这个目录下的。而我们之所以可以随时随地的调用ls,是因为当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。接下来我们看看当前的环境变量PATH是什么,用echo $PATH可以查看到

vip18 10:11:28 ~
$ echo $PATH
/trainee/vip18/bin:/trainee/vip18/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

可以看到,PATH记录的是很多个目录,这些目录以冒号:作分割,为了让大家看的清楚,我们把冒号:替换成\n

vip18 10:27:59 ~
$ echo $PATH|tr ':' '\n'
/trainee/vip18/bin
/trainee/vip18/.local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

其实,PATH就是记录了很多以bin或者sbin为结尾的目录,这些目录下面就包涵了很多可执行文件,比如我们上面提到的ls命令所在的目录/bin就是倒数第4个。感兴趣的可以去看看其他命令对应的可执行文件都记录在哪个目录里面,这里不再展示。

如何修改环境变量

修改环境变量,其实就是对环境变量进行重新赋值,比如我们安装了一个软件叫aspera

#

这个软件安装好了之后,会在用户的家目录下的生成一个隐藏目录.aspera,需要用ls -a来查看

4b1a81e692fde150eb373051078cac0f.png

进一步查看这个目录的结构:

7b1eb5f607e43764d314890d82543fe3.png

发现它的下下层目录也有一个叫 bin的目录,包涵的可执行文件有
$

假如我们想像调用ls那样随时随地的调用这个软件的命令,即~/.aspera/connect/bin/目录中的可执行文件,那么就需要把这个路径添加到环境变量里面去,方法是:

export PATH="~/.aspera/connect/bin/:$PATH"
# 注意这里要用双引号,不能用单引号

运行上面这一行命令之后,就可以随时随地得调用了,如:

955ba9a339d9e7c9fb4005272ee4379e.png

但是,这方法并不能一劳永逸,我们需要把它写进去.bashrc里面去

.bashrc文件

.bashrc是一个配置文件,也是一个隐藏文件,存在于用户的家目录~下,需要用ls -a才能查看到,当我们每次登陆服务器时,这个文件就会被执行一次,也就是说文件内的代码会被运行一遍。因此,当我们把export PATH="~/.aspera/connect/bin/:$PATH"这一行命令写入.bashrc后,以后每次登陆服务器,系统就会帮我们把这一行命令执行一次,我们就不能再自行运行了,方法如下:

echo export PATH="~/.aspera/connect/bin/:$PATH" >>.bashrc

这样我们就把这一行代码写入到.bashrc里面了,我们说过,.bashrc是在登录服务器的时候才会被执行,因此,我们修改好了之后,要重新登录服务器,或者重新运行一下.bashrc,方法如下:

source .bashrc

这里不建议新手采用vim来编辑.bashrc,除非你已经知道如何使用vim这个工具

一些其他软件,如conda,在安装的时候会有一句提示,问我们是否要把conda的环境添加到.bashrc如:

Do you wish the installer to prepend the Miniconda2 install location
to PATH in your /trainee/vip18/.bashrc ? [yes|no]
[no] >>> 

我们直接输入yes,这样conda的环境就自动添加到.bashrc里面了,不需要像上面那样自己添加。

30d5de7ab33c4a61f08e9bb2a1f16f13.png

补充一个错误的示例

有一些初学者,在修改环境变量的时候,不小心改成了这样:

echo export PATH="~/.aspera/connect/bin/:$ PATH" >>.bashrc

咋一看好像没什么问题,但其实这是个大问题,后面的$PATH之间按多了一个空格,重新激活.bashrc后,就会出现下面的现象:

096abd873f1bd34cdb3ad1b7ef3b1221.png

上面的这些命令都用不了了,报错信息都写着:xxx is not included in the PATH environment variable
但是同时,报错信息也给出了非常重要的一点,如:Command 'ls' is available in '/bin/ls',也就是告诉你了ls命令的可执行文件所在的路径,那么,我们只需要采用全路径调用的方法即可使用这些命令了。

900b07ef1b1bfa0539df447717a3e457.png

当然,我们最终的解决办法还是要把环境变量改回来,一个方法就是删掉最后一行,也就是我们前面追加的一行代码,如:

/bin/sed -i '$d' .bashrc

最后在重新登录服务器就ok了。

后记

修改PATH也许并不是一个好习惯

bb63dc2c2d127b9197f6cf3bd46d1396.png

如果每次安装一个软件就添加其路径到环境变量,最后我们的PATH会变得非常臃肿,通常并不建议这种方式管理软件。

另外一个比较常见的方式是设置文件链接到PATH的其中一个路径,或者直接把可执行的文件拷贝过去。

再或者设置 alias也可以,相信技能树的粉丝高手众多,也许会有自己的软件管理技巧,欢迎留言分享自己的心得体会!

■   ■   ■ 

全国巡讲约你

生信技能树(爆款入门培训课)全国巡讲约你

第一站-重庆  (已结束)

粤港澳大湾区专场 (已结束)

第二站-济南 (已结束)

千呼万唤进北京(已结束)

巡讲-广州和上海(已结束)

郑州和西安(全部结束)

第9、10站-武汉和成都(全部结束)

七月份我们不外出,只专注单细胞!

系统学习单细胞分析,报名生信技能树的线下培训,手慢无21626f84e0856dd1230e0297ee8c9442.png

一年一度的生信技能树单细胞线下培训班火热招生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值