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下怎么写都能获取到 ...
随机推荐
- [NOIp 2014]解方程
Description 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) Input 输入文件名为equation .i ...
- LGTB 与序列
LGTB 有一个长度为N 的序列A,现在他想构造一个新的长度为N 的序列B,使得B 中的任意两个数都 互质. 并且他要使ai与bi对应项之差最小 请输出最小值 输入 第一行包含一个数N 代表序列初始长 ...
- Educational Codeforces Round 19
A. k-Factorization 题目大意:给一个数n,求k个大于1的数,乘积为n.(n<=100,000,k<=20) 思路:分解质因数呗 #include<cstdio> ...
- [SPOJ962]Intergalactic Map 拆点+最大流
Jedi knights, Qui-Gon Jinn and his young apprentice Obi-Wan Kenobi, are entrusted by Queen Padmé Ami ...
- poj 2528 (线段树+离散化)
poj 2528 For each input data set print the number of visible posters after all the posters are place ...
- python常用命令(持续) | Commonly used Python command list (con't)
---------------------------------------------------------------------------------------------------- ...
- JavaScript进阶-this
1.什么是this? 当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文).这个记录会包 含函数在哪里被调用(调用栈).函数的调用方法.传入的参数等信息.this 就是记录的 其中一个属性 ...
- 使用svn无法cleanup和lock问题
step1: 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlite3.exe 找到 Precompiled Binaries for W ...
- Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向
Day35 Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2 ...
- 0428css样式
CSS样式表|-引入的三种方式|--内联样式|----标签内部(空格style)|--内嵌样式|----<head></head>标签内部(<style></ ...