• Linux 命令大全(十三)——环境管理


    十三、环境管理
    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.1Linux环境变量的种类
    按环境变量的生存周期来划分,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 <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
    [root@linux ~]# declare -i sum=100+300+50
    [root@linux ~]# echo $sum
    450
    范例二:将 sum 变成环境变量
    [root@linux ~]# declare -x sum
    范例三:让 sum 变成只读属性,不可更动!
    [root@linux ~]# declare -r sum
    [root@linux ~]# sum=tesgting-bash: sum: readonly variable
  • 相关阅读:
    某大神C#框架后台发送信息的查找及破解
    多平台下Modbus通信协议库的设计(一)
    wpf 窗口程序下将datagrid导出为excel
    luogu P2598 [ZJOI2009]狼和羊的故事 |网络流最小割
    luogu P3171 [CQOI2015]网络吞吐量 |网络流最大流
    luogu P2469 [SDOI2010]星际竞速 |网络流费用流
    luogu P2172 [国家集训队]部落战争 |网络流最少路径覆盖
    luogu P2045 方格取数加强版 |最大费用最大流
    luogu P6327 区间加区间sin和 |线段树
    luogu P2402 奶牛隐藏 |网络流最大流+二分
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/13594901.html
Copyright © 2020-2023  润新知