Linux下的环境变量原理与shell
2014-05-11 20:12
232 查看
概述:
在linux下工作,经常会出现这样的情况:
1)运行某个命令,出现提示-bash:【commandname】:command
not found
2)执行某个ELF可执行文件:
xyz@hnode02:~/Downloads/software/bean/workdir>./bean.exe
./bean.exe:error while loading shared libraries: libTreePlayer.so: cannot openshared object file: No such file or directory
当出现cannotfound,nosuch file,cannotopen这类字眼的时候,往往是由于相关的环境变量没有有效设置(也有可能是由于没有安装相关的库或者程序)。本文针对这类问题,主要讲解了环境变量的本质原理,设置方法,以及出现相关问题的解决方法。
1.什么是环境变量
1.1知其所以然
环境变量就是系统或软件设置的一些参数,用户环境变量就是用户登录系统后,都有自已专用的运行环境。当你登入shell环境以后,shell会自动读取/etc/profile
~/.profile ~/.bashrc /.bash_profile等文件,这些文件中往往有相关的环境变量的设置和初始化。环境表(指向实际name=value字符串的指针数组)和环境字符串通常存放在进程存储空间的顶部(栈之上),因此子进程会继承父进程的环境变量。相应的问题就是:为什么我在命令行里面设置了相关的环境变量之后,环境变量生效,但是重新启动一个终端,这个环境变量缺失效了呢?linux下提供了三个系统调用,来修改环境变量:
#include<stdlib.h>
intputenv(char *str);
int setenv(const char *name, const char*value, int rewrite);
int unsetenv(const char *name);
1.2常见的环境变量及其作用
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 附属提示符,默认是“>”
LD_LIBRARY_PATH动态链接库的路径
以上这些都是系统环境变量,往往在非用户相关的文件中进行设置,一般都用大写;用户环境变量一般用小写,放在用户相关目录之中。
2.如何设置与查看环境变量
2.1设置一个新的环境变量:
$export HELLO="Hello!"
$echo $HELLO
Hello!
2.2查看环境变量:
显示环境变量HOME
$echo $HOME
/home/redbooks
2.3.使用env命令显示所有的环境变量
$env
HOSTNAME=redbooks.safe.org
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
2.4.使用set命令显示所有本地定义的Shell变量
$set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...
2.5.使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$export
TEST="Test..." #增加一个环境变量TEST
$env|grep
TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$unset
$TEST #删除环境变量TEST
$env|grep
TEST #此命令没有输出,证明环境变量TEST已经存在了
2.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
环境变量的设置位于/etc/profile文件
如果需要增加新的环境变量可以添加下属行
exportpath=$path:/path1:/path2:/pahtN
注意:以上这些命令只有在当前进程与子孙进程中有效,如果想要永久修改,需要修改相关配置文件,然后source这些配置文件,使得它们生效。
3.环境变量相关问题的解决方法
回到概述中提到的两个问题,当出现-bash:【commandname】:command
notfound,这种提示的时候,利用find命令找到相关的commandname可执行文件的位置,然后把路径添加到PATH之中即可。对于第二个问题,处理方法类似,不过需要修改的环境变量变成了LD_LIBRARY_PATH.
4.参考
关于配置文件的信息和如何修改PAHT,可参考博客:linux下的系统和软件配置方法简介
在linux下工作,经常会出现这样的情况:
1)运行某个命令,出现提示-bash:【commandname】:command
not found
2)执行某个ELF可执行文件:
xyz@hnode02:~/Downloads/software/bean/workdir>./bean.exe
./bean.exe:error while loading shared libraries: libTreePlayer.so: cannot openshared object file: No such file or directory
当出现cannotfound,nosuch file,cannotopen这类字眼的时候,往往是由于相关的环境变量没有有效设置(也有可能是由于没有安装相关的库或者程序)。本文针对这类问题,主要讲解了环境变量的本质原理,设置方法,以及出现相关问题的解决方法。
1.什么是环境变量
1.1知其所以然
环境变量就是系统或软件设置的一些参数,用户环境变量就是用户登录系统后,都有自已专用的运行环境。当你登入shell环境以后,shell会自动读取/etc/profile
~/.profile ~/.bashrc /.bash_profile等文件,这些文件中往往有相关的环境变量的设置和初始化。环境表(指向实际name=value字符串的指针数组)和环境字符串通常存放在进程存储空间的顶部(栈之上),因此子进程会继承父进程的环境变量。相应的问题就是:为什么我在命令行里面设置了相关的环境变量之后,环境变量生效,但是重新启动一个终端,这个环境变量缺失效了呢?linux下提供了三个系统调用,来修改环境变量:
#include<stdlib.h>
intputenv(char *str);
int setenv(const char *name, const char*value, int rewrite);
int unsetenv(const char *name);
1.2常见的环境变量及其作用
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 附属提示符,默认是“>”
LD_LIBRARY_PATH动态链接库的路径
以上这些都是系统环境变量,往往在非用户相关的文件中进行设置,一般都用大写;用户环境变量一般用小写,放在用户相关目录之中。
2.如何设置与查看环境变量
2.1设置一个新的环境变量:
$export HELLO="Hello!"
$echo $HELLO
Hello!
2.2查看环境变量:
显示环境变量HOME
$echo $HOME
/home/redbooks
2.3.使用env命令显示所有的环境变量
$env
HOSTNAME=redbooks.safe.org
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
2.4.使用set命令显示所有本地定义的Shell变量
$set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...
2.5.使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$export
TEST="Test..." #增加一个环境变量TEST
$env|grep
TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$unset
$TEST #删除环境变量TEST
$env|grep
TEST #此命令没有输出,证明环境变量TEST已经存在了
2.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
环境变量的设置位于/etc/profile文件
如果需要增加新的环境变量可以添加下属行
exportpath=$path:/path1:/path2:/pahtN
注意:以上这些命令只有在当前进程与子孙进程中有效,如果想要永久修改,需要修改相关配置文件,然后source这些配置文件,使得它们生效。
3.环境变量相关问题的解决方法
回到概述中提到的两个问题,当出现-bash:【commandname】:command
notfound,这种提示的时候,利用find命令找到相关的commandname可执行文件的位置,然后把路径添加到PATH之中即可。对于第二个问题,处理方法类似,不过需要修改的环境变量变成了LD_LIBRARY_PATH.
4.参考
关于配置文件的信息和如何修改PAHT,可参考博客:linux下的系统和软件配置方法简介
相关文章推荐
- 程序员的自我修养——Linux下的环境变量原理与shell
- Linux-shell学习笔记--环境变量
- linux环境几个特殊的shell变量
- linux超级基础系列——shell变量(本地变量和环境变量)
- Understanding Unix/Linux Programming 笔记:chapter 9:可编程的shell、shell变量和环境; chapter 10:I/O重定向和管道
- linux 环境变量,shell变量
- linux之基础shell脚本编程4 字符串操作,变量赋值,配置用户环境
- Linux命令行与shell脚本(3)--环境变量
- LINUX系统学习笔记管道符和作业控制 ,shell变量 , 环境变量配置文件
- Linux默认shell环境变量, PATH变量重要讲解
- linux使用c shell 、b shell 环境变量的问题
- linux 常用 shell 环境变量
- LInux中添加环境变量与shell解析(export PATH)(Linux)
- linux课堂笔记--shell3环境变量配置文件
- linux 学习20170726 查看进程号及环境变量、获取字符串长度及shell版本
- linux中shell脚本设置环境变量
- linux里的shell环境变量
- Linux:shell变量功能和Bash shell的操作环境
- linux总结(2)——环境变量与shell
- linux笔记:shell基础-环境变量配置文件