• 售前

  • 售后

热门帖子
入门百科

CentOS中情况变量与设置文件的深入讲授

[复制链接]
爱无声爱留痕列 显示全部楼层 发表于 2021-10-25 18:53:08 |阅读模式 打印 上一主题 下一主题
媒介
CentOS的环境变量设置文件体系是一个层级体系,这与其他多用户应用系统设置文件是类似的,有全局的,有用户的,有shell的,另外差别层级有时类似继承关系。
本文将具体介绍关于CentOS环境变量与设置文件的干系内容,下面话不多说了,来一起看看具体的介绍吧
什么是环境变量

bash shell用一个叫做 环境变量(environment variable) 的特性来存储有关shell会话和工作环境的信息。即允许在内存中存储数据,使得在程序或shell中运行的脚本可以大概访问它们。
在bash shell中,环境变量分为两类:
      
  • 全局变量  
  • 局部变量
全局环境变量

全局环境变量对于shell会话和全部生成的子shell都是可见的。局部变量则只对创建它们的shell可见。
查看全局变量,可以使用env或printenv下令。
  1. [root@dev ~]# env
  2. HOSTNAME=localhost
  3. TERM=linux
  4. SHELL=/bin/bash
  5. HISTSIZE=1000
  6. SSH_CLIENT=10.0.100.17 56344 22
  7. SSH_TTY=/dev/pts/0
  8. USER=root
  9. [root@dev ~]#
  10. [root@dev ~]# printenv
  11. HOSTNAME=localhost
  12. TERM=linux
  13. SHELL=/bin/bash
  14. HISTSIZE=1000
  15. SSH_CLIENT=10.0.100.17 56344 22
  16. SSH_TTY=/dev/pts/0
  17. USER=root
  18. [root@dev ~]# printenv TERM
  19. linux
复制代码
使用环境变量,通过 $ +变量名。
  1. [root@dev ~]# echo $HOME
  2. /root
复制代码
系统环境变量根本上都是使用大写字母,以区别于普通用户的环境变量。
局部环境变量

顾名思义,局部环境变量只能在定义它们的历程中可见。set下令会表现某个特定历程设置的全部环境变量,包括局部变量、全局变量以及用户定义变量。
  1. [root@dev ~]# set
  2. BASH=/bin/bash
  3. BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
  4. BASH_ALIASES=()
  5. BASH_ARGC=()
  6. BASH_ARGV=()
  7. BASH_CMDS=()
  8. BASH_LINENO=()
  9. BASH_SOURCE=()
  10. BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
  11. BASH_VERSION='4.1.2(1)-release'
  12. COLORS=/etc/DIR_COLORS
  13. COLUMNS=165
复制代码
用户定义变量

一旦启动了bash shell,就能创建在这个shell历程内可见的局部变量。该历程创建的子shell无法读取父shell的局部变量。
  1. [root@dev shell]# sh a.sh
  2. 2
  3. 22
  4. 2
  5. [root@dev shell]# cat a.sh
  6. #!/bin/bash
  7. a=1;
  8. export b=2;
  9. sh b.sh
  10. echo $b;
  11. [root@dev shell]# cat b.sh
  12. #!/bin/bash
  13. echo $a;
  14. echo $b;
  15. b=22;
  16. echo $b;
  17. [root@dev shell]# sh a.sh
  18. 2
  19. 22
  20. 2
复制代码
用户可以通过export变量,使变量变为全局变量,如许子shell也可以读取到。而子shell修改该变量,父shell中不受影响。
如果在子shell中设置环境变量,想要在父shell中读取呢?
一个使用场景是:多个执行脚本依赖于共同的环境设置,这个设置写在一个env.sh脚本里,如何使其他执行脚本可以读取到env.sh里变量?在子shell中export变量,并不能影响到父shell。
source下令(从 C Shell 而来)是bash shell的内置下令。点下令,就是一个点符号,(从Bourne Shell而来)是source的另一名称。这两个下令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子历程。全部在脚本中设置的变量将成为当前Shell的一部门。
  1. [root@dev shell]# cat c.sh
  2. . ./env.sh
  3. source ./profile.sh
  4. echo $env;
  5. echo $profile;
  6. [root@dev shell]# cat env.sh
  7. env='test';
  8. [root@dev shell]# cat profile.sh
  9. profile="dev";
  10. [root@dev shell]# sh c.sh
  11. test
  12. dev
复制代码
如果想要删除环境变量
  1. 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启动文件的下令。
  1. [root@dev shell]# cat /etc/profile
  2. # /etc/profile
  3. # System wide environment and startup programs, for login setup
  4. # Functions and aliases go in /etc/bashrc
  5. # It's NOT a good idea to change this file unless you know what you
  6. # are doing. It's much better to create a custom.sh shell script in
  7. # /etc/profile.d/ to make custom changes to your environment, as this
  8. # will prevent the need for merging in future updates.
  9. pathmunge () {
  10. case ":${PATH}:" in
  11.   *:"$1":*)
  12.    ;;
  13.   *)
  14.    if [ "$2" = "after" ] ; then
  15.     PATH=$PATH:$1
  16.    else
  17.     PATH=$1:$PATH
  18.    fi
  19. esac
  20. }
  21. if [ -x /usr/bin/id ]; then
  22. if [ -z "$EUID" ]; then
  23.   # ksh workaround
  24.   EUID=`id -u`
  25.   UID=`id -ru`
  26. fi
  27. USER="`id -un`"
  28. LOGNAME=$USER
  29. MAIL="/var/spool/mail/$USER"
  30. fi
  31. # Path manipulation
  32. if [ "$EUID" = "0" ]; then
  33. pathmunge /sbin
  34. pathmunge /usr/sbin
  35. pathmunge /usr/local/sbin
  36. else
  37. pathmunge /usr/local/sbin after
  38. pathmunge /usr/sbin after
  39. pathmunge /sbin after
  40. fi
  41. HOSTNAME=`/bin/hostname 2>/dev/null`
  42. HISTSIZE=1000
  43. if [ "$HISTCONTROL" = "ignorespace" ] ; then
  44. export HISTCONTROL=ignoreboth
  45. else
  46. export HISTCONTROL=ignoredups
  47. fi
  48. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
  49. # By default, we want umask to get set. This sets it for login shell
  50. # Current threshold for system reserved uid/gids is 200
  51. # You could check uidgid reservation validity in
  52. # /usr/share/doc/setup-*/uidgid file
  53. if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
  54. umask 002
  55. else
  56. umask 022
  57. fi
  58. for i in /etc/profile.d/*.sh ; do
  59. if [ -r "$i" ]; then
  60.   if [ "${-#*i}" != "$-" ]; then
  61.    . "$i"
  62.   else
  63.    . "$i" >/dev/null 2>&1
  64.   fi
  65. fi
  66. done
  67. unset i
  68. 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来调用。
  1. [root@dev shell]# cat ~/.bash_profile
  2. # .bash_profile
  3. # Get the aliases and functions
  4. if [ -f ~/.bashrc ]; then
  5.   . ~/.bashrc
  6. fi
  7. # User specific environment and startup programs
  8. PATH=$PATH:$HOME/bin
  9. export PATH
复制代码
总结:
将要设置的系统全局环境变量,好比JAVA_HOME,放在/etc/profile.d/目次下, 以*.sh脚本的形式定义。
好了,以上就是这篇文章的全部内容了,希望本文的内容对各人的学习或者工作具有一定的参考学习代价,如果有疑问各人可以留言交流,谢谢各人对脚本之家的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作