Shell 的环境设定
时间:2008-05-04 来源:sdccf
Linux用户执行指令的指令列环境就是利用Shell做出来的。控制电脑中枢的程式称为核心(Kernel),而Shell就是发挥使用者,指令群和核心之间界面的功能。 Shell有许多种类,在Linux主要是利用bash、tcsh、zsh等三种。我们虽只探讨bash,但是其他的shell也可同理加以类推,只有tcsh的环境变数设定法或函数等的文法较为不同。 ◆ bash的设置文件 在bash设置文件中有/etc/profile 、~/.bash_profile 、~/.bashrc 、~/.inputrc 、~/.bash_logout,其各自被读取的时间也不同。 ◆ ~/.bashrc和~/.bash_profile 在用户登入时,shell即被啟动。在bash的情形下,etc/profile会先被读取,接著再读取家目錄的 .bash_profile※。 另外,若非以登入shell来啟动的情形时,例如用指令列来启动bash,或是用su来变成別的使用者的情形下,家目錄的 .bashrc将被读取※。 然而,通常是 ~/.bashrc会在~/.bash_profile之前被读取,而且/etc/bashrc几乎会设定比~/.bashrc更早被读取。因此,可将“~bash的设定档”整理如下。 ※【~/.bash_profile】无 .bash_profile的情形下为 .bash_login的话,,若是也无.bash—I则读取,profile。 ※【.bashrc】一般以能读/etc/bashrc的方式来设定。 另外,当啟动在shellscript用的情形时,是读取以环境变数BASH_ENV所设定的文件。而BASH_ENV大多是设定~/.bashrc。 环境变数或別名等,成为使用者环境的基本设定是以 /etc/bashrc或 ~/.bashrc来执行。而/etc/profile或~/.bash_profile中,只执行登入时的处理,例如,执行mail的检查或资讯的显示,或记錄“登入用户”之环境变数设定。 ◆ source指令 若於bash的设置文件內来读取別的设定文件的情形时,是使用source指令,source指令有时会写成「.」举例来說,在~/.bash_profile之中,来读取~/.bashrc的情形时,则是写成「.~/.bashrc」。 ◆ ~/.inputrc 利用GNU readline用的设定档,设定编修指令列时的键盘操作。有的Linux会使用/etc/inputrc。 ◆ ~/.bash_logout 写有logout时所执行的內容文件。例如,刪除历史记录或是作业目录。 ◆ /etc/skel目录 配置於家目录的设定档不单是只有shell的设定档。还有编辑器、X相关的设定文件等各种设定文件。 若想要加入新用户时,则复制於家目錄底下的初始档都储存於/etc/skel目录里。若想改变用户的初始值时,只要改变/etc/skel里的文件即可。但是对於已存在的用户则必须个別的去改变设定。 Colunm 登入Shell shell只有在从登入的命令提示来执行登入启动才会变成“登入shell”。若以登入shell来启动的话,~/.bash_profile等文件将被执行,而用户名称、家目录、密码等也会变成目前用户的东西。 但是例如,可用「su」指令变成super user,或用「su – nisimura」的一样加上「-」来执行。 另外,有时也会将终端程式以登入shell方式来启动。例如,若是kterm的话,则为「kterm -ls」,且以登入shell来启动shell。 ◆shell的动作设定 shell动作是以Shell选项和shell变数来设定。 shen变数(请参考往后的介绍),且和后述的环境变数不同,并无法连结由shell所啟动的程序(副程序)。想要连结副程序之变数,也就是想要参考从shell之外的指令的变数,是以后述的环境变数来设定。 ◆ 分开使用设定档 shell选项主要设定以指令列来操作的內容。因此,一般是以~/.bash_profile来设定。另外,shell变数或环境变数一般也是以~/.bashrc来设定。 因为不管那一种情形都是读取shell来执行,所以直接修改和利用指令列输入相同。 另外,若要修改~/.bash_profile或~/.bashrc的话,则重新登入或以source指令来重新读取即可。请参阅以下范例: ◆ shell选项(set选项) shell选项可切换档名的万用字符展开或记录档(history)等的动作。除了可指定bash启动时的选项外,也可用set指令来设定。 ◆ shell选项(shopt选项) 从bash 2.0所追加的内容中,是以shopt指令来设定。 ◆ shell变数 如同指令输入列或纪錄档的大小一樣,于on/off中无法设定的內容皆以shell变数来设定。 shell变数是用「变数名=值」来设定※。欲显示值的情況时,就使用echo指令来做为「echo $变数名」。欲刪除变数的情況时,是执行「unset变数名」。此外,不刪除变数且想将变数值归零时设为「变数名=」。 ※【shell变数的值】tcsh时,变为「set变数名=值」。 ◆ 环境变数 虽然shell变数是只看到shell的变数,但是环境变数是环境整体,也就是从shell所啟动的指令亦可参照的变数。例如,对环境变数LANG指定zh_CN(中文)的情況,指令输出的讯息是为中文。此外,如MANPATH一樣,亦具有特定指令专用的环境变数。 定义完成的shell变数可利用「export变数名」在环境变数。而且,亦可以「export变数名=值」来定义。值的显示是为shell变数相同「echo$变数名」或,可以printenv指令来确认。 ※【环境变数的设定】tcsh的情況时是「setenv变数名值」此外,tcsh时shell变数和环境变数是完全做为其他东西来加以处理(各自的用途和bash相同) 。 ◆ alias 在经常使用的指令中,会事先标上alias(別名)来提高操作性。譬如說,可使用命名为ll来执行「1s -la」的使用方法。若想要处理参数或想要透过复数指令来处理的情形时,则只要使用函数就行了。 ◆ 设定档案 使用者专用的alias一般是事先定义为 ~/.bashrc。 另外,若要修改~/.bashrc的话,必须重新登入或是执行「source bashrc」来设定。 ◆ alias的定义和解除 用「alias名称=內容」来定义,而用「unalias名称」来解除。仅用alias来浏览显示已定义的別名. ◆ 暂时性解除alias 若相暂时件夹解除alias的话,可存开头加上「╲」註记。 ◆ 确认所执行的內容 若事先设定shell的xtrace选项为有效(-x)时,就能执行设定的指令。 ◆函数 所谓函数※(function)乃针对使用多个指令或控制语法等的“处理集”来命名。 函数是用「function函数名(){处理內容;}」来定义的※而透过函数的变数则称为参数,可依序存取为$1、$2…。 例如下列,是显示子目錄一览表的函数。用「subdir/etc」只显示/etc底下的子目錄。另外,若想用多个栏来显示时,则要使用column指令,或设定为「subdir/dir|column」。 【函数】於包含bash的一般程式化中,将处理一些再回到数值称为函数。若为bash函数时,用return就可回到任意值。 【函数的定义】可省略任一个的fuction和()。 ◆ 设定档案 个別使用者专用的函数※,一般是事先用~/.bashrc来定义的。 另外,若要修正~/.bashrc的话,则重新登入或是执行「source ~/.bashrc」。就可设定。 ◆ 显示已定义的函数 已定义的函数是可用set指令或是declare指令来确认。 ※ -f 是显示函数,-fx是显示被export的函数 【使用者用的函数】在整体系统上所使用的函数是用/etc/init.d/functions等来定义的。 在shell环境底下,要使用中文是需要设定地区。 地区的设定是使用环境变数LC_ALL以及LANG来指定语言名、区域名,甚至codeset(设定码)名。为了显示中文,虽然使用的codeset中具有中文Big5,HZ,GB2312等,但是於Linux环境中,一般是使用UFT.8、GB2312或是中文Big5。 使用中文情況的地区是「zh_CN.GB2312」,UTF一8时则使用「zh_CN.UTF.8」。 ◆ 暂时切換地区 持续於变数定义来执行指令,且可执行指令用的环境设定。例如,若执行为「LANG=C date」时,则能夠在“LANG=C”(Common)的环境下,来执行date指令。 |
出处:南方Linux |
相关阅读 更多 +