Chinaunix首页 | 论坛 | 博客

分类:

2009-01-16 14:32:12

环境设定档: bashrc, ~/.bashrc, ~/.profile, profile...,/etc/inputrc, source

关于取得 bash 的环境变数等资料,其实可以有系统规划与各人喜好, 一般来说,建议使用者直接修改个人设定值即可,不需要更动到系统啦~ 底下我们分别来谈一谈几个有趣的设定档喔!要注意的是,在指令列输入的变数也好、命令别名也罢, 都是针对该次登入的设定而已,所以只要您一登出,那么上次的设定值就会不见去! 因此,我们需要有几个档案来帮助我们,每次登入的时候,就已经帮我们搞定了环境的设定啰!

# 系统设定值
所谓的系统设定值,也就是说每个使用者进入到 bash shell 之后,会先读取的设定档案! 预设的设定档案有下列几个:

# /etc/sysconfig/i18n
记得我们在几个重要变数内谈到的语系资料吗?! 那个语系是由 i18n 所维护的,而 FC4 预设的系统语系设定档就在 /etc/sysconfig/i18n 当中。 这个档案有点像这样:

[root@linux ~]# cat /etc/sysconfig/i18n
LANG="zh_TW.UTF-8"
SYSFONT="latarcyrheb-sun16"
SUPPORTED="zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8"

我预设使用 zh_TW.UTF-8 来作为我的整体语系,当然,我可以在这里修改 LANG 以及其他相关的语系变数, 例如 LC_CTYPE 或者是 LC_TIME 等等的。不过,一般来说,使用者自己个人的设定不建议在这里做更动啦! 他们可以自行设定他们自己的设定档啊!

# /etc/profile
这个档案设定了几个重要的变数,例如:‘PATH、USER、MAIL、 HOSTNAME、HISTSIZE、umask’等等,也同时规划出 /etc/inputrc 这个针对键盘热建设定的档案的资料内容。你可以在这里设定总体的 PATH 等等的资讯! 同时,这个档案也规划出 /etc/profile.d 及 /etc/inputrc 这两个目录与档案!

总之,你可以瞭解到刚刚我们学会的变数设定方式,在这个档案中也可以设定呢! 但是设定上需要特别小心,因为所有的使用者皆会使用到这个档案的资讯。通常我都喜欢将 /usr/local/bin 这个路径加成最前面,这是因为通常自己安装的套件自己最喜欢, 所以当然是最先搜寻啰! ^_^!此外,请注意一下,可以将 HISTSIZE 的大小改变一下,改成 50 就可以啦!比较安全!( 注:这个档案不论在那个 Linux distributions 当中均存在 /etc/profile 当中,所以,请特别留意此一档案即可! )。

# /etc/bashrc
这个档案在规划 umask 的功能,也同时规划出提示字元的内容 (就是里头那个 PS1 啦!) 。特别留意的是,这个档案在不同的 Linux distribution 里面,摆放的位置可能不太一样呢! 所以需要查询一下才行呦!

# /etc/profile.d/*.sh
/etc/profile.d 是一个目录,里面针对 bash 及 C-shell 规范了一些资料。 以 FC4 为例,这个目录里面就针对了颜色、语系、vim 及 which 等指令进行一些额外的设定, 例如 alias 之类的规范值。我们的 vim 被用 alias 命名为 vi 就是在这个目录下被设定好的。 当然啦,这个目录的由来其实是在 /etc/profile 这个档案内规范的啦! 你可以自行设定一些 *.sh 的档名的档案来书写自己的系统设定值喔!

# /etc/man.config
这个档案乍看之下好像跟 bash shell 没相关性,但是对于系统管理员来说, 却也是很重要的一个档案!这的档案的内容‘规范了使用 man 的时候, man page 的路径到哪里去寻找!’所以说的简单一点,这个档案规定了下达 man 的时候,该去哪里查看资料的路径设定!那么什么时候要来修改这个档案呢?如果你是以 tarball 的方式来安装你的资料,那么你的 man page(指令说明档案)可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man.config 里头,否则使用 man 的时候就会找不到相关的说明档啰。

