行业知识
Linux 学习笔记(13)
2026-11-10 00:10:26
来源:互联网转载
十三、 ���境管理 1 、环境变量 在 linux 系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉 及到环境变量 PATH 的设置问题,而 PATH 的设置也是在 linux 下定制环境变量的一个组成部分。 环境变量可以让子程序继续引用的原因,是因为: 1. 当启动一个 shell ,操作系统分配一记忆区块给 shell 使用,此区域之变量可以让子程序存 取; 2. 利用 export 功能,可以让变量的内容写到上述的记忆区块当中(环境变量); 当加载另一个 shell 时 (亦即启动子程序,而离开原本的父程序了),子 shell 3. 可以将父 shell 的环境变量所在的记忆区块导入自己的环境变量区块当中。 所以环境变量是和 Shell 紧密相关的,用户登录系统后就启动了一个 Shell。对于 Linux 来说一般 是 bash,但也可以重新设定或切换到其它的 Shell(使用 chsh 命令)。 根据发行版本的情况,bash 有两个基本的系统级配置文件:/etc/bashrc 和/etc/profile。这些配 置文件包含两组不同的变量:shell 变量和环境变量。前者只是在特定的 shell 中固定(如 bash),后 者在不同 shell 中固定。很明显,shell 变量是局部的,而环境变量是全局的。环境变量是通过 Shell 命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于 bash 这个 Shell 程序来说,可以通过变量名来访问相应的环境变量,通过 export 来设置环境变量。 注:Linux 的环境变量名称一般使用大写字母 1.1 、 Linux 环境变量的种类 按环境变量的生存周期来划分,Linux 的环境变量可分为两类: ○ 1 永久的:需要修改配置文件,变量永久生效。 ○ 2 临时的:使用export命令行声明即可,变量在关闭shell时失效。 1.2 、设置变量的三种方法 ○ 1 在/etc/profile文件中添加变量对所有用户生效(永久的) 用 VI 在文件/etc/profile 文件中增加变量,该变量将会对 Linux 下所有用户有效,并且是“永久 生效”。 例如:编辑/etc/profile 文件,添加 CLASSPATH 变量 # vi /etc/profile export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 注 1:profile 文件在系统启动时将被运行。大家可以在里面加入其他命令,但是一定要加正确,不然 的话系统会启动不起来的。 ○ 2 在用户目录下的.bash_profile文件中增加变量对单一用户生效(永久的) 用 VI 在用户目录下的.bash_profile 文件中增加变量,改变量仅会对当前用户有效,并且是“永 久的”。 例如:编辑 guok 用户目录(/home/guok)下的.bash_profile # vi /home/guok/.bash.profile 添加如下内容: export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 注 2:如果修改了/etc/profile,那么编辑结束后执行 source profile 或 执行点命令 ./profile,PATH 的值就会立即生效了。这个方法的原理就是再执行一次/etc/profile shell 脚本,注意如果用 sh /etc/profile 是不行的,因为 sh 是在子 shell 进程中执行的,即使 PATH 改变了也不会反应到当前环 境中,但是 source 是在当前 shell 进程中执行的,所以我们能看到 PATH 的改变。 注 3:变量重复定义时,以后面的设置为先。 例如:在 peofile 文件默认对 PATH 变量都有设置 PATH=¥¥¥¥¥¥¥,在以后可能在对 PATH 设 置,一般都加在 profile 文件的最后 PATH=······(打个比方)。而系统之中认定的 PATH=·······¥¥¥¥¥¥¥¥¥,也就是说相同名字的环境变量,后写入的先起作用(通俗地讲)。 注 4、特殊字符介绍。 例如在 profile 中有如下内容,通过以下内容说明特殊符号的用法。 export A=/q/jing:aaa/cc/ld export B=.:/liheng/wang export A=/cd/cdr:$A : 表示并列含义,例如 A 变量值有多个,用:符号进行分离。 . 表示你操作的当前目录。例如 pap 命令会查找 B 环境变量。 在/home 键入 B 命令,系统首先在/home 目录下(即当前路径)查找关于 B 的内容,如果没有在 /liheng/wang 目录下查找关于 B 的内容。 $ 表示该变量本次定义之前的值,例如$A 代表 /q/jing:aaa/cc/ld。也就是说 A=/cd/cdr:/q/jing:aaa/cc/ld 注 5、常见的环境变量 PATH:决定了 shell 将到哪些目录中寻找命令或程序 HOME:当前用户主目录 MAIL:是指当前用户的邮件存放目录。 SHELL:是指当前用户用的是哪种 Shell。 HISTSIZE:是指保存历史命令记录的条数。 LOGNAME:是指当前用户的登录名。 HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。 LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 PS1:是基本提示符,对于 root 用户是#,对于普通用户是$。 PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令 会将提示符修改成字符串“Hello,My NewPrompt :) ”。 # PS1=" Hello,My NewPrompt :) " ○ 3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 在 shell 的命令行下直接使用[export 变量名=变量值]定义变量,该变量只在当前的 shell(BASH)或 其子 shell(BASH)下是有效的,shell 关闭了,变量也就失效了,再打开新 shell 时就没有这个变量, 需要使用的话还需要重新定义。 1.3 、环境变量设置命令 ○ 1 echo $ //显示某个环境变量 ○ 2 env // environment (环境) 的简写,列出来所有的环境变量 ○ 3 set //显示所有本地定义的Shell变量,这个命令除了会将环境变量列出来之外,其它我们 的自定义的变量,都会被列出来。因此,想要观察目前 shell 环境下的所有变量,就用 set 即可! ○ 4 export 命令 功能说明:设置或显示环境变量。 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环 境变量,供后续执行的程序使用。export 的效力仅及于该此登陆操作。 参 数: -f 代表[变量名称]中为函数名称。 -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p 列出所有的 shell 赋予程序的环境变量。 一个变量创建时,它不会自动 地为在它之后创建的 shell 进程所知。而命令 export 可以向后面 的 shell 传递变量的值。当一个 shell 脚本调用并执行时,它不会自动得到原为脚本(调用者) 里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export 命令可以用于传递一 个或多个变量的值到任何后继脚本。 ○ 5 unset清除环境变量,如果未指定值,则该变量值将被设为NULL ○ 6 readonly设置只读变量,只读变量设置后不能用unset清除,除非重启shell ○ 7 declare 、typeset 这两个命令是完全一样的,他们允许指定变量的具体类型,在某些特定的语言 中, 这是一种指定类型的很弱的形式,declare 命令是在 Bash 版本 2 或之后的版本才被加入的,typeset 命令也可以工作在 ksh 脚本中。 [root@linux ~]# declare [-aixr] variable 参数: -a :将后面的 variable 定义成为数组 (array) -i :将后面接的 variable 定义成为整数数字 (integer) -x :用法与 export 一样,就是将后面的 variable 变成环境变量; -r :将一个 variable 的变量设定成为 readonly ,该变量不可被更改内容,也不能 unset 范例一:让变量 sum 进行 100+300+50 的加总结果 [root@linux ~]# sum=100+300+50 [root@linux ~]# echo $sum 100+300+50