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下怎么写都能获取到 ...
随机推荐
- 报错pymysql.err.DataError: (1406, "Data too long for column 'gender' at row 1")
在Django默认的admin后台创建超级用户时, 报错pymysql.err.DataError: (1406, "Data too long for column 'gender' at ...
- [Luogu 1559]运动员最佳匹配问题
Description 题库链接 求 \(2\times N\) 个点的带权二分图最佳匹配. \(1\leq N\leq 20\) Solution 我还是太菜了啊...到现在才学 \(KM\) . ...
- 【数据结构】【平衡树】无旋转treap
最近在研究平衡树,看起来这种东西又丧水又很深,感觉很难搞清楚.在Ditoly学长的建议下,我先学习了正常的treap,个人感觉这应该是平衡树当中比较好懂的而且比较好写的一种. 然而,发现带旋treap ...
- ●BZOJ 2442 [Usaco2011 Open]修剪草坪
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题解: 单调队列优化DP 把问题转化为:从序列里选出一些相邻之间间隔不超过K的数,使得 ...
- JSP 基本语法
1 JSP 的由来 servlet产生后,存在很大的问题,为了表现页面的效果,需要输出大量的HTML 语句,表现为一个个字符串,不仅利于开发,也不利于后期的维护,由此产生了JSP.主要用于将Servl ...
- LAN、WAN、WLAN、WiFi之间的区别
感觉这几个概念让人傻傻分不清,下面以最常见的路由器来解释这几个概念. LAN 1 LAN,全称Local Area Network,中文名叫做局域网. 顾名思义,LAN是指在某一区域内由多台计算机 ...
- Windows2003无法连接远程桌面问题 解决方法!
按照以下步骤来一一排除问题吧! 步骤1.遇到这样的情况,通常情况下我们都是先检查远程有没有开启,就是右击我的电脑查看属性里的远程前面的框框有没有勾上,勾上后即可远程,metsc 127.0.0.1 ...
- 性能优化之mysql优化——慢查日志的开启方式和存储
-- MySQL优化 -- mysql 慢查日志的开启方式和存储 -- 1) 查看mysql是否开启慢查询日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 2) ...
- Tomcat访问路径去掉发布项目的项目名称
需求: 把发布到Tomcat下的web项目,访问路径去掉项目名称 实现方式及原理: 方式一: 原理:Tomcat的默认根目录是ROOT,实际上ROOT这个项目在实际生产环境是没有用的,所以我们可以用我 ...
- 简单的国际化i18n
就是简单的中英文转换 index.jsp <%@ page language="java" contentType="text/html; charset=UTF- ...