Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103682313
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-04 15:40:32

 

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
阅读(536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~