Chinaunix首页 | 论坛 | 博客
  • 博客访问: 135954
  • 博文数量: 28
  • 博客积分: 527
  • 博客等级: 中士
  • 技术积分: 367
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-09 17:05
个人简介

运维开发工程师。致力于网络,WEB应用服务,Linux系统运维。方向:操作系统,监控,自动化

文章分类

全部博文(28)

文章存档

2013年(12)

2012年(16)

分类: Python/Ruby

2012-12-08 19:41:26

Intro
shell为用户提供了统一、方便的操纵kernel的交互式接口。shell为每个用户、每次登陆,都需要做一些变量的初始化和自定义的设定。这些变量定义了“环境”(或"上下文")。如果我们希望定制自己的环境,必须好好研究下shell环境的基本组成。
------------------------------------------------------------------------------
PATH
PATH无疑是出镜率最高的变量了。PATH,即系统路径,是一个以冒号分隔的目录列表。
当shell接收到command命令时,并且当command不是关键字、函数、内建命令时,并且command命令不含"/"字符时(含/表示指定目录,跳过path寻找阶段),shell会在当前用户的PATH变量内所列出的目录下,由左至右查找command可执行文件。
因此,这就能解释:
  1. 为什么当前目录没有who文件,你却可以随时随地调用who命令:who在path的一个目录下;
  2. 为什么当前目录下有test.sh,但直接键入test.sh系统报command not found:test.sh不在path的任何一个目录下,且当前目录没有在$PATH中;
  3. 为什么我找不到某些命令,但root却可以:$PATH设置不一样,某些系统root比普通用户的$PATH多/sbin/;
  1. $ echo $PATH #work的path
  2. /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/share/baidu/bin:/root/bin
  3. --------------------------------
  4. $ PATH=$PATH:/home/work/opbin/bin #临时增加/home/work/opbin/bin,注意退出终端后path变更失效,若永久加,下文有说明
  5. $ export PATH #可忽略,PATH本身就是环境变量
  6. --------------------------------
  7. $ PATH=$PATH: #一个空项目表示当前目录
------------------------------------------------------------------------------
LANG环境变量
LANG设定了语系和编码。
  1. $ echo $LANG #查看所在的语系
  2. en_US
  3. -------------------------
  4. $ locale -a #locale -a命令列出了所支持的所有语系
  5. -------------------------
  6. $ locale #locale命令列出了当前所在的所有语系变量
  7. LANG=en_US
  8. LC_CTYPE="en_US"
  9. LC_NUMERIC="en_US"
  10. LC_TIME="en_US"
  11. LC_COLLATE="en_US"
  12. LC_MONETARY="en_US"
  13. LC_MESSAGES="en_US"
  14. LC_PAPER="en_US"
  15. LC_NAME="en_US"
  16. LC_ADDRESS="en_US"
  17. LC_TELEPHONE="en_US"
  18. LC_MEASUREMENT="en_US"
  19. LC_IDENTIFICATION="en_US"
  20. LC_ALL=
其中,LC_ALL是覆盖其他LC_XXX变量的值,LANG是未设置任何LC_XXX变量值所使用的默认值。
一般来说,想改变环境的语系用LANG会比较理想。
  1. $ LANG=C #改变LANG到传统C环境L
  2. $ locale
  3. LANG=C
  4. LC_CTYPE="C"
  5. LC_NUMERIC="C"
  6. LC_TIME="C"
  7. ...
------------------------------------------------------------------------------
export命令
使一个普通变量变为环境变量,这样fork出的子shell能够取用。
examples:
    $var="new"
    $bash            #进入子shell
    $echo $var       #无回显
    $exit            #回到父shell
    $export var      #变成环境变量
    $bash            #再次fork
    $echo $var       #回显var变量
打印当前环境变量关联数组。
    $export -p
------------------------------------------------------------------------------
readonly命令
examples:
    $var=a            #赋值
    $readonly a        #让a变成只读变量
    $a=b                #报错
打印当前只读变量关联数组。
    $readonly -p

    

技巧
阅读(1145) | 评论(0) | 转发(0) |
0

上一篇:005-IO重定向和管道

下一篇:007-字符替换tr

给主人留下些什么吧!~~