1、引言

在 linux系统 下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“ command not found ”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量 PATH 的设置问题,而 PATH 的设置也是在 linux 下定制环境变量的一个组成部分。本文基于 RedHat 9.0 ,详细讲解了环境变量定制的问题。

2、变量简介

Linux 是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

3、常见的环境变量

$PATH:决定了shell将到哪些目录中寻找命令或程序

$HOME:当前用户主目录

$MAIL:是指当前用户的邮件存放目录。

$SHELL:是指当前用户用的是哪种Shell。

$HISTSIZE:是指保存历史命令记录的条数

$LOGNAME:是指当前用户的登录名。

$HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

$LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

$PS1:是基本提示符,对于root用户是#,对于普通用户是$,也可以使用一些更复杂的值。

$PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。

# PS1=" Hello,My NewPrompt :) "

$IFS:输入域分隔符。当shell读取输入时,用来分隔单词的一组字符,它们通常是空格、制表符和换行符。

$0:shell脚本的名字。

例如,在我的Linux系统中:

$ echo $0

/bin/bash

$#:传递给脚本的参数个数。

$$:shell脚本的进程号,脚本程序通常会用它生成一个唯一的临时文件,如/tmp/tmfile_$$

例如,在我的Linux系统中:

$ echo $$

31038               #表示当前shell进程号为31038

4、export命令

export命令将作为他参数的变量导入到子shell中,并使之在子shell中有效。export命令把自己的参数创建为一个环境变量,而这个环境变量可以被其他脚本和当前程序调用的程序看见。

4.1 实验 导出变量

(1)我们先列出脚本程序export2

#!/bin/sh

echo "$foo"

echo "$bar"

(2)然后是脚本export1。在这个脚本的结尾,我们调用export2:

#!/bin/sh

foo="The first meta-syntactic variable"

export bar="The second meta-syntactic variable"

export2

运行这个脚本,将得到如下的输出:

$ export1

                                          #这是个空格,是因为变量foo在export2中不可用,所以$foo被复制为空

The second meta-syntactic variable

$

4.2 设置一个新的环境变量WELCOME

$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!

5、定制环境变量

环境变量是和 Shell 紧密相关的,用户登录系统后就启动了一个 Shell 。对于 Linux 来说一般是 bash ,但也可以重新设定或切换到其它的 Shell 。根据发行版本的情况, bash 有两个基本的系统级配置文件: /etc/bashrc 和 /etc/profile 。这些配置文件包含两组不同的变量: shell 变量和环境变量。前者只是在特定的 shell 中固定(如 bash ),后者在不同 shell 中固定。很明显, shell 变量是局部的,而环境变量是全局的。环境变量是通过 Shell 命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于 bash 这个 Shell 程序来说,可以通过变量名来访问相应的环境变量,通过 export 来设置环境变量。下面通过几个实例来说明。

5.1 使用命令echo 显示环境变量

#本例使用echo显示常见的变量HOME

$ echo $HOME

/home/lqm

5.2 设置一个新的环境变量

$ export HELLO=“Hello!”

$ echo $HELLO

Hello!

5.3 使用 env 命令显示所有的环境变量

$ env

SSH_AGENT_PID=1875

HOSTNAME=lqm

SHELL=/bin/bash

TERM=xterm

HISTSIZE=1000

……

5.4  使用set 命令显示所有本地定义的Shell 变量

$ set

BASH=/bin/bash

……

5.5  使用 unset 命令来清除环境变量

$ export TEST=“test”       # 增加一个环境变量 TEST

$ env | grep TEST               # 此命令有输出,证明环境变量 TEST 已经存在了

TEST=test

$ unset $TEST                   #删除环境变量TEST

$ env | grep TEST              # 此命令无输出,证明环境变量 TEST 已经存在了

5.6  使用 readonly 命令设置只读变量

如果使用了 readonly 命令的话,变量就不可以被修改或清除了。示例如下:

$ export TEST="Test"        # 增加一个环境变量 TEST

$ readonly TEST                  #将环境变量TEST设为只读

$ unset TEST                      #会发现此变量不能被删除

-bash: unset: TEST: cannot unset: readonly variable

$ TEST="New" #会发现此变量不能被修改

-bash: TEST: readonly variable

5.7  用C 程序来访问和设置环境变量

对于 C 程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。

getenv() 访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的环境变量不存在,则会返回 NULL 。

setenv() 在程序里面设置某个环境变量的函数。

unsetenv() 清除某个特定的环境变量的函数。

另外,还有一个指针变量 environ ,它指向的是包含所有的环境变量的一个列表。下面的程序可以打印出当前运行环境里面的所有环境变量:

#include <stdio.h>

extern char**environ;

int main ()