事实上,这个档案内最重要的其实是 MANPATH 这个变数设定啦! 我们搜寻 man page 时,会依据 MANPATH 的路径去分别搜寻啊!另外,要注意的是, 这个档案在各大不同版本 Linux distributions 中,档名都不太相同,例如 FC4 用的是 /etc/man.config ,而 SuSE 用的则是 /etc/manpath.config , 可以利用 [tab] 按键来进行档名的补齐啦!

这就是系统在设定的时候常常会使用的档案!需要特别留意的是,通常设定完了这几个档案之后,都需要先 logout 在 login 之后才会将设定整个启动起来!

# 个人设定值

那么个人的喜好设定在哪里?嘿嘿嘿嘿!那就是在个人家目录的几个隐藏档当中啰! 分别会使用到底下的几个档案啦!( 注意!底下的档案都是隐藏档,需要使用 ls -al 方能显示出来 ) ,另外,注意一下啰!底下那个‘ ~ ’代表的是‘家目录’的意思:

# ~/.bash_profile, ~/.bash_login, ~/.profile
这三个档案通常只要一个就够了,一般预设是以 ~/.bash_profile 的档名存在。 会有这么多的档案,其实是因应其他 shell 转换过来的使用者的习惯而已。 这个档案可以定义个人化的路径 (PATH) 与环境变数等等。不过,还是有顺位上的差异, bash 启动时,会先去读取 ~/.bash_profile,找不到时,就去读取 ~/.bash_login ,然后才是 ~/.profile。

# ~/.bashrc
鸟哥一般都是将自己的需要输入在这个档案里面的呢! 我的个人化设定值都会写在这里说~例如命令别名、路径等等。

# ~/.bash_history
还记得我们在历史命令提到过这个档案吧?!呵呵!没错~预设的情况下, 我们的历史命令就记录在这里啊!而这个档案能够记录几笔资料,则与 HISTSIZE 这个变数有关啊。每次登入 bash 后,bash 会先读取这个档案,将所有的历史指令读入记忆体, 因此,当我们登入 bash 后就可以查知上次使用过哪些指令啰。至于更多的历史指令, 请自行回去参考喔!

# ~/.bash_logout
这个档案则记录了‘当我登出 bash 后,系统再帮我做完什么动作后才离开’的意思。 你可以去读取一下这个档案的内容,预设的情况下,登出时, bash 只是帮我们清掉萤幕的讯息而已。 不过,你也可以将一些备份或者是其他你认为重要的工作写在这个档案中(例如清空暂存档), 那么当你离开 Linux 的时候,就可以解决一些烦人的事情啰!

好了,我们知道在变数的设定规范当中,后输入的设定值可以取代先输入的设定值, 那么在我们登入 bash 的时候,这些设定档到底是如何读取的呢?他是这样读取的:

   1. 先读取 /etc/profile ,再根据 /etc/profile 的内容去读取其他额外的设定档, 例如 /etc/profile.d 与 /etc/inputrc 等等设定档;
   2. 根据不同的使用者,到使用者家目录去读取 ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 等设定档;
   3. 根据不同使用者,到他家目录去读取 ~/.bashrc

