CentOS中环境变量与配置文件的深入讲解

前言

CentOS的环境变量配置文件体系是一个层级体系,这与其他多用户应用系统配置文件是类似的,有全局的,有用户的,有shell的,另外不同层级有时类似继承关系。

本文将详细介绍关于CentOS环境变量与配置文件的相关内容,下面话不多说了,来一起看看详细的介绍吧

什么是环境变量

bash shell用一个叫做 环境变量(environment variable) 的特性来存储有关shell会话和工作环境的信息。即允许在内存中存储数据,使得在程序或shell中运行的脚本能够访问它们。

在bash shell中,环境变量分为两类:

  • 全局变量
  • 局部变量

全局环境变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见。

查看全局变量,可以使用env或printenv命令。

[root@dev ~]# env
HOSTNAME=localhost
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.100.17 56344 22
SSH_TTY=/dev/pts/0
USER=root

[root@dev ~]#
[root@dev ~]# printenv
HOSTNAME=localhost
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.100.17 56344 22
SSH_TTY=/dev/pts/0
USER=root

[root@dev ~]# printenv TERM
linux

使用环境变量,通过 $ +变量名。

[root@dev ~]# echo $HOME
/root

系统环境变量基本上都是使用大写字母,以区别于普通用户的环境变量。

局部环境变量

顾名思义,局部环境变量只能在定义它们的进程中可见。set命令会显示某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。

[root@dev ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=165

用户定义变量

一旦启动了bash shell,就能创建在这个shell进程内可见的局部变量。该进程创建的子shell无法读取父shell的局部变量。

[root@dev shell]# sh a.sh

2
22
2
[root@dev shell]# cat a.sh
#!/bin/bash

a=1;
export b=2;

sh b.sh

echo $b;

[root@dev shell]# cat b.sh
#!/bin/bash

echo $a;
echo $b;
b=22;
echo $b;
[root@dev shell]# sh a.sh 

2
22
2

用户可以通过export变量,使变量变为全局变量,这样子shell也可以读取到。而子shell修改该变量,父shell中不受影响。

如果在子shell中设置环境变量,想要在父shell中读取呢?

一个使用场景是:多个执行脚本依赖于共同的环境配置,这个配置写在一个env.sh脚本里,如何使其他执行脚本可以读取到env.sh里变量?在子shell中export变量,并不能影响到父shell。

source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是一个点符号,(从Bourne Shell而来)是source的另一名称。这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前Shell的一部分。

[root@dev shell]# cat c.sh
. ./env.sh
source ./profile.sh

echo $env;
echo $profile;
[root@dev shell]# cat env.sh
env='test';
[root@dev shell]# cat profile.sh
profile="dev";
[root@dev shell]# sh c.sh
test
dev

如果想要删除环境变量

unset var_name

设置全局环境变量

上文中,可以知道,如果想要在本进程和子进程中使用共同的环境变量。通过source命令去读取同一个环境变量脚本可以实现。这是用户自定义的方案。但很多时候,我们需要读取的全局环境变量并不知道source,所以需要一个默认的环境变量读取文件。

当你登录Linux系统时,bash shell会作为登录shell启动。登录shell会从5个不同的启动文件里读取

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile

/etc/profile文件是bash shell默认的主启动文件。只要你登录了Linux系统,bash就会执行/etc/profile启动文件的命令。

[root@dev shell]# cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
 case ":${PATH}:" in
  *:"$1":*)
   ;;
  *)
   if [ "$2" = "after" ] ; then
    PATH=$PATH:$1
   else
    PATH=$1:$PATH
   fi
 esac
}

if [ -x /usr/bin/id ]; then
 if [ -z "$EUID" ]; then
  # ksh workaround
  EUID=`id -u`
  UID=`id -ru`
 fi
 USER="`id -un`"
 LOGNAME=$USER
 MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
 pathmunge /sbin
 pathmunge /usr/sbin
 pathmunge /usr/local/sbin
else
 pathmunge /usr/local/sbin after
 pathmunge /usr/sbin after
 pathmunge /sbin after
fi

