Unix Shell 入门

#################################

从初始化文件谈LINUX的SHELL

#################################
引自 http://www.linuxforum.net/docnew/showthreaded.php?Cat=&Board=sys&Number=6&page=0&view=collapsed&sb=9&o=all&fpart=

作者: "t1601045" <t1601045@iwate-u.ac.jp> 于 Jan 19, 2002


一,前言:
本文主要解说BASH的ShellScript,用户LOGIN,端末软件启动等时的初期化文件和各个文件
读入的顺序,并且将对初期化文件的内容进行详细的解说。

二,概述:
Linux的标准Shell是Bash,Bash的作用并不仅仅是对ShellScript的解释和实行,并且在用户
登录控制,Term等端末软件的命令行接受的命令进行处理等方面起着重要的作用。这样的Shell由于是
接受用户的命令(键盘或其它)然后处理之后将结果显示在屏幕上,所以叫对话式(Interactive)Shell。
像这样的对话式Shell可以对别名的定义,环境变数的设定等进行处理,还可以将端末的一些设定根据自
己的爱好来改变,比如LS的颜色化表示,将自己的根目录变成%,#,在什么样的端末上都可以用BackSpace
键进行消除等。。。。。
像这样的处理如果记述在初期化文件之中,在Shell启动时就可以自动执行,这些初期化文件可以放在
自己的根目录下根据自己的喜好定制,当然,一些共通的设定可以放在全用户共痛的初期化文件中。
如果你想将你的Linux设定成适合自己使用的话(这可是Linux的长处),你一定要对Linux的各种初期
化文件的处理顺序,各个文件的不同作用等有一定的了解,本文将对此进行详细的解说。

三,SHELL利用的各种初期化文件
Shell启动时处理的初期化文件大致可分为两类,用户LOGIN时启动的LoginShell和别的文件启动时被

