美文网首页
Linux 之 Bash -- Bash Shell 的操作环境

Linux 之 Bash -- Bash Shell 的操作环境

作者: 熊猫人和熊猫猫 | 来源:发表于2019-06-06 01:38 被阅读0次

1.路径与指令搜寻顺序

当我们下达一个指令,计算机都是要在内部搜寻这个指令对应的操作,然后再执行的。假如一个指令可以对应很多种操作,那么计算机该怎么执行?如果不理解? 那就举个栗子:
我们都知道系统里面其实有很多ls 指令,假如我们曾经 alias ls='ls -l',当我们在命令行内输入ls,计算机是执行最原始定义的ls还是ls -l呢?所以这就关系到 指令搜寻顺序 了,一般指令运作的顺序可以这么看(简单了解就好):

  • 以相对/绝对路径执行指令,例如「/bin/ls」或「./ls」;
  • 由 alias 找到该指令来执行;
  • 由 bash 内建的(builtin)指令来执行;
  • 透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行

2. bash 的进站与欢迎讯息

大家在登陆终端机接口一般都会有进站的欢迎信息,这个进站信息其实都是可以编辑的。
定制属于自己的进站画面:编辑这个文件/etc/issue
定制telnet远程登陆程序的登入画面:编辑这个文件/etc/issue.net
让使用者登陆后取得一些讯息:编辑这个文件/etc/motd(一定要以root的身份)

3.bash的环境配置文件

3.1 认识 login 与 non-login shell

  • login shell: 取得 bash 时需要完整的登入流程的,就称为 login shell。
  • non-login shell:取得 bash 接口的方法不需要重复登入的举动。
    不理解?没关系,只要知道这两种shell读取的配置文件不一致也可以。

3.1-1 login shell 读取的文件(2个)

(1) /etc/profile

