linux环境变量详解

变量是计算机系统用于保存可变值的数据类型。在 Linux 系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。要想让 Linux 系统能够正常运行并且为用户提供服务,需要数百个环境变量来协同工作,在 Linux 系统中一切都是文件,Linux 命令也不例外。那么,在用户执行了一条命令之后,Linux 系统中到底发生了什么事情呢?简单来说,命令在 Linux 中的执行分为 4 个步骤。
第1步:
判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
第2步:
Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。修改之后要想重启之后还生效可以写入basrc这个文件,vim ~/.bashrc
linux环境变量详解_第1张图片第3步:
Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。
linux环境变量详解_第2张图片

第4步:
系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。
在这里插入图片描述如何添加环境变量PATH呢,有如下方法:
1、临时添加

PATH=$PATH:/home/software

linux环境变量详解_第3张图片2、永久添加
在/etc/profile文件下添加下面语句

export PATH=$PATH:/home/software

可以使用env查看系统中的所有环境变量
linux环境变量详解_第4张图片拓展:
linux变量分类:
1、本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
2、环境变量:用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
设置环境变量主要使用export或者declare -x
• env查看当前用户的环境变量
• set查询当前用户的所有变量(临时变量与环境变量)
• export 变量名=变量值 ;或者 先变量名=变量值,然后export 变量名 ;或者 declare -x 变量名=变量值
系统常见环境变量
PATH:系统查找命令的路径
PS1:定义系统提示符的变量
在这里插入图片描述
3、系统变量
系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用。
(1)位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的

位置参数变量 作用
$n n为数字,$0代表命令本身,$1- 9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待
$# 这个变量代表命令行中所有参数的个数

(2)预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

预定义变量 作用
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)

环境变量配置文件

文件名 说明 备注
~/.bashrc 当前用户的bash信息,用户登录时读取 局部。定义别名、umask、函数等
~/.bash_profile 当前用户的环境变量信息,用户登录时读取 局部。
~/.bash_logout 当前用户退出当前shell时最后读取 局部。定义用户退出时执行的程序等
~/.bash_history 当前用户的历史命令 局部。history -w保存历史记录history -c清空历史记录
/etc/bashrc 全局的bash信息 全局。所有用户都生效
/etc/profile 全局环境变量信息 全局。系统和所有用户都生效

linux环境变量详解_第5张图片1、/etc/profile的作用:
USER,LOGNAME,MALL,PATH,HOSTNAME,HISTSIZE变量;umask;
调用/etc/profile.d/*.sh文件

2、~/.bash_profile的作用
调用了~/.bashrc文件
在PATH变量后面加入了“:HOME/bin”这个目录

3、~/.bashrc的作用
定义默认别名
调用/etc/bashrc

4、/etc/bashrc的作用
PS1变量;umask;PATH变量;调用/etc/profile.d/*.sh文件

说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。用户登录系统读取相关文件的顺序如下:

  1. /etc/profile
  2. $HOME/.bash_profile
  3. $HOME/.bashrc
  4. /etc/bashrc
  5. $HOME/.bash_logout

你可能感兴趣的:(linux,linux,ubuntu,bash)