注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

简单看 bash shell 环境变量(PATH)的配置(设置)  

2013-10-10 16:38:42|  分类: Web技术-Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
命令运行的顺序
我们知道系统里面其实有不少的 ls 命令, 或者是包括内建的 echo 命令,那么来想一想,如果一个命令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运行?基本上,命令运行的顺序是这样:
1)以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
2)由 alias 找到该命令来运行;
3)由 bash 内建的 (builtin) 命令来运行;
4)透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

我们可以透过type -a xx 来查询某命令搜寻顺序。
一种通常情况,当你安装了某个应用程序后是不能直接使用其命令的,命令的执行只能是以相对/绝对路径来运行。就也就是说:你能不能在任何目录下运行某个命令,与 PATH 这个变量有很大的关系。
例如你下达 ls 这个命令时,系统就是透过 PATH 这个变量里面的内容所记录的路径顺序来搜寻命令的呢!如果在搜寻完 PATH 变量内的路径还找不到 ls 这个命令时, 就会在屏幕上显示『 command not found 』的错误信息了。

那么如何来设置环境变量呢?(下面以redis为例)
方式一 直接在终端上设置
我们先echo 一下,看一下PATH值:

echo $PATH

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
 
打印出来的结果中没有命令redis的路径,我们现在加入:

PATH=$PATH:/root/redis/src #(注意=号左右没有空格)

现在打印

echo $PATH

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
 
可以看到路径已经加入了。
不过这种方式在你退出终端或者注销后,PATH的值是不会保留的。因此想要保留你的配置, 就得要将这些配置写入配置文件才行。

方式二
不过,要注意登录(login)和不登录(non-login) shell 读取的配置文件是不一样的。
1 login shell 会读取的文件:
1) /etc/profile:这是系统整体的配置(最好是不要去修改它);
2) bash 在读完了整体环境配置的 /etc/profile后,就会读取使用者的个人配置文件:
   ~/.bash_profile
   ~/.bash_login
   ~/.profile
   需要注意的是:bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会被读取。 如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取 ~/.profile。

2 non-login shell 会读取的文件:
~/.bashrc

使配置文件立即生效
由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的配置文件,所以, 如果你将自己的偏好配置写入上述的文件后,通常都是得注销再登陆后,该配置才会生效。那么,能不能直接读取配置文件而不注销登陆呢? 可以的!那就得要利用 source 这个命令了!
[root@www ~]# source 配置文件档名

范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
[root@www ~]# source ~/.bashrc  <==底下这两个命令是一样的!
[root@www ~]#  .  ~/.bashrc
利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中.

方式二举例子:
我们退出后,要登录查看一下PATH

echo $PATH

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
 
果然,刚才的设置没有保留下来。
现在,我们去编辑.bash_profile,我们先查看一下:

ls -al #(-a表示显示所有文件)

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
找到了这个文件,我们现在编辑

vim .bash_profile

我们看到这样的内容:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then   <==底下这三行在判断并读取 ~/.bashrc
        . ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin        <==底下这几行在处理个人化配置
export PATH
unset USERNAME
现在我们加入我们的变量路径(vim 中 :set nu 显示行号):

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
 
现在我们 echo $PATH
简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
可以看到 路径并没有加载进来,现在我们使用 source

source .bash_profile

再echo,可以看到路径已经加载是进来了。
简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp

现在我们注销退出系统,再登录再echo $PATH

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp

可以看到PATH修改的值仍然存在。
现在我们就可以直接使用redis-server/cli 命令了,或者不必使用绝对与相对路径去运行了。

简单看 bash shell 环境变量(PATH)的配置(设置) - fc_lamp - @fc_lamp
 

附变量规则:
变量与变量内容以一个等号『=』来连结,如下所示: 
『myname=VBird』

等号两边不能直接接空格符,如下所示为错误: 
『myname = VBird』或『myname=VBird Tsai』

变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 
『2myname=VBird』

变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』

可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;

在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 

例如想要取得核心版本的配置:
『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
『PATH="$PATH":/home/bin』

若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
『export PATH』

通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) 

取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:
『unset myname』

注:参考自 http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php#settings_bashrc



  评论这张
 
阅读(433)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017