唤醒的二级SHELL。
初期化文件的内容全部是用ShellScript写成的,在Shell启动时自动(或者由其它文件唤醒)读入,由
Shell自身解释并实行,所以初期化文件的第一行必须是[#!/bin/sh]或[#!/bin/bash],并且不用加实行属性。
本节将从以下几个方面进行详细解说:

.LoginShell利用时的初期化文件
.二级Shell利用的初期化文件
.两种文件的合理的分别利用


3.1 LoginShell利用时的初期化文件
Login时,将用户名和密码输入之后,在[/etc/passwd]之中记述的Shell会被启动,LINUX的标准SHELL是
Bash,如果想确认自己使用的是何种SHELL的话,在命令行输入

$ grep "^'whoami':" /etc/passwd

之后,结果是以分割开来的,第一段是用户名,最后一段就是自己的LoginShell啦。
现在说明一下上面的命令,'whoami' 是对whoami实行之后的结果置换,也就是自己的用户名,[^]是正规表现
的用法,表示以什么什么开始的意思。比如自己的用户名是[john],这条命令就是从文件[/etc/passwd]之中
检索以[john:]开始的行并表示。
在作为LoginShell的Bash启动之后,两个文件会被连续读入,由LoginShell解释实行。开始是全用户共通的
初期化文件[/etc/profile],接着是各用户根目录下的[.bash_profile]
Linux安装之后,多数情况下会在各用户根目录下设置.bash_profile文件,自己的根目录下有没有此文件,用
[ls -a] 确认,如果没有的话,Bash将如何处理请参照本节的附录。
/etc/profile,.bash_profile之中典型的处理内容是:PATH,USER等重要的环境变数的设定,程序异常终了
时croe文件的大小的限制,新建文件的读写属性等。
具体的/etc/profile,.bash_profile文件的内容在后面将详细介绍。

3.2 二级Shell利用的初期化文件
像X Window System的 kterm等软件启动时启动的Shell,由于也可以接受用户的命令,所以也叫对话式Shell
当二级对话式Shell启动时,会自动读入用户根目录下的.bashrc,由调用的Shell解释并执行。一般地说,全用户共
通的设定记述在/etc/bashrc中,但/etc/bashrc不能被自动读入,必须由.bashrc指示才能被读入。具体的可以用
Bash的source命令或[.]实现,如在.bashrc中做如下记述:
1: if [ -f /etc/bashrc ]; then
2: . /etc/bashrc
3: fi
注:"-f" 是文件是否存在的判断条件。
/etc/bashrc,.bashrc之中典型的处理内容是:一般环境变数的设定,组合变数[PSI]的设定,别名的定义,
Shell涵数的定义,端末设定的变更等。

3.3 两种初期化文件的合理的分别利用
在各用户的根目录下有两个初期化文件:.bash_profile和.bashrc,如果相同的内容在两个文件中都写的话,
就会造成不必要的重复和修改上的麻烦,如何才能合理的分别使用呢,基本原则是:
*在.bashrc中不会发生冲突的尽量在.bashrc中记述,从.bash_profile中唤起.bashrc。
*Login时执行一次就行的命令和二级对话式Shell启动时反复执行会发生坏影响的命令在 .bash_profile
中记述,
在.bash_profile中唤起.bashrc。的方法和从.bashrc读入/etc/bashrc 的方法一样,在.bash_profile中
做如下记述:
1: if [ -f ~/.bashrc ]; then
2: . ~/bashrc
3: fi

附录:
.bash_login 和.profile
如果用户根目录下没有.bash_profile文件时,Bash会在根目录下查找 .bash_login,如果 .bash_login
不存在的话,Bash会在根目录下继续查找.profile文件。
其实,这些文件都是从 C shell(.login), Bourne shell (.profile)来的,都是只有LoginShell利用的
初期化文件。不同的是,.profile是Bourne shell 和Bash 都可以利用的初期化文件。
从各初期化文件分开使用的方面来看,设置一个Bash 专用的.bash_profile比较合适。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=409260


#####################################

Bash Shell启动时干了些什么?

#####################################

bash is something of a cross between the Bourne and C shells. A login bash will read .bash_profile, .bash_login, or .profile. A bash subshell - but not a login shell - will read a file named .bashrc in your home directory. The shell reads .bash_logout when you end a login shell.

这些文件一般都在用户目录下,用命令 ls -a 就可以看到他们。

###############################


Bash的环境设定

###############################

和Bash的环境设定有关的档案有
/etc/profile (主要)
$HOME/.bash_profile (主要)
$HOME/.bash_login
$HOME/.profile
$HOME/.bash_logout (主要)
$HOME/.bashrc (主要)
/etc/bashrc

说明如下:
* 登入(login)时
# 先执行 /etc/profile
# 接着bash会检查使用者的自家目录中,是否有 .bash_profile 或者 .bash_login
或者 .profile,若有,则会执行其中一个,执行顺序为:
# .bash_profile 最优先
# .bash_login其次
# .profile 最后
这三个档案只有在登入时,才会被bash读取

* 登出(exit/logout)时
bash会检查使用者自家目录中是否有 .bash_logout,若有,则bash会执行其中的指令

* 登入后启动一个新的 shell :
此时我们称之为一个 subshell, 也就是说在命令列中键入 bash, 除了原先登入时的bash
之外, 又另外启动了一个新的 bash shell.
bash 会检查使用者的自家目录中是否有 .bashrc,若有则予以执行

* 实验:
在各档中加入 echo 指令, 以观察其执行顺序.

各档案用途说明

* /etc/profile 由 root 所控制, 用来设定适合全体使用者的shell环境
* 若使用者自己觉得 /etc/profile 的设定, 并不合意, 可以修改自家目录中的 .bash_profile
* 既然有了 .bash_profile, 为何要有 .bash_login 及 .profile ?这是因为有些人可能是从
Bourne shell 移转过来的, 那么, 只要将 Bourne shell 主要的起动档 .profile 移到自
家目录中, 放弃使用 .bash_profile 及 .bash_login 即可继续沿用以前的设定环境
* .bash_login 存在理由或许和 c shell 有关, 但因为 bash 和 c shell 二者语法并不完全
相容, 因此, 并不建议将 c shell 的启动档直接移过来使用.
* .bashrc 则是用来设定 subshell 的环境的, 之所以要有这个 .bashrc 是为免 subshell产
生时, 又重覆将 /etc/profile 执行一次. 我们发现 .bashrc 中已预先会去执行 /etc/bashrc
的指令, 这表示, 或许 root 会将产生 subshell 时的环境设好了,使用者只要沿用 /etc/bashrc
的内容, 应该不会有任何问题.
* .bash_logout 是使用者登出主机之前, 会去执行的设定档, 如果使用者希望在他登出系统之
后, 能帮他自动处理一些琐事, 比如: 清除暂存档, 清除萤幕等, 可以在这个档案中加以设定.

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/115961/viewspace-1002148/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/115961/viewspace-1002148/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值