{

char**var;

for (var =environ;*var !=NULL;++var)

printf ("%s \n ",*var);

return 0;

}

5.8 通过修改环境变量定义文件来修改环境变量。

需要注意的是,一般情况下,这仅仅对于普通用户适用,避免修改根用户的环境定义文件,因为那样可能会造成潜在的危险。

$vi /etc/bashrc      #修改shell变量

$vi /etc/profile       #修改环境变量定义文件

然后编辑你的 PATH 声明,其格式为:

PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$ source .bash_profile

需要注意的是,最好不要把当前路径 “./” 放到 PATH 里,这样可能会受到意想不到的攻击。完成后,可以通过 $ echo $PATH 查看当前的搜索路径。这样定制后,就可以避免频繁的启动位于 shell 搜索的路径之外的程序了。

linux 环境变量【转】的更多相关文章

  1. 三种配置linux环境变量的方法(以java为例)

    1.先确认是否为openjdk:参考 2. 修改/etc/profile文件  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性 ...

  2. linux环境变量LD_LIBRARY_PATH

    LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...

  3. Linux 环境变量和source命令 (转)

    可能是班门弄斧了,仅share给尚不知道的童鞋. 1.       问题的来源: 为什么我们编译Android代码时,需要输入:  source ./build/envsetup.sh  或者 . . ...

  4. Ubuntu Linux 环境变量

    2011年09月17日 Ubuntu 下设置adb环境变量 分类: 同Windows一样,Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用 ...

  5. 设置Linux环境变量的方法与区别(Ubuntu)

      设置 Linux 环境变量可以通过 export 实现,也可以通过修改几个文件来实现,有必要弄清楚这两种方法以及这几个文件的区别.   通过文件设置 Linux 环境变量 首先是设置全局环境变量, ...

  6. Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  7. 设置Linux环境变量的方法和区别_Ubuntu

    设置 Linux 环境变量可以通过 export 实现,也可以通过修改几个文件来实现,有必要弄清楚这两种方法以及这几个文件的区别. 通过文件设置 Linux 环境变量 首先是设置全局环境变量,对所有用 ...

  8. Linux 环境变量_006

    ***Linux 环境变量指系统运行程序或命令的能快速找到其位置等其它功能,不用输入复杂命令.以$PATH环境变量为例子, $PATH决定了shell指定寻找命令或程序的路径,比较执行ls命令,如果没 ...

  9. Linux学习笔记之Linux环境变量总结

    0x00 概述 Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量. 0x01 Linux环境变量分类 按照生命周期来分,Lin ...

  10. 转:Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH

    转:  https://www.linuxidc.com/Linux/2017-03/142338.htm 文章写比较全  转载记录 Linux环境变量设置方法总结 PATH.LD_LIBRARY_P ...

随机推荐

  1. 使用openssl工具生成证书

    第一步. 生成rsa私钥文件 :\> openssl genrsa -out bexio.pem 1024 : 若要加密生成的rsa私钥文件(des3加密) :\> openssl gen ...

  2. 使用AutoMapper实现Dto和Model的自由转换

    AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...

  3. 关于OpenGL+GLSL深度贴图采样

    作者:Nin+.Lee 邮箱:lilei9110@gmail.com * 本文属原创,转载请注明出处. 在GLSL中,存在着sampler2D和sampler2DShadow两种2D贴图采样器.在对一 ...

  4. 一款基于jQuery底部带缩略图的焦点图

    之前我们已经分享过不少实用的jQuery焦点图插件了,今天我们要介绍的这款jQuery焦点图插件是带有缩略图的,我们只需点击缩略图即可切换至相应的图片,图片切换的时候出现淡入淡出的动画效果. 在线预览 ...

  5. C Primer

    如果主函数使用void main(),由于它不是当前标准强制的一个选项,因此在有些系统上不能工作,为了使代码变得简单,main函数中可以没有返回语句. 先声明变量是为了防止拼写错误导致定义一个新的变量

  6. linux设备驱动之select

    转载:http://blog.csdn.net/mo_hui123456/article/details/7961619 select系统调用用于多路监控,为什么称为多路呢,它可监控多个文件,例如我监 ...

  7. 关于解决android4.0系统中菜单无法添加Icon的问题

    在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 ...

  8. LeetCode38 Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  9. Entity Framework之问题收集

    本节讨论内容主要针对收集了上篇文章大家碰到问题的讨论解决,会持续收集扩充. DbContext加载原值,当前值,数据库值,属性操作,对象复制,对象值复制(VO,DTO->POCO),复杂对象取值 ...

  10. Android Studio开发RecyclerView遇到的各种问题以及解决

    是大神总结的,我直接提供链接了,以便以后学习 大神链接: 问题一和解决:http://www.cnblogs.com/yunfang/p/5830953.html 问题二和解决:http://www. ...