Linux 环境变量的那些事
想要更好的阅读体验,可以转我的个人博客: nonlinearthink
我们日常做开发的时候,经常遇到环境变量的配置,网上的教程往往总是教你做,却不告诉你为什么。
那么环境变量到底是个什么东西?
环境变量
打印环境变量
什么是环境变量?
env
这个命令可以打印出所有的环境变量。
环境变量就是程序运行的一系列环境参数。
打印单个环境变量
echo $PATH
echo $SHELL
echo $HOME
echo $LOGNAME
这是几个比较常见的环境变量。
变量名 | 说明 |
---|---|
PATH | shell将会去这里搜寻命令和程序 |
SHELL | 当前使用的shell类型 |
HOME | 当前用户的根目录 |
LOGNAME | 当前用户的登录名 |
定义环境变量
这是 Go 语言的一个环境变量配置。~/.bashrc
中添加下面几行。
export GOROOT=/usr/local/Cellar/go/1.13.5/bin
保存退出后,就可以使用 echo $GOROOT
打印出来了。
更改环境变量的值
有一个比较特殊的环境变量 $PATH
,它的特殊性在于它事实上的意思是可执行文件的一个路径集合,既然是集合就可以被不断添加。
$PATH
以 :
分割,大概就是 path/to/first:path/to/second
这样的形式。
export PATH=$PATH:$GOROOT/bin
上面的命令干了什么呢?
其实,他是做了一个 +=
操作。也就是在原先的 $PATH
的基础上加上了 $GOROOT/bin
。
$GOROOT
就是上面定义的。
Shell 配置文件
多用户配置
在 unix-like 系统中,系统配置文件都被放在一个叫 /etc
的目录下。我们今天的主角是其中的 shell 配置文件。
shell 配置文件可以分为两类: *profile
和 *shrc
。
*profile
中的内容会在用户登录时被运行。
*shrc
会在 shell 启动时被运行。
从生命周期的角度讲,写在 *profile
中的环境变量的生命周期是整个系统运行期间,而 *shrc
仅仅在 shell 被启动的时候才有效。
生命周期长不一定好,因为我们可能不希望操作系统做太多的初始化而导致开机变慢,所以大部分我们用户自定义的环境变量都是在 *shrc
中。
但是有些软件,需要他们一开机就运行,比如输入法,就需要写在 *profile
中。
cd /etc
ls *profile
# output:
# profile zprofile
ls *shrc
# output:
# bashrc csh.cshrc zshrc
因为我安装了 zsh,所以多了 zprofile
和 zshrc
,没安装过其他的 shell,只有默认的 bash 的话,应该只有 profile
和 bashrc
。
除此之外,忘记说了一点,/etc
文件夹下的配置是针对全部操作系统的用户的。
单用户配置
上面说了多用户的环境变量配置,单用户的配置应该使用.bashrc
和 .bash_profile
,它们在用户的根目录(~
)下,默认是不创建的,如果需要则自己创建。
cd ~
ls .*profile
# output:
# .bash_profile
ls .*shrc
# output:
# .zshrc
我这里给 bash 创建了 profile,而给 zsh 创建了 shrc,其他没创建。
值得注意的是,.bash_profile
在默认状态下,还会执行 .bashrc
。
环境变量的优先级
如果在 etc/profile
中和 ~/.bash_profile
都定义了相同的名字的环境变量,会发生什么?
这是一个有趣的问题,我们可以从配置文件被加载的顺序来考虑。
以 bash 为例。
- 操作系统启动的时候,
/etc/profile
被调用,然后/etc/profile
调用/etc/bashrc
。 - 用户启动 shell 的时候,
~/.bash_profile
被调用,然后~/.bash_profile
调用~/.bashrc
。
最后被调用的自然会覆盖前面被调用的。
那么这个问题的也就明确了。
补充
export 命令
export
命令就是设置环境变量。分两个场景来看:
在命令行下
在命令行下的
export
的作用域只有在这次登录期间。也就是说
shell
一旦退出,设置的环境变量就消失了。如果想要它一直存在,就要写到配置文件中。
在配置文件中
如果仔细看过上面的分析,就会知道配置文件是在
shell
登录时候自动加载的。自然就不会消失了。
source 命令
配置文件写入之后,环境变量不会马上更新。
source
命令可以加载一次配置文件的内容。
比如,配置完上面的内容,使用 source
:
source .zshrc
alias 命令
alias
就是别名,也就是为命令创建一个别名。
比如,在 linux
中,python
往往默认是 python2
。
使用 alias
可以设置成 python3
。
alias python=python3
alias
也可以当成 export
用。
区别在于,export
可以直接导入一个文件夹下面的全部可执行文件。
使用 alias
的还,你可能需要一个个精准定位了。
alias mysql=/usr/local/mysql/bin/mysql
这样之后,我们每次用 mysql
的命令,就会被替换成 /usr/local/mysql/bin/mysql
。
alias
略微简洁明了一点,但其实优势并不是很大,一般都推荐用 export
。
Linux 环境变量的那些事相关推荐
- shell编程(三) : [Linux基础] Linux 环境变量
接上一篇文章Linux shell编程(二): Linux shell基础 2.3 Linux环境变量 bash shell用一个叫作环境变量(environment variable)的特性来存储有 ...
- Linux环境变量说明与配置
相关的配置文件说明: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 ...
- linux mv 环境变量,linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用...
linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用 [email protected] ~]# cp /usr/bin/ls /tmp/ [[email p ...
- 超详干货!Linux 环境变量配置全攻略
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 Linux环境变量配置 在自定义安装软件 ...
- python脚本设置linux环境变量_Linux环境变量export方法与修改文件方法的区别
玩蛇网推荐图文教程:python 列表 要想修改Linux环境变量有两种方法可以实现,但是关于Linux环境变量export方法与修改文件方法的区别你又了解多少呢?设置 Linux 环境变量可以通过 ...
- Linux环境变量加载的研究
我们经常遇到在linux执行某条命令时出现xxx文件没找到的问题.很多情况都不是库没有安装,而是环境变量的错误. 但是,我明明是设置了环境变量啊.所以,我对此进行了试验. 我们登录linux有很多种, ...
- Linux环境变量配置出错,导致登录不了......
Linux环境变量配置出错导致的后果: 1.登陆不了 linux 了 2.基本命令全失效了(如:ls,vi,sudo,su,find,cp等),除了cd命令可用. 解决方法有如下三步: 1.从图形登陆 ...
- Linux环境变量配置
这篇文章主要介绍了Linux环境变量配置全攻略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 在自定义安装软件的时候,经常需要 ...
- linux环境变量配置的方法,Linux环境变量配置方法
Linux上环境变量配置分为设置永久变量和临时变量两种.环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同.Linux环境变量本身配置过 ...
最新文章
- 出租司机给我上的MBA课 -- [ 来自: ] [作者:cexo255]
- Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)
- npm命令运行时报错_运行npm update等命令出错后如何分析问题根源(示例代码)
- 一个简单51c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
- Ngnix中的fastcgi参数性能优化和解释
- mentohust找不到服务器,mentohust最新版
- Python3-word文档操作(六):word文档中表格的操作-单元格文字居中,字体颜色等的设置
- 我的世界Minecraft Java开服教程(Windows)开服器开服包下载开服网站服务器开服核心开服端开服软件mac版Java启动器资源包
- 红米note4手机怎么屏幕录制视频
- 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
- 批处理文件(bat)装逼 之全彩滚动我爱你 绘制五彩爱心 绘制3D球体
- tcp和udp的基本函数调用过程及如何选择
- 键盘定位板图纸_客制化键盘
- 计算机类sci查重,SCI科研写作:国自然标书查重方法
- 如何批量检测查询域名或者网址是否被微信屏蔽拦截
- GPS导航(4):SIM908模块
- Facebook广告投放:WC广告的优点和缺点
- 英音与美音的区别【转】
- 前端面试官问Promise,怎样回答拿高分
- return true return false 的区别
热门文章
- [安洵杯 2019]Attack (详细解析)
- android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容
- android app防止锁屏_如何控制Android不锁屏
- 使用STC-ISP向KEIL添加STC芯片头文件
- 数据中心管理与运维的问题与对策
- 图像超分——SISR方法总结(阅读整理之一)(优缺点,方法详情长更)
- 穿过时光隧道去看TNF100十周年,这次天猫Club如何跑出新生活方式?
- Vue Dhtmlxgantt甘特图/横道图 baselines 含(计划、实际时间对比)树形实例实现及部分扩展
- JS无限滚动、回到顶端和图片懒加载
- 带领域变异的多模态优化差分进化算法(DE/NCDE/NSDE/)