HOSTNAME=`/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
 export HISTCONTROL=ignoreboth
else
 export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 umask 002
else
 umask 022
fi

for i in /etc/profile.d/*.sh ; do
 if [ -r "$i" ]; then
  if [ "${-#*i}" != "$-" ]; then
   . "$i"
  else
   . "$i" >/dev/null 2>&1
  fi
 fi
done

unset i
unset -f pathmunge

该文件会读取/etc/profile.d/下所有的*.sh文件,通过点命令(source)来加载变量。即在/etc/profile和/etc/profile.d/*.sh定义的变量,都是全局的系统环境变量。

$HOME/.bash_profile

$HOME下的启动文件都是用户专属的启动文件,定义该用户的环境变量。而/etc/profile则是系统的,所有用户的环境变量。

shell会按照下列顺序,运行第一个找到的文件,余下被忽略:

  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

.bashrc通过.bash_profile来调用。

[root@dev shell]# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

总结:

将要设置的系统全局环境变量,比如JAVA_HOME,放在/etc/profile.d/目录下, 以*.sh脚本的形式定义。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • CentOS下SSH无密码登录的配置文件

    1.确认本机sshd的配置文件(需要root权限) $ gedit /etc/ssh/sshd_config 找到以下内容,并去掉注释符"#" RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 2.如果修改了配置文件需要重启sshd服务 (需要root权限) $ /sbin/service sshd restart 配置SSH无密码登录需要3步: 1.生成公钥和私

  • CentOS 7配置LNMP开发环境及配置文件管理详解

    安装并配置MySQL 5.6 从CentOS从7.x开始默认使用MariaDB.MariaDB完全兼容MySQL,包括API和命令行.但是很多时候我们还是会想要安装MySQL,所以不能直接通过yum命令安装. 下载源安装文件 wget http://repo.mysql.com//mysql57-community-release-el7-8.noarch.rpm 本地安装rpm包(配置MySQL安装源) yum -y localinstall mysql57-community-release

  • CentOS中环境变量与配置文件的深入讲解

    前言 CentOS的环境变量配置文件体系是一个层级体系,这与其他多用户应用系统配置文件是类似的,有全局的,有用户的,有shell的,另外不同层级有时类似继承关系. 本文将详细介绍关于CentOS环境变量与配置文件的相关内容,下面话不多说了,来一起看看详细的介绍吧 什么是环境变量 bash shell用一个叫做 环境变量(environment variable) 的特性来存储有关shell会话和工作环境的信息.即允许在内存中存储数据,使得在程序或shell中运行的脚本能够访问它们. 在bash

  • go项目中环境变量的配置

    目录 一.为什么要配置文件 二.在go中使用配置文件 三.使用结构体的方式读取 四.区分开发环境和生产环境 五.在gin中集成配置文件 一.为什么要配置文件 1.容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过配置会方便后人理解整个系统的架构 2.做到业务代码和环境解耦,环境配置变量不侵入到代码层面 3.不同的环境切换比较方便 二.在go中使用配置文件 1.viper网站地址 2.本地安装 go get github.com/spf13/viper 3.简单的读取配置文件 packa

  • Node.js中环境变量process.env的一些事详解

    前言 最近这两天在和运维GG搞部署项目的事儿.碰到一个问题就是,咱们的dev,uat,product环境的问题. 因为是前后端分离,所以在开发和部署的过程中会有对后端接口的域名的切换问题.折腾了一下午,查询了各种资料这才把这Node环境变量process.env给弄明白. 下面这就做个问题解决的记录.希望能对这个不明白的人有所帮助.话不多说了,来一起看看详细的介绍吧. Node环境变量 首先,咱们在做react.vue的单页应用开发的时候,相信大家对配置文件里的process.env并不眼生.

  • Linux中环境变量配置的步骤详解

    简介 我们大家在平时使用Linux的时候,经常需要配置一些环境变量,这时候一般都是网上随便搜搜就有人介绍经验的.不过问题在于他们的方法各不相同,有人说配置在/etc/profile里,有人说配置在/etc/environment,有人说配置在~/.bash_profile里,有人说配置在~/.bashrc里,有人说配置在~/.bash_login里,还有人说配置在~/.profile里...这真是公说公有理...那么问题来了,Linux到底是怎么读取配置文件的呢,依据又是什么呢?下面这篇文章就来

  • ASP.NET Core环境变量配置和启动设置讲解

    ASPNETCORE_ENVIRONMENT ASP.NET Core控制环境切换最核心的东西是“ASPNETCORE_ENVIRONMENT”环境变量,它直接控制当前应用程序运行的环境类型.您可以通过在项目上右键菜单选择“属性”选项,然后切换到“调试”标签来修改此环境变量. 此环境变量框架默认提供了三个值,当然您也可以定义其它的值: Development(开发) Staging(预演) Production(生产) 我们在Startup.cs文件中,可以使用相应的方法来控制应用程序的行为.以

  • Linux 环境变量详解及实例

    Linux环境变量 ~/.bash_profile && ~/.bashrc 用户登陆Linux操作系统的时候,"/etc/profile", "~/.bash_profile"等配置文件会被自动执行. 执行过程是这样的: 登陆Linux系统时,首先启动"/etc/profile", 然后启动用户目录下的"~/.bash_profile", 如果"~/.bash_login"和"~

  • 浅谈Linux环境变量文件介绍

    在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量. 系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量 用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量 自然而然地,环境变量的配置文件也相应的被分成了系统级和用户级两种. 系统级 /etc/profile 在系统启动后第一个用户登录时运行,并从/etc/profile.d目录的配置文件中搜集shell的设置,使用该文件配置的环境变量将应用于登录到系统的每一个用户.

  • 深入浅析vue全局环境变量和模式

    我们可以在项目根目录中的下列文件来指定环境变量: .env                # 在所有的环境中被载入 .env.local          # 在所有的环境中被载入,但会被 git 忽略 .env.[mode]         # 只在指定的模式中被载入 .env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略 一个环境文件只包含环境变量的"键=值"对,并且必须以VUE_APP开始: FOO=bar     //无效 VUE_APP_SE

  • CentOS实现将php和mysql命令加入到环境变量中的几种方法

    CentOS实现将php和mysql命令加入到环境变量中的几种方法 前言: Linux CentOS配置LAPM环境时,为了方便,将PHP和MySQL命令加到系统环境命令,下面我们记录几种在linux下将php和mysql加入到环境变量中的方法. 如果在没有添加到环境变量之前,执行"php -v"命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法. 假设php和mysql分别安装在/usr/local/

  • linux CentOS 系统下如何将php和mysql命令加入到环境变量中

    linux CentOS 系统下如何将php和mysql命令加入到环境变量中 在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行"php -v"命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假设php.mysql和apache分别安装在/phpstudy/server/php/./phpstudy

随机推荐