`
jimode2013
  • 浏览: 40103 次
社区版块
存档分类
最新评论

第十一章、认识与学习 BASH

 
阅读更多

bash 的环境配置文件


  • login 与 non-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:属于使用者个人配置,你要改自己的数据,就写入这里!




  • /etc/profile (login shell 才会读)

这个配置文件利用使用者的标识符 (UID) 来决定很多重要的变量数据, 这也是每个使用者登陆取得 bash 时一定会读取的配置文件

  • PATH:会依据 UID 决定 PATH 变量要不要包含sbin 的系统命令目录;
  • MAIL:依据账号配置好使用者的 mailbox 到 /var/spool/mail/账号名;
  • USER:根据用户的账号配置此一变量内容;
  • HOSTNAME:依据主机的 hostname 命令决定此一变量内容;
  • HISTSIZE:历史命令记录笔数。CentOS 5.x 配置为 1000 ;

/etc/profile 可不止会做这些事而已,他还会去呼叫外部的配置数据!在 CentOS 5.x 默认的情况下, 底下这些数据会依序的被呼叫进来:

  • /etc/inputrc

    其实这个文件并没有被运行!/etc/profile 会主动的判断使用者有没有自定义输入的按键功能,如果没有的话, /etc/profile 就会决定配置『INPUTRC=/etc/inputrc』这个变量!此一文件内容为 bash 的热键啦、[tab]要不要有声音等等的数据! 因为鸟哥觉得 bash 默认的环境已经很棒了,所以不建议修改这个文件!

  • /etc/profile.d/*.sh

    只要在 /etc/profile.d/ 这个目录内且扩展名为 .sh ,另外,使用者能够具有 r 的权限, 那么该文件就会被 /etc/profile 呼叫进来。在 CentOS 5.x 中,这个目录底下的文件规范了 bash 操作接口的颜色、 语系、ll 与 ls 命令的命令别名、vi 的命令别名、which 的命令别名等等。如果你需要帮所有使用者配置一些共享的命令别名时, 可以在这个目录底下自行创建扩展名为 .sh 的文件,并将所需要的数据写入即可!

  • /etc/sysconfig/i18n

    这个文件是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 默认使用何种语系的重要配置文件! 文件里最重要的就是 LANG 这个变量的配置!

bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会呼叫出其他的配置文件! 接下来,让我们来瞧瞧,那么个人偏好的配置文件又是怎么回事?


  • ~/.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 的 /root/.bash_profile 的内容是怎样呢?

[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/ 目录啦! 那就可以直接运行该运行档而不需要使用绝对/相对路径来运行该文件。

 主要是透过一个命令『 source 』来读取的! 也就是说 ~/.bash_profile 其实会再呼叫 ~/.bashrc 的配置内容!

login shell 的配置文件读取流程
图 4.3.1、login shell 的配置文件读取流程

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


  • source :读入环境配置文件的命令

由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的配置文件,所以, 如果你将自己的偏好配置写入上述的文件后,通常都是得注销再登陆后,该配置才会生效。那么,能不能直接读取配置文件而不注销登陆? 可以的!那就得要利用 source 这个命令了!

[root@www ~]# source 配置文件档名

范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
[root@www ~]# source ~/.bashrc  <==底下这两个命令是一样的!
[root@www ~]#  .  ~/.bashrc

利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中! 举例来说,我修改了 ~/.bashrc ,那么不需要注销,立即以 source ~/.bashrc 就可以将刚刚最新配置的内容读进来目前的环境中!很不错!还有,包括 ~/bash_profile 以及 /etc/profile 的配置中, 很多时候也都是利用到这个 source (或小数点) 的功能!

有没有可能会使用到不同环境配置文件的时候?有! 最常发生在一个人的工作环境分为多种情况的时候了!举个例子来说,在鸟哥的大型主机中, 常常需要负责两到三个不同的案子,每个案子所需要处理的环境变量订定并不相同, 那么鸟哥就将这两三个案子分别编写属于该案子的环境变量配置文件案,当需要该环境时,就直接『 source 变量文件 』,如此一来,环境变量的配置就变的更简便而灵活了!


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

当你取得 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 操作的,底下就来谈一谈:

  • /etc/man.config

    这个文件乍看之下好像跟 bash 没相关性,但是对于系统管理员来说, 却也是很重要的一个文件!这的文件的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』所以说的简单一点,这个文件规定了下达 man 的时候,该去哪里查看数据的路径配置!

    那么什么时候要来修改这个文件呢?如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man.config 里头,否则使用 man 的时候就会找不到相关的说明档啰。

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

  • ~/.bash_history

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

  • ~/.bash_logout

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

 


分享到:
评论

相关推荐

    鸟哥的 Linux 私房菜第11章-认识与学习 BASH1

    【认识 BASH 这个 Shell】 BASH,全称Bourne-Again SHell,是Linux系统中最常用的Shell之一,尤其对于初学者来说是必须掌握的基础工具。它是一种命令解释器,允许用户通过文本界面与操作系统内核进行交互,执行各种...

    Linux操作系统学习

    第0章 计算机概论 第1章 Linux是什么 第2章 Linux 如何学习 第3章 主机规划与磁盘分区 第4章 安装Centos5.x 与多重引导...第11章 认识与学习BASH 第12章 正规表示法与文件格式化处理 第13章 学习Shell Scripts ........

    学习 bash 第二版(英文版).chm

    《学习 bash 第二版(英文版)》.chm,作者:Cameron Newbam & Bill Rosenblatt。...第十一章:用户系统 bash。 附录一:相关 shell。 附录二:参考列表。 附录三:可载入命令。 附录四:语法。 附录五:获得示例程序。

    鸟哥的私房菜.pdf

    第11章 认识与学习bash 第12章 正则表达式与文件格式化处理 第13章 学习shell script 第四部分 Linux使用者管理 第14章 Linux账号管理与ACL权限设置 第15章 磁盘配额(Quota)与高级文件系统管理 第16章 例行性...

    认识与学习 BASH,Shell 的变量功能

    【标题】:“认识与学习 BASH,Shell 的变量功能” 【描述】:“影响 bash 环境操作的变量[root@www ~]# echo $variable[root@www ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/...

    学习Bash(第二版)中文版.pdf

    然而,由于标题明确指出了文档内容是关于学习Bash(第二版)中文版,我们可以根据这方面的知识进行扩展。 Bash是Bourne Again SHell的缩写,它是基于Unix操作系统的流行命令行界面。Bash作为免费和开源的软件,已经...

    学习 bash (第二版)中文版

    《学习Bash(第二版)中文版》这本书深入浅出地介绍了如何有效地利用Bash进行系统管理、自动化任务执行以及编写复杂脚本。 **1. Bash基础知识** Bash提供了丰富的命令行交互功能,包括基本的文件操作(如创建、...

    学习bash(第二版本)

    《学习 bash 第二版》,作者:Cameron Newbam & Bill Rosenblatt。 本书教授了如何使用bash的高级命令行特性,如命令历史、命令行编辑和命令完成。

    学习Bash(第二版)

    O'Relly 出版的Bash书,非常不错。

    bash入门学习实例

    **Bash 入门学习实例** Bash,全称是“Bourne-Again SHell”,是Unix和类Unix系统中最常用的命令行解释器。它不仅是一个交互式shell,还是脚本编程语言,广泛用于Linux和macOS系统。这篇教程将通过一系列实例,帮助...

    学习 bash.pdf

    bash非常好的教程,自学很棒

    bash官方手册/Bash Reference Manual

    第一章节是介绍,讲解什么是 Bash 和 shell,以及基本概念定义。第二章节是基本 shell 特性,涵盖了 shell 语法、shell 操作、变量、命令、函数等。 在基本 shell 特性章节中,讲解了 shell 语法,包括 shell 操作...

    学习bash(第三版)_英文版

    总之,《学习Bash》这本书是一部全面而详尽的Bash指南,不仅适合新手入门,也适用于高级用户进一步探索Bash的强大功能。通过本书的学习,读者能够熟练掌握Bash的各种特性和编程技术,从而提高日常工作的效率。

    Bash shell 学习笔记

    ### Bash Shell 学习笔记知识点概览 #### 1. 引言 - **Shell**:作为用户与操作系统之间的桥梁,Shell提供了一种与系统进行交互的方式,支持用户执行命令和编写脚本来自动化任务。 - **Bash**:是Bourne-Again ...

    学习bash(第二版中文)

    本书详细介绍了bash的安装配置使用及编程,还介绍了shell编程

    Bash参考手册.pdf

    Bash参考手册.pdf是Bash shell的官方参考手册,涵盖了Bash shell的所有方面,包括基本语法、变量、命令、函数、文件处理、...通过学习Bash参考手册.pdf,用户可以深入了解Bash shell的所有方面,从基本语法到高级特性。

    学习 bash (第二版)中文版.pdf

    学习 bash (第二版)中文版.pdf O'Reily经典教材

    学习bash 中文第二版

    第二版还加入了一些新命令,增强了安全性,也加入了readline,增强了配置和安装过程,并且增加了附助编程的bash shell调试器。 经过不懈的实践和对实例及问题进行深入的研究后,你会发现《学习bash》对Linux和其他...

    高级BASH脚本学习

    高级BASH脚本学习是一项技能,对于掌握Linux系统和进行自动化操作至关重要。BASH(Bourne Again SHell)是UNIX和Linux系统中最流行的shell之一,几乎所有Linux发行版和大部分UNIX系统都支持BASH。由于其强大的功能和...

    bash高级编程 advanced bash script

    **Bash高级编程详解** Bash(Bourne-Again SHell)是Unix/Linux系统中最常用的命令行解释器,也是脚本编程的强大工具...因此,无论你是初学者还是经验丰富的开发者,深入学习Bash都是一个值得投入的时间和精力的投资。

Global site tag (gtag.js) - Google Analytics