Shell基础之环境变量配置文件

一、简介

1、什么是环境变量配置文件

Linux中的环境变量配置文件通常有 ~/.bashrc~/.bash_profile~/.bashrc 文件是每次登录 Bash 时都会被执行的脚本,它通常用来设置一些常用的别名、函数和环境变量。而 ~/.bash_profile 则是在登录时被执行的脚本,可以设置一些与登录相关的配置,例如 PATH 环境变量等。它们还可以用于在终端会话之间存储有关用户环境的重要信息。此外,一些特殊情况下,还可以使用其他的环境变量配置文件,例如 /etc/environment/etc/profile 等。

2、source命令

在Linux中,source 命令用于在当前shell会话中读取并执行指定的Shell脚本文件,并将其中的命令和变量导入到当前的环境中。通常情况下,我们可以使用以下两种方式来执行一个Shell脚本:

  • 直接运行脚本:./test.sh
  • 使用 bash 命令来执行脚本:bash test.sh

但是,这两种方式都会创建一个新的子shell来执行脚本,因此在脚本中定义的变量和函数都只能在子shell中使用,在终止子shell后这些变量和函数就会被销毁。相比而言,使用 source 命令可以直接在当前shell环境中加载和执行脚本,使得其中定义的变量和函数可以在当前shell环境中使用

注:对于环境变量而言,source命令可以立即加载环境变量配置文件,使修改后的环境变量立即生效。

举例,该命令来实现环境变量配置文件的功能,如下

  1. 创建一个文本文件,例如 test.sh
  2. 在该文件中定义需要设置的环境变量,如:export MY_VALUE="my_value"
  3. 在Shell命令行中使用 source 命令来加载该文件,如:source test.sh
  4. 加载成功后,在命令行中即可使用该环境变量,如:echo $MY_VALUE

二、作用

1、常用文件作用

  • /etc/profile:该文件是系统级别的环境变量配置文件,对所有用户都有效。该文件中定义的环境变量会在用户登录时被加载。
  • /etc/environment:该文件是系统级别的环境变量配置文件,在系统启动时被加载。该文件中定义的环境变量对所有用户都有效,可以用来设置全局的环境变量,例如 LANG 和 LC_ 等。
  • ~/.bashrc:该文件是每个用户的个人配置文件,其中定义的环境变量只对当前用户有效。该文件中的环境变量会在用户启动新的终端窗口时被加载。
  • ~/.bash_profile:该文件是每个用户的个人配置文件,和 ~/.bashrc 类似,不同之处在于该文件只在用户登录时被加载。可以用来设置个人环境变量或执行一些自定义脚本。

2、举例说明

关于/etc/profile文件,下面是该文件中的两段代码(出自ubuntu 18.04 LTS)。

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "$(id -u)" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

这段代码是用于设置 shell 的提示符(PS1 环境变量),具体如下:

  1. 首先判断 PS1 变量是否已经定义过,如果没有则结束;这个判断是为了避免重复定义 PS1。
  2. 接下来判断是否在 bash shell 中,并且是否是交互模式(即用户可以在 shell 中输入命令),如果是则执行 /etc/bash.bashrc 中的命令来设置 PS1。如果 /etc/bash.bashrc 文件不存在,则结束。
  3. 如果不在 bash shell 中或者是非交互模式,则根据当前用户是否是 root 用户(UID 为 0)来设置默认的提示符。
  4. 最后,根据定义的 PS1 环境变量来设置命令行提示符的格式。其中 \h 代表主机名,\w 代表当前目录的完整路径,$ 表示非 root 用户的提示符,# 表示 root 用户的提示符。

这段代码的主要作用是为了在 shell 中提供命令交互功能,而且这个功能可与上下方向键联动,自动列出以前的命令。

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

这段代码用于加载 /etc/profile.d 目录下的所有 .sh 后缀的脚本文件。具体如下:

  1. 判断目录 /etc/profile.d 是否存在,如果不存在则不进行任何操作。
  2. /etc/profile.d/*.sh 进行遍历判断,如果文件可读就执行该脚本文件。
  3. 在遍历结束后,使用 unset 命令删除变量 $i,以免影响后续操作。

注:因为 /etc/profile.d 目录中的脚本文件是被系统管理员自己添加或修改的,而不是由系统自带的配置文件,因此这个代码段可以方便地扩展和定制系统的默认环境。比如管理员可以添加脚本文件,然后在其中定义自己需要的环境变量,使得这些变量可以在用户登录时自动生效。

三、其他配置文件和登录信息

1、其他配置文件

  • ~/.bash_logout:该文件是用户注销时执行的脚本文件,可以在该文件中清理一些信息或执行其他操作。
  • ~/.bash_history:这个文件保存着用户在使用 bash shell 进行交互式操作时输入的所有命令历史记录。

2、登录信息

  • 在 Linux 系统中,通常情况下,当一个用户登录到系统时,系统会在终端上显示出一些相关的系统信息,例如操作系统版本、主机名、IP 地址等等。而这些信息就是通过 /etc/issue 文件来配置的。
  • /etc/issue 是一个文本文件,其中包含了要在登录过程中显示的信息。它可以包含用户自定义的文本、转义字符以及预定义的变量。当用户打开一个新的终端窗口时,系统会自动读取这个文件,并将其中的内容显示出来。
  • 除了 /etc/issue 文件,还有一个类似的文件 /etc/issue.net,也用于在用户远程登录时显示相关信息。两个文件的区别在于 /etc/issue 只用于本地登录,而 /etc/issue.net 用于远程登录。

注:

  • 在 Linux 中,当一个用户使用 Shell 登录到系统时,系统会记录登录信息,包括登录时间、来源 IP 地址、登录的 Shell 类型等等。这些信息通常被保存在系统日志中,具体位置可能因为不同的发行版而有所不同。
  • 登录信息可以帮助系统管理员跟踪每个用户的活动,以便确保系统的安全性和稳定性。同时,它也可以帮助用户自己查找和分析自己的登录记录,以便进行问题排查或者了解自己的使用习惯。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值