14 FreeBSD连载:shell设置( 二 )


注意,不能轻易更改root用户的shell,因为这可能会造成root无法正常登录,而使得无法正常执行系统维护 。即使是将root的shell更改为其他更新、更强功能的标准shell,例如bash或tcsh,也是不应该 。虽然这些shell也是非常成熟的shell程序,仍然不应该使用它们作为root的shell 。主要原因是这些shell一般没有被安装到根分区中,那么当系统进入单用户状态时就会发生问题 。另外这些shell可能会由于进行版本升级等原因,而偶然形成故障,造成root无法正确登录 。此外,由于这些非标准shell不一定来自于系统的安装盘,因此也存在对shell来源的安全信任问题,必须保证这些shell不是经攻击者更改过的版本 。如果要使用它们shell提供的方便特性,可以在系统登录之后再使用全路径执行它们 。
配置用户shell
事实上sh与csh,并不是普通用户的最佳选择,因为这两个shell在易用性方面做的不够好,例如命令行编辑功能不强、不能利用热键重复执行命令等 。较新的shell,如bash和tcsh都具有这些方便用户使用的功能,但必须安装了这些shell程序之后,才能更改普通用户的shell设置以使用这些shell程序 。更改用户的shell可以使用pw、vipw或chsh 。
这两个shell分别遵照sh和csh的风格,因此喜好csh风格的可以选择tcsh,而喜欢sh风格的选择bash 。除了这两种shell之外,还有ksh、zsh等shell可供选择 。如果对两种shell没有偏好,可以选择bash,它是一个GNU软件,比标准sh功能强大的多 。
使用了这两些增强型shell之后,用户就可以使用shell提供的命令行编辑功能 。按照习惯的不同,可以选择vi风格的编辑方式或eMacs风格的方式,缺省为emacs方式,这种方式使用方向键来回溯执行过的命令,并进行修改,而vi风格使用字母命令作编辑键,例如使用h、j、k、l四个键来移动光标,vi风格的好处是不使用基本键盘之外的控制键,因而可以适用于任何终端设备,并且进行编辑时手不需离开基本键盘,熟练操作之后最为快捷 。emacs风格比起vi风格更适合从个人计算机转向Unix的使用者的习惯 。bash, ksh ,zsh下使用下面的命令在emacs风格和vi风格切换:
bash$ set -o emacs
bash$ set -o vi
tcsh中使用不同的命令:
% bind emacs
% bind vi
还可以为常用的命令设置别名,简化用户输入,例如:
bash$ alias ec=”echo This is a alias”
bash$ ec
This is a alias
shell用于方便用户操作的另一项能力是自动补全命令或文件名的功能,因为FreeBSD下的文件名可能很长,将它们全部输入比较麻烦 。事实上可以输入部分名字,然后按Tab键(在vi风格下是连续两次按Esc键),shell将自动补全文件名的剩余部分 。如果已经输入的这部分名字不能确定具体的命令或文件,那么shell只将能确定的部分补上,然后响铃通知使用者继续输入以明确具体的文件 。
事实上即使在基本的sh或csh下,也可以使用 “*” 等特殊字符,用模式匹配的方式来简化输入 。
bash$ cd /usr/loca*
bash$ pwd
【14 FreeBSD连载:shell设置】/usr/local
Unix中的多数程序都具备模式匹配的处理能力,而shell的模式匹配功能最为常用 。shell可以使用这些特殊模式来配置多个文件,达到简化操作的目的 。如果要熟练掌握Unix,必须掌握模式匹配 。
当试图在bash下输入汉字的时候,除了必须设置终端属性能接受8位字符之外(执行stty pass8命令),还需要设置bash的输入输出转换,可以在登录脚本.profile文件中包括以下设置:
bind "set convert-meta off"
bind "set meta-flag on"
bind "set output-meta on"
未完,待续 。。。

推荐阅读