Linux 环境变量

简介: Linux 环境变量

20210809172909946.pngLinux 环境变量

/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.


/etc/bashrc:  为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.


~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.严谨的说应该每次显示source 该环境变量,以免出现莫名其妙的问题,曾经在shell执行和数据库安装上都踩过坑。


~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.


~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.


用户目录下.bashrc和.bash_profile的区别是?


从下面这段可以看出,会先检查/etc/bashrc这个文件,这里其实可以修改为用户目录下的bashrc。以此来起到和其他用户变量隔离的作用。这是个人见解,仅供参考

 postgresql]$ more /home/gpadmin/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi
source /usr/local/greenplum-cc-web-2.0.0-build-32/gpcc_path.sh
GPPERFMONHOME=/usr/local/greenplum-cc-web-2.0.0-build-32
PATH=$GPPERFMONHOME/bin:$PATH 
LD_LIBRARY_PATH=$GPPERFMONHOME/lib:$LD_LIBRARY_PATH 
source /usr/local/greenplum-db/greenplum_path.sh

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

更为直观的示图

bash的每种模式会读取其所在列的内容,首先执行A,然后是B,C。而B1,B2和B3表示只会执行第一个存在的文件:

+----------------+--------+-----------+---------------+
|                | login  |interactive|non-interactive|
|                |        |non-login  |non-login      |
+----------------+--------+-----------+---------------+
|/etc/profile    |   A    |           |               |
+----------------+--------+-----------+---------------+
|/etc/bash.bashrc|        |    A      |               |
+----------------+--------+-----------+---------------+
|~/.bashrc       |        |    B      |               |
+----------------+--------+-----------+---------------+
|~/.bash_profile |   B1   |           |               |
+----------------+--------+-----------+---------------+
|~/.bash_login   |   B2   |           |               |
+----------------+--------+-----------+---------------+
|~/.profile      |   B3   |           |               |
+----------------+--------+-----------+---------------+
|BASH_ENV        |        |           |       A       |
+----------------+--------+-----------+---------------+

bd01ba84b2a540ab93c445c623950708.png

典型模式总结

non-interactive + non-login shell

创建这种shell典型有两种方式:

  • bash script.sh
  • ssh user@remote command

interactive + login shell

  • 用户直接登陆到机器获得的第一个shell
  • 用户使用 ssh user@remote 获得的shell

non-interactive + login shell

非交互式的登陆shell,这种是不太常见的情况。一种创建此shell的方法为: bash -l script.sh ,前面提到过-l参数是将shell作为一个login shell启动,而执行脚本又使它为non-interactive shell。

interactive + non-login shell

在一个已有shell中运行 bash,此时会打开一个交互式的shell,而因为不再需要登陆,因此不是login shell。


为了更好的理清这几种模式,下面我们对一些典型的启动方式各属于什么模式进行一个总结:

  • 登陆机器后的第一个shell:login + interactive
  • 新启动一个shell进程,如运行 bash :non-login + interactive
  • 执行脚本,如 bash script.sh :non-login + non-interactive
  • 运行头部有如 #!/usr/bin/env bash 的可执行文件,如 ./executable :non-login + non-interactive
  • 通过ssh登陆到远程主机:login + interactive
  • 远程执行脚本,如 ssh user@remote script.sh :non-login + non-interactive
  • 远程执行脚本,同时请求控制台,如 ssh user@remote -t 'echo $PWD' :non-login + interactive
  • 在图形化界面中打开terminal:
  • Linux上: non-login + interactive
  • Mac OS X上: login + interactive

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
3月前
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
|
3月前
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
32 3
|
2月前
|
Linux Shell
在Linux中,如何设置环境变量?
在Linux中,如何设置环境变量?
|
2月前
|
Shell Linux
在Linux中,什么是环境变量?如何设置和查看环境变量?
在Linux中,什么是环境变量?如何设置和查看环境变量?
|
3月前
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
47 0
Linux环境变量及作用
|
3月前
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
226 2
|
4月前
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
|
4月前
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量
31 3
|
3月前
|
Java Linux Shell
【Linux】深度解剖环境变量
【Linux】深度解剖环境变量
31 0
|
3月前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别