这是每个使用者登入取得bash时一定会读取的配置文件,所以如果想要帮所有使用者设定整体环境,就可以修改这份文档(这个文件设定的变量主要有:PATH,MAIL,USER,HOSTNAME,HISTSIZE,unmask-root默认022;一般用户为002)
除此以外,/etc/profile它还会去呼叫外部的设定数据,例如如下文档中的数据

  • /etc/profile.d/*.sh
    它的意思是指/etc/profile.d/文档下的所有扩展名为sh 的文件,这个目录底下的文件规范了bash操作接口的颜色、语系、ll与ls指令的命令别名、vi 的命令别名、which 的命令别名等等。

    Tips : 如果你要帮所有使用者设定一些共享的命令别名时,可以在这个目录底下自行建立扩展名为.sh的文件,并将所需要的数据写入即可。

  • /etc/locale.conf
    悄悄告诉你:这个文件实际上是由👆/etc/profile.d/*.sh中的/etc/profile.d/lang.sh呼叫进来的,是我们决定 bash 预设使用哪种语系的重要配置文件(eg: LANG/LC_ALL等变量的设定)

  • /usr/share/bash-completion/completions/*
    同样的,这个目录底下的内容都是👆/etc/profile.d/*.sh中的/etc/profile.d/bash_completion.sh这个文件载入的。我们使用[tab]进行命令补齐、档名补齐、指令的选项/参数补齐功能,都是在这个目录里找到相应的指令来处理的。

其实 bash 的 login shell 读取的整体环境配置文件其实只有/etc/profile,但是/etc/profile会呼叫出/etc/profile.d/文档下的所有扩展名为sh 的文件,而/etc/profile.d/文档下部分扩展名为sh的文件会继续往外呼叫出其他的配置文件,这就使得我们的bash操作接口变得非常友善~

(2)~/.bash_profile
bash在读完了整体环境设定的/etc/profile并呼叫其他配置文件之后,接下来会读取使用者的个人配置文件。按照优先顺序依次为:

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
    注意:只会读取三个文件中的一个
    通过cat 来看一下~/.bash_profile这个优先级最高的文件吧:
    bash_profile一般都是这个内容
    我们需要了解这份文档中的两个内容:
    <1> PATH 这个变量
    其实 PATH 在 /etc/profile 当中已经设定过了(看👆(1) /etc/profile),所以这里出现的PATH就以 累加的方式 ,增加 用户家目录下的 ~/bin 为额外的执行文件放置目录。所以你可以将执行文档放在自己HOME目录对应的目录下直接执行,而不用使用绝对/相对路径。
    <2> if ... then ...
    这是什么东西?这段话的内容是“判断HOME目录下的~/.bashrc是否存在,如果存在,则读入~/.bashrc的设定”

总结一下,整个login shell 的读取流程是这样的:


login shell 的配置文件读取流程

实线的方向是主线流程,虚线的方向则是被呼叫的配置文件。

Tips:
由于上面提到的这些配置文件都是在取得 login shell 的时候才会读取的配置文件,所以,如果你将自己的偏好设定写入对应文件后,通常要注销再登陆后,设定才会生效。这么做太麻烦了,可以使用命令行中输入 source 配置文档名的方法,不需要注销,便立即将刚刚设定的内容读进目前的环境中。

3.1-2 non-login shell 读取的文件

  • ~/.bashrc
    当我们取得 non-login shell时,该bash配置文件仅会读取~/.bashrc!
    除此之外,CentOS 7.x 还会主动呼叫 /etc/bashrc,它会帮bash 定义下面的数据
    1.依据不同的UID规范出 umask 的值
    2.依据不同的UID规范出提示字符(PS1变量)
    3.呼叫/etc/profile.d/*.sh的设定

Tip:
假如不小心把重要的~/.bashrc删掉了,补救措施:复制 /etc/skel/.bashrc到家目录,稍微修订一些你想要的内容,source 去呼叫一下~/.bashrc。可以作为一个填坑的方法~

3.2 其他一些影响bash操作的配置文件

  • /etc/man_db.conf
    相关作用:它规范了使用man的时候, man page的路径去哪里寻找
  • ~/.bash_history
    相关作用:它记录历史命令,同时记录历史命令的数量与 HISTFILESIZE这个变数有关
  • ~/.bash_logout
    相关作用:文件记录了我们注销bash后,系统帮我们做完什么动作后才离开

相关文章

  • Linux 之 Bash -- Bash Shell 的操作环境

    1.路径与指令搜寻顺序 当我们下达一个指令,计算机都是要在内部搜寻这个指令对应的操作,然后再执行的。假如一个指令可...

  • chapter 3.基本的bash shell命令

    基本的bash shell命令 启动shell 大多数Linux默认的shell都为GNU bash shell/...

  • shell & bash基础命令及巧用

    shell与bash脚本的区别shell是Linux基础命令解释器bash(Bourne Again shell)...

  • Bash

    主要概念 Linux默认的shell是bash Shell bash Shell 可以交互使用,或者作为一种强大的...

  • Shell 的种类

    Linux中默认的Shell是/bin/bash,流行的Shell有ash、bash、ksh、csh、zsh等,不...

  • Linux学习日记——BASH

    一、认识BASH BASH是目前Linux系统应用最多的shell,也是大多数Linux系统默认的shell. s...

  • bash 特性总结

    使用bash能更好的完成linux工作 CentOS 默认shell为bash,echo $SHELL获得当前系统...

  • Linux之.bashrc 文件

    前言:Linux 系统中有很多shell,比如bash、sh、zsh等,虽然存在很多不同的shell,bash 却...

  • 1.1 简介

    1.Bash(Bourne Again Shell),目前是大多数GNU/Linux系统默认的shell环境。 2...

  • shell变量

    bash 大多数Linux系统默认使用的shell,bash shell 是shell 的一个免费版本,它是最早的...

网友评论

      本文标题:Linux 之 Bash -- Bash Shell 的操作环境

      本文链接:https://www.haomeiwen.com/subject/wjlqzqtx.html