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下怎么写都能获取到 ...
随机推荐
- 推荐一个c++小巧开源且跨平台的图像解码库
该图像解码库仅仅三个文件. 图像处理封装: spot.cpp spot.h 解码库实现: spot.c 支持图片文件格式如下: File format Read Write BMP files yes ...
- Basic command and advice for memcached
Storage Commands set Most common command. Store this data, possibly overwriting any existing data. N ...
- [HNOI 2010]chorus 合唱队
Description 题库链接 对于一个包含 \(N\) 个整数的数列 \(A\) ,我们可以把它的所有元素加入一个双头队列 \(B\) . 首先 \(A_1\) 作为队列的唯一元素,然后依次加入 ...
- [NOIp 2012]同余方程
Description 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Input 输入只有一行,包含两个正整数 a, b,用一个空格隔开. Output 输出只有一行,包含一个 ...
- [ZJOI2015]幻想乡战略游戏
Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...
- 洛谷mNOIP模拟赛Day1-斐波那契
题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...
- 【bzoj4572 scoi2016】围棋
题目描述 近日,谷歌研发的围棋AI—AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑. 与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积神经网络模型. ...
- mysql 使用问题?
linux中安装了mysql客户端和服务器端,为什么无法使用,总是报错呢 解决办法:使用dpkg -r mysql命令删除掉mysql-client和mysql-server了,还是不行,而且查看软件 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介
1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...
- Linked List Cycle II--寻找单链表中环的起始点
题目要求 Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. ...