linux bash环境配置文件

linux bash环境配置文件

你是否会觉得奇怪,怎么我们什么动作都没有进行,但是一进入 bash 就取得一堆有用的变量了? 这
是因为系统有一些环境配置文件案的存在,让 bash 在启动时直接读取这些配置文件,以规划好 bash
的操作环境啦! 而这些配置文件又可以分为全体系统的配置文件以及用户个人偏好配置文件。要注
意的是, 我们前几个小节谈到的命令别名啦、自定义的变数啦,在你注销 bash 后就会失效,所以
你想要保留你的设定, 就得要将这些设定写入配置文件才行。底下就让我们来聊聊吧!

login 与 non-login shell

在开始介绍 bash 的配置文件前,我们一定要先知道的就是 login shell 与 non-login shell! 重点在于
有没有登入 (login) 啦!

  • 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 。

为什么要介绍 login, non-login shell 呢?这是因为这两个取得 bash 的情况中,读取的配置文件数据并不一样所致。 由于我们需要登入系统,所以先谈谈 login shell 会读取哪些配置文件?一般来说,login shell 其实只会读取这两个配置文件:

  1. /etc/profile:这是系统整体的设定,你最好不要修改这个文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里!

那么,就让我们来聊一聊这两个文件吧!这两个文件的内容可是非常繁复的喔!

/etc/profile (login shell 才会读)

你可以使用 vim 去阅读一下这个文件的内容。这个配置文件可以利用使用者的标识符 (UID) 来决定
很多重要的变量数据, 这也是每个使用者登入取得 bash 时一定会读取的配置文件! 所以如果你想
要帮所有使用者设定整体环境,那就是改这里啰!不过,没事还是不要随便改这个文件喔 这个文件
设定的变量主要有:

  • PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;
  • MAIL:依据账号设定好使用者的 mailbox 到 /var/spool/mail/账号名;
  • USER:根据用户的账号设定此一变量内容;
  • HOSTNAME:依据主机的 hostname 指令决定此一变量内容;
  • HISTSIZE:历史命令记录笔数。CentOS 7.x 设定为 1000 ;
  • umask:包括 root 默认为 022 而一般用户为 002 等!

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

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

  • /etc/locale.conf
    这个文件是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 预设使用何种语系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL 这些个变量的设定啦!我们在前面的 locale 讨论过这个文件啰! 自行回去瞧瞧先!

  • /usr/share/bash-completion/completions/*
    记得我们上头谈过 [tab] 的妙用吧?除了命令补齐、档名补齐之外,还可以进行指令的选项/参数补齐功能!那就是从这个目录里面找到相对应的指令来处理的! 其实这个目录底下的内容是由/etc/profile.d/bash_completion.sh 这个文件载入的啦!

反正你只要记得,bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是/etc/profile 还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善啦! 接下来,让我们来瞧瞧,那么个人偏好的配置文件又是怎么回事?

~/.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 转换过来的使用者的习惯而已。 先让我们来看一下 dmtsai
的 /home/dmtsai/.bash_profile 的内容是怎样呢?

[dmtsai@study ~]$ 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/.local/bin:$HOME/bin <==底下这几行在处理个人化设定
exp

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

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

在这里插入图片描述

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

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

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

[dmtsai@study ~]$ source 配置文件档名
范例:将家目录的 ~/.bashrc 的设定读入目前的 bash 环境中
[dmtsai@study ~]$ source ~/.bashrc <==底下这两个指令是一样的!
[dmtsai@study ~]$ . ~/.bashrc

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

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

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

[root@study ~]# 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 7.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-4.2$

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

其他相关配置文件

事实上还有一些配置文件可能会影响到你的 bash 操作的,底下就来谈一谈:

  • /etc/man_db.conf
    这个文件乍看之下好像跟 bash 没相关性,但是对于系统管理员来说,却也是很重要的一个文件!这的文件的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』所以说的简单一点,这个文件规定了下达 man 的时候,该去哪里查看数据的路径设定!那么什么时候要来修改这个文件呢?如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man_db.conf 里头,否则使用 man 的时候就会找不到相关的说明档啰。
  • ~/.bash_history
    还记得我们在历史命令提到过这个文件吧?预设的情况下, 我们的历史命令就记录在这里啊!而这个文件能够记录几笔数据,则与 HISTFILESIZE 这个变数有关啊。每次登入 bash 后,bash 会先读取这个文件,将所有的历史指令读入内存, 因此,当我们登入 bash 后就可以查知上次使用过哪些指令啰。至于更多的历史指令, 请自行回去参考喔!
  • ~/.bash_logout
    这个文件则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思。 你可以去读取一下这个文件的内容,预设的情况下,注销时, bash 只是帮我们清掉屏幕的讯息而已。 不过,你也可以将一些备份或者是其他你认为重要的工作写在这个文件中 (例如清空暂存盘), 那么当你离开 Linux 的时候,就可以解决一些烦人的事情啰!

参考:节选鸟哥的linux私房菜第四版 10.4.3节

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值