/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc和~/.bash_logout

主要内容来自《鸟哥的Linux私房菜》,本人主要做了一些整合。

001 导言

    Linux中,管理整个硬件的是核心(kernel),用户(user)通过shell来跟核心交互,以此让核心达到我们所想要达到的工作目的。本文采用OEL6.5操作系统进行实验。

002 什么是shell?
    下面这张图来自鸟哥的Linux私房菜,从中可以很容易的看出来,位于最核心的是硬件,硬件之外是Linux的内核,内核驱动硬件,而我们这些用户则通过shell与内核打交道。

     使计算机主机正常工作是核心的任务,但是操作核心来替使用者工作的,却是shell!
     而/bin/bash ,通常简称bash,是 Linux 预设的 shell !

     shell可以分为命令行shell和图形化shell。不管哪种,其根本原理是一样的。输入如下命令,查看当前使用的shell
<span style="font-size:18px;">[root@host ~]# echo $shell
bash
</span>

      之所以我们可以一进入bash就能进行一系列操作,是因为Linux已经存在一些关于环境配置的文件存在,在bash启动时会直接读取这些配置文件,来规划好bash的操作环境。
      这些配置文件可以分为两类:一类是为全体系统设置的配置文件,一类是用户个人设置的配置文件。


003 login与no-login shell
login shell:取得bash时需要完整的登录流程的,就称为login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为login shell。
non-login shell:取得 bash接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后,再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码,那第二个 bash (子程序) 也是 non-login shell 。

在这两个取得 bash 的情况中,读取的配置文件数据并不一样。一般来说,login shell 其实只会读取这两个配置文件:
  1. /etc/profile:这是系统整体的配置,最好不要修改这个文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,你要改自己的数据,就写入这里。

004 /etc/profile (login shell 才会读)
这个配置文件可以利用使用者的标识符 (UID) 来决定很多重要的变量数据,这也是每个使用者登陆取得 bash 时一定会读取的配置文件!所以如果你想要帮所有使用者配置整体环境,那就是改这里啰!不过,没事还是不要随便改这个文件喔这个文件配置的变量主要有:
  • PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统命令目录;
  • MAIL:依据账号配置好使用者的 mailbox 到 /var/spool/mail/账号名;
  • USER:根据用户的账号配置此一变量内容;
  • HOSTNAME:依据主机的 hostname 命令决定此一变量内容;
  • HISTSIZE:历史命令记录笔数。CentOS 5.x 配置为 1000 ;
只要记得,bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善啦!


005 ~/.bash_profile (login shell 才会读)

bash 在读完了整体环境配置的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile
其实 bash 的 login shell 配置只会读取上面三个文件的其中一个,而读取的顺序则是依照上面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会被读取。如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取 ~/.profile 的意思。会有这么多的文件,其实是因应其他 shell 转换过来的使用者的习惯而已。

[root@www ~]# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then   <==底下这三行在判断并读取 ~/.bashrc
        . ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin        <==底下这几行在处理个人化配置
export PATH
unset USERNAME

这个文件内有配置 PATH 这个变量喔!而且还使用了 export 将 PATH 变成环境变量呢!由于 PATH 在 /etc/profile 当中已经配置过,所以在这里就以累加的方式添加用户家目录下的 ~/bin/ 为额外的运行文件放置目录。这也就是说,你可以将自己创建的运行档放置到你自己家目录下的 ~/bin/ 目录啦!那就可以直接运行该运行档而不需要使用绝对/相对路径来运行该文件。

这个文件的内容比较有趣的地方在于 if ... then ... 那一段!那一段程序代码我们会在第十三章 shell script 谈到,假设你现在是看不懂的。该段的内容指的是『判断家目录下的 ~/.bashrc 存在否,若存在则读入 ~/.bashrc 的配置』。bash 配置文件的读入方式比较有趣,主要是透过一个命令『 source 』来读取的!也就是说 ~/.bash_profile 其实会再呼叫 ~/.bashrc 的配置内容喔!最后,我们来看看整个 login shell的读取流程:

login shell 的配置文件读取流程
图 4.3.1、login shell 的配置文件读取流程
实线的的方向是主线流程,虚线的方向则是被呼叫的配置文件!从上面我们也可以清楚的知道,在 CentOS 的 login shell 环境下,最终被读取的配置文件是『 ~/.bashrc 』这个文件喔!所以,你当然可以将自己的偏好配置写入该文件即可。底下我们还要讨论一下 source 与 ~/.bashrc !


006 ~/.bashrc (non-login shell 会读)

谈完了 login shell 后,那么 non-login shell 这种非登陆情况取得 bash 操作接口的环境配置文件又是什么?当你取得 non-login shell 时,该 bash 配置文件仅会读取 ~/.bashrc 而已啦!那么默认的 ~/.bashrc 内容是如何?

[root@www ~]# cat ~/.bashrc
# .bashrc

# User specific aliases and functions
alias rm='rm -i'             <==使用者的个人配置
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then  <==整体的环境配置
        . /etc/bashrc
fi

特别注意一下,由于 root 的身份与一般使用者不同,鸟哥是以 root 的身份取得上述的数据,如果是一般使用者的 ~/.bashrc 会有些许不同。看一下,你会发现在 root 的 ~/.bashrc 中其实已经规范了较为保险的命令别名了。此外,咱们的 CentOS 5.x 还会主动的呼叫 /etc/bashrc 这个文件喔!为什么需要呼叫 /etc/bashrc 呢?因为/etc/bashrc 帮我们的 bash 定义出底下的数据:

  • 依据不同的 UID 规范出 umask 的值;
  • 依据不同的 UID 规范出提示字符 (就是 PS1 变量);
  • 呼叫 /etc/profile.d/*.sh 的配置

你要注意的是,这个 /etc/bashrc 是 CentOS 特有的 (其实是 Red Hat 系统特有的),其他不同的 distributions 可能会放置在不同的档名就是了。由于这个 ~/.bashrc 会呼叫 /etc/bashrc 及 /etc/profile.d/*.sh ,所以,万一你没有 ~/.bashrc (可能自己不小心将他删除了),那么你会发现你的 bash 提示字符可能会变成这个样子:

-bash-3.2$  
不要太担心啦!这是正常的,因为你并没有呼叫 /etc/bashrc 来规范 PS1 变量啦!而且这样的情况也不会影响你的 bash 使用。如果你想要将命令提示字符捉回来,那么可以复制 /etc/skel/.bashrc 到你的家目录,再修订一下你所想要的内容,并使用 source 去呼叫 ~/.bashrc ,那你的命令提示字符就会回来啦!


~/.bash_history

还记得我们在历史命令提到过这个文件吧?默认的情况下,我们的历史命令就记录在这里啊!而这个文件能够记录几笔数据,则与 HISTFILESIZE这个变量有关啊。每次登陆 bash 后,bash 会先读取这个文件,将所有的历史命令读入内存,因此,当我们登陆 bash 后就可以查知上次使用过哪些命令啰。至于更多的历史命令,请自行回去参考喔!

~/.bash_logout

这个文件则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思。你可以去读取一下这个文件的内容,默认的情况下,注销时, bash 只是帮我们清掉屏幕的信息而已。不过,你也可以将一些备份或者是其他你认为重要的工作写在这个文件中 (例如清空缓存盘),那么当你离开 Linux 的时候,就可以解决一些烦人的事情啰!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值