[转帖]Linux环境变量和shell变量辨析_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3612 | 回复: 0   主题: [转帖]Linux环境变量和shell变量辨析        下一篇 
luxiaofan
注册用户
等级:上尉
经验:705
发帖:67
精华:0
注册:2012-10-8
状态:离线
发送短消息息给luxiaofan 加好友    发送短消息息给luxiaofan 发消息
发表于: IP:您无权察看 2012-10-8 16:31:58 | [全部帖] [楼主帖] 楼主

一、什么是变量
   在shell中有一个重要的概念,就是变量,顾名思义,变量就是变动的值,就是以特定的字符串来表示一个不定的内容。
   比如说我们用PWD命令查看当前目录,我们可能一致在切换文件夹,但是PWD却能正确显示我们所在的目录。
   再比如我们以不同身份登录系统的时候,系统怎么知道我是哪个用户,有什么权限,这都是和一个叫UID的变量息息相关的。

二、变量分类
   变量分为环境变量和shell变量
   环境变量相当于全局变量,适用于当前SHELL(父进程)和由父进程调用的子进程,如打开编辑器vi、脚本、应用或是再打开一个子shell。
   shell变量就是当前shell使用的变量了,它只是“本地“有效,相当于本地变量,不适用于其他子进程,只在当前shell生命周期内有效

三、变量相关的命令
   既然变量这么重要,那我们怎么去增、删、改、查呢?
   查看:
       env 查看环境变量
       set 查看shell变量和环境变量
       echo $变量名 查看某个特定的变量,如echo $LANG就可以查看当前系统的语系编码
       export 查看已经转换成环境变量的SHELL变量
   增加:
       1、变量名=不定值,如LANG=zh_CN.utf8
       2、export 变量名=“不定值”,如export LANG="zh_CN.utf8",这样就直接变成环境变量了
   删除:unset 变量名,如unset LANG,LANG就失去了变量的身份,echo LANG就没有内容了
   转换:export 变量名,将shell变量转变成环境变量
   只读:readonly 变量名,如readonly LANG,那么后面再修改LANG的值或是删除就不被允许了,那只好注销了。
   这些是一些比较重要的指令,其他指令请参考google和man

四、login shell 和 no-login shell
      为什么提这两个?他们又是什么?
      这对第五段的永久变量和临时变量的设置很有帮助。
      login shell就是使用之前我们还需要输入帐号密码,比如我们使用tty1~tty6登入时。
      no-login shell当然就是不用登入了,比如我们用图形化进入系统后直接点开终端程序或者在shell里直接输入bash命令。
      login shell使用时要加载的大致步骤如下:
    第一步:载入全局配置文件
     /etc/profile 对所有用户有效,修改后使用source /etc/profile使其立即生效
     /etc/inputrc 自定义案件输入功能,由profile调入
     /etc/profile.d/*sh 各种其他设置:语言、VIM、颜色,由profile调入
     /etc/sysconfig/i18n,由上一个文件夹中的/etc/profile.d/lang.sh调入
   第二步:载入个人配置文件
     ~/.bash_profile 只对login shell有效,对当前用户有效,也必须用souce导入
     调用~/.bashrc,其作用是个人指令别名和调用/etc/bashrc
     而/etc/bashrc的作用有:根据UID得到umask和PS1的值,然后去调用/etc/profile.d/*sh中其他各项设置

 ~/.bash_login
~/.profile


     这三者是以以上顺序执行,若成功则不往下走
   no-longin shell只会读取~/.bashrc.
    如果不小心删除了这个文件,进入BASH后的提示值就变成bash-4.1$,4.1应该是bash版本号。
   只需要把/etc/skel/.bashrc拷贝一份过来,然后使用source命令或重启SHELL即可生效
   当然上面这些是登录SHELL时比较重要的配置文件,还有其他配置文件和其有关系,例如:
   ~/.bash_history 历史指令
   ~/.bash_logout  退出时要执行的任务

五、永久变量和临时变量
   由上面的内容可知,不管是自定义的变量还是通过export导为环境变量的自定义变量都只是在shell生命周期内有效,这样的变量就是临时变量,如果我想设置一个变量使其永久生效怎么办呢?
   根据第四段的分析可以修改两个配置文件:/etc/profile和~/.bashrc,前者对所有用户有效,后者只对当前用户有效。添加的内容详见第三段。

注:以上内容是基于CentOS6.3,其他版本目录可能和这里提到的有些出入。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论