linux下的环境变量
环境变量有时候要查找,但是经常忘记有哪些文件,现在做一个总结:
| /etc/profile | 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置 |
| /etc/bashrc | 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取 |
| ~/.bash_profile | 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件 |
| ~/.bashrc | 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取. |
| ~/.bash_logout | 当每次退出系统(退出bash shell)时,执行该文件 |
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
一、交互式登陆shell
/etc/profile——>(~.bash_profile(redhat)|~.profile(ubuntu)|~.bash_login)——>~.bashrc——>(/etc/bashrc(redhat)|/etc/bash.bashrc(ubuntu))——>~.bash_logout
/etc/profile的内容:
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. $i
else
. $i >/dev/null 2>&1
fi
fi
done
~.bash_profile的内容:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
~.profile的内容:
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
~.bashrc的内容:(redhat)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
二、交互式非登陆shell:
~/.bashrc——>/etc/bashrc
三、交互式登陆shell
交互式shell:是指用户在提示符下输命令的shell而非执行脚本的shell。
登陆shell:是在输入用户名和密码登陆后得到的shell,比如从字符终端登陆或者用telnet/ssh从远程登陆。但是从图形界面的窗口管理器登陆之后会显示桌面而不会产生登陆shell(也不会执行启动脚本),在图形界面下打开终端窗口得到的shell也不是登陆shell。
执行exit退出非登陆shell状态。
执行logout退出登陆shell状态。
四、交互式非登陆shell
比如在图形界面下,打开一个终端窗口,或者在登陆shell提示符下再输入bash命令,就得到一个交互式非登陆shell。
为什么登陆shell和非登陆shell的启动脚本要区别开呢?
最初的设计是这样考虑的,如果从字符终端或者远程登陆,那么登陆shell是该用户的所有其它进程的父进程,也是其他子shell的父进程,所以环境变量在登陆shell的启动脚本里设置一次就可以自动带到其它非登陆shell里,而shell的本地变量、函数、alias等设置没有办法带到子shell里,需要每次启动非登陆shell时设置一遍,所以就需要有非登陆shell的启动脚本,所以一般来说~/.bash_profile里设置环境变量,在~/.bashrc里设置本地变量、函数、alias等。如果你的linux带有图形系统则不能这样设置,由于从图形界面的窗口管理器登陆并不会产生登陆shell,所以环境变量也应该在~/.bashrc里面设置。
五、非交互式启动shell
为执行脚本而fork出来的子shell是非交互shell,启动时执行的脚本文件由环境变量BASH_ENV定义,相当于自动执行以下命令:
if [ -n "$BASH_ENV" ];then ."$BASH_ENV";fi
如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动脚本的文件名,source这个脚本。但是不会再次source以~/.bash开头的那些启动脚本。
即BASH_ENV现在为空,只执行了test.sh.
即BASH_ENV现在不是空,是pwd,所以在执行test.sh之前,会执行pwd。
六、以sh命令启动
如果以sh命令启动bash,bash将模拟sh的行为,将继承前面的环境变量,不会再次source以~/.bash开头的那些启动脚本。
echo $CTT没有打印,说明不会再次source以~/.bash开头的那些启动脚本,继承的是前面的环境变量。
七、交互式和非交互式以及登录与非登录
也就是说左边有"login:"的就是登陆shell,否则就是非登陆shell
交互式模式是:shell等待你的输入,并且立即执行你提交的命令。这种模式被被称为交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登陆、执行一些命令、签退。当你签退后shell也终止了。
非交互模式是:shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它们读到文件的结尾,shell也就终止了。
| 登陆shell | 交互式shell | |
|---|---|---|
| 从虚拟机控制台登陆shell | 是 | 是 |
| 通过网络shell到一台远程机器上时登陆shell | 是 | 是 |
| X初始化shell | 是 | 是 |
| X终端shell | 否 | 是 |
| 手动执行bash启动的子shell | 否 | 是 |
| 用在命令替换中的子shell | 否 | 否 |
| 被小括号分组的命令使用的子shell | 否 | 否 |
| 执行脚本时使用的子shell | 否 | 否 |
八、一些常用的环境变量
| PATH | 决定了shell将到哪些目录中寻找命令或程序 |
| HOME | 当前用户主目录 |
| HISTSIZE | 历史记录数 |
| LOGNAME | 当前用户的登录名 |
| HOSTNAME | 指主机的名称 |
| SHELL | 当前用户Shell类型 |
| LANGUGE | 语言相关的环境变量,多语言可以修改此环境变量 |
| 当前用户的邮件存放目录 | |
| PS1 | 基本提示符,对于root用户是#,对于普通用户是$ |
九、环境变量命令介绍
1.echo 显示某个环境变量值 echo $PATH
2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
3.env 显示所有环境变量
4.set 显示本地定义的shell变量
5.unset 清除环境变量 unset HELLO
6.readonly 设置只读环境变量 readonly HELLO
linux下的环境变量的更多相关文章
- hadoop搭建杂记:Linux下JDK环境变量的设置(三种配置环境变量的方法)
Linux下JDK环境变量的设置(三种配置环境变量的方法) Linux下JDK环境变量的设置(三种配置环境变量的方法) ①修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种 ...
- linux下配置环境变量方式
linux下配置环境变量有多种方式,下面简述之 方式1.编辑 /etc/profile 文件,增加如下内容 JAVA_HOME=/usr/local/jdk1. export JAVA_HOME PA ...
- linux 下PATH环境变量
环境变量简介 什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现&quo ...
- 环境变量解释以及在Linux下的环境变量设置
一.环境变量解释 环境变量是什么? 引用百度百科里面的解释:环境变量是操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows系统中的path环境变量,当要求 ...
- linux下jdk环境变量配置深度分析----解决环境变量不生效的问题
1.linux下jdk环境变量配置 是否需要配置环境变量,主要看java -version 显示的版本是否为你期望的版本 1.1 不需要配置环境变量的情况 使用java -version查看,版本显示 ...
- Linux下配置环境变量—— .bashrc 和 /etc/profile
转载:https://blog.csdn.net/sun8112133/article/details/79901527 首先简单说一下什么是环境变量?环境变量简单的说就是当前环境下的参数或者变量.如 ...
- Linux下配置环境变量的几个方法实例
场景:一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录 ...
- Linux下修改环境变量PATH
1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/ ...
- 为什么Linux下的环境变量要用大写而不是小写
境变量的名称通常用大写字母来定义.实际上用小写字母来定义环境变量也不会报错,只是习惯上都是用大写字母来表示的. 首先说明一下,在Windows下是不区分大小写的,所以在Windows下怎么写都能获取到 ...
随机推荐
- Caffe的运行mnist手写数字识别
老规矩,首先附上官方教程:http://caffe.berkeleyvision.org/gathered/examples/mnist.html 1.必要软件 因为Caffe中使用的是Linux才能 ...
- 洛谷P2319 [HNOI2006]超级英雄
一开始是用二分图匹配(网络流)+二分做的,后来发现直接用匈牙利更简单 #include<cstdio> #include<cstdlib> #include<algori ...
- hihocoder1258(水)(2015ACM/ICPC北京站)
题意: 给你B,C,S三种模式,当出现S时直接得分最多300(即perfect) 当是B,C时后面会跟一个数字,当后面的数字是从1开始的连续时,直接得分最多300(即perfect) 问给你一系列,最 ...
- matplotlib中subplot的各参数的作用
subplot(a,b,c)中a代表所画图形的行数 b代表所画图形的列数 c代表所画图形的序号. plt.figure(facecolor='w', figsize=(9, 10)) plt.subp ...
- Windows Server2003本地用户的批量导入和导出(转)
AD域环境的用户导入和导出 Windows server 2003 批量导入用户---CSVDE 在新搭建的域环境中,有许多的域帐号需要导入,可以采用csvde命令来导入域用户:新建一个txt文本文件 ...
- php+xdebug远程调试(单人)
目录 服务器上安装 XDebug 及配置 客户端 PHPstorm 配置 浏览器安装插件 服务器上安装 XDebug 及配置 XDebug 安装 略 配置: 打开 php.ini 配置文件: vim ...
- MYSQL 表左连接 ON AND 和ON WHERE 的区别
首先是针对左右连接,这里与inner join区分 在使用left join时,on and 和on where会有区别 1. on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条 ...
- 学习C语言第一天!
整理心得笔记: 1)c语言程序由函数构成,每个函数可以实现一个或多个功能. 2)一个正规程序可以有多个函数,但是有且只有一个主函数. 3)函数只有在被调用的时候才执行,主函数由系统调用执行. 4 ...
- lodop打印收费小票
//收费系统打印机功能:收费/退费,需要使用到lodop var LODOP;//打印机 $(function () { //初始化 $("body").append('<o ...
- Tarjan笔记1
Tarjan 2822 爱在心中 ** 时间限制: 1 s ** 空间限制: 128000 KB ** 题目等级 : 钻石 Diamond 题解 题目描述 Description"每个人都拥 ...