(评论:登陆bash的时候,不同账号有不同的bash设定档。系统先读取一般设定档,再到账号家目录中读取特定账号的设定档。最后读取的是家目录的特定账号的设定档。因为
后输入的设定值可以取代先输入的设定值,所以最后读取的设定档非常重要。

在家目录中有
~/.bash_profile 或 ~/.bash_login 或 ~/.profile~/.bashrc四个登录文档,最后读取~/.bashrc这个文档。

所以啰,当我登入 bash 后,最终读取的设定档竟然是 ~/.bashrc 呢! 也就是说,在 ~/.bashrc 里面的设定会是最终的设定值!所以啰, 通常鸟哥我喜欢将个人的一些常用 alias 或 PATH 等环境变数或自订变数都写到这个档案去, 如此一来,不论原来系统帮我们做了什么设定值,我都可以使用属于自己熟悉的环境呢! 鸟哥的 ~/.bashrc 有点像这样:

[root@linux ~]# vi ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
PATH="$PATH":/usr/X11R6/bin:/home/dmtsai/bin
LANG=zh_TW.big5
LC_TIME=C
export PATH LC_TIME LANG
umask 022

alias   rm='rm -i'
alias   cp='cp -i'
alias   mv='mv -i'
alias   ll='ls -l'
alias   lm='ls -al|more'
alias   h='history'

仔细看到上头这个档案,会不会觉得奇怪啊!为什么会有第五行的‘ . /etc/bashrc ’呢? 那个小数点 (.) 代表什么意思啊??其实 if [ ... ]; then .... fi 是 shell script 当中的程式写法, 这个我们会在下一章当中介绍。不过,那个 . 则需要好好的谈一谈喔!一般来说,如果修改完了设定档, 通常就是 logout 后再重新 login 到 bash 内,就能够将环境设定档重读了!不过, 我们可以使用底下的方式来让该设定档立即生效:

[root@linux ~]# source file
范例:
[root@linux ~]# source ~/.bashrc
[root@linux ~]#  .  ~/.bashrc

利用 source 或小数点 (.) 都可以将设定档的内容读进来目前的 shell 环境中! 举例来说,我修改了 ~/.bashrc ,那么不需要登出,立即以 source ~/.bashrc 就可以将刚刚最新设定的内容读进来目前的环境中!很不错吧!此外,什么时候会使用到不同的设定档呢? 最常发生在一个人的工作环境分为多重的时候了!举个例子来说,在我的大型主机中, 我常常需要负责两到三个不同的案子,每个案子所需要处理的环境变数订定并不相同, 那么我就将这两三个案子分别编写属于该案子的环境变数设定档案,当我需要该环境时,就直接‘ source 变数档 ’,如此一来,环境变数的设定就变的更简便而灵活了!

# login shell 与 non-login shell

事实上,这些环境设定档在读取时,还是有一些差异的,这就得要谈到所谓的‘login shell’与 ‘non-login shell’的差异了。基本上,就字面上的意义来解释的话,所谓的 loign shell 指的就是当使用者登入 Linux 系统时,所取得的那个环境设定档称为 login shell。 当登入后,启动其他的 bash 时所取用的环境设定档就称为 non-login shell 。

举例来说,我以 dmtsai 这个使用者身份登入 Linux 后,然后为了要执行一些数值模拟的工作,而去执行 csh 这个 C shell , 那么此时我就取得了 non-login shell 了。

另外一个例子是,当我以 X Window 的环境登入 Linux 时,我们不是可以使用‘终端机’来开启 shell 吗?当登入 Linux 的时候所取得的那个 X 的环境也可以读入 login shell 的。因此,在 X 环境下所启动的终端机 (shell),那些 shell 所使用的环境设定档都是 non-login shell 喔!

login 与 non-login shell 的差异除了取得的时机不同之外,其实他们读取的环境设定档也不相同。 我们上头说过一些个人的环境设定档案了吧?那么这两种类型的 shell 该读取什么档案呢? 当登入 Linux ,亦即是取得 login shell 时,会读取 ~/.bash_profile, ~/.bash_login, ~/.profile, 这三个档案的优先顺序已经在上面提过,自行参考一下。至于在取得 login shell 后继续动作的其他 non-login shell ,读取的就是仅有 ~/.bashrc 啰~。而大部分的 linux distributions 都会将 ~/.bash_profile 的内容指到 ~/.bashrc 去,这样比较简单啰~
阅读(969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~