【鸟哥 Linux 10.4】Linux Bash Shell 操作环境(包含通配符相关内容)
Linux 命令的路径搜寻顺序
- 当我们在linux终端输入一行命令,系统是怎么直到我们要执行的是什么呢?其实系统是根据如下的顺序去查找输入的命令的:
- 以相对或者绝对路径指定的命令
- 通过alias找到的路径
- bash内建命令
- 通过
$PATH
环境变量找到的路径
Bash登录欢迎讯息:/etc/issue和/etc/motd
- 当我们在终端登录的时候,会显示一段信息,这段信息配置在
/etc/issue
。 - 当需要在所有用户登录的时候显示一段信息,在
/etc/motd
中配置即可
Bash的环境配置文件
login shell和non-login shell
- login shell:需要完整登录流程才能获取的shell称为login shell。在tty中登录获取的bash就是一种login shell。
- non-login shell:不需要登录即可获取的shell成为non-login shell。比如:登录GUI之后打开GUI终端模拟器不需要进行登录操作,这就是一个non-login shell,如果在这个GUI终端中再使用bash命令开一个子shell,这个子bash也不需要登录,那么也是一个non-login shell。
login shell需要读取的配置文件
- /etc/profile: 系统整体设定,最好不要修改。
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:个人设定,只会按照先后顺序读取其中一个。
/etc/profile文件
# 本/etc/profile文件摘取自linux5.4内核的linux mint发行版(基于ubuntu20)
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc # 执行外部配置数据
fi
else
# 根据用户显示不同的prompt sign,root用户(id为0)显示为#
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# 执行/etc/profile.d文件夹中所有的shell script
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
- 大体来说,默认的/etc/profile脚本属于系统配置,他将执行/etc/profile.d文件夹中的所有脚本。
~/.bash_profile文件
#对于ubuntu系统来说,没有~/.bash_profile文件,而是~/.profile文件,以下是该文件的内容。
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc" # 执行~/.bashrc用户自定义脚本
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH" # 将$HOME/bin拼接到PATH环境变量中
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH" # 将$HOME/.local/bin拼接到PATH环境变量中
fi
- 大体来说,~/.bash_profile 或 ~/.bash_login 或 ~/.profile负责将用户设定脚本~/.bashrc进行执行。
source刷新环境配置文件
-
由于上述两种配置文件都属于login shell中的配置文件,修改过之后要重新登录才能刷新改动的配置。一个让配置文件的修改立即生效的方法就是使用
source 配置文件名
,一般用户使用source ~/.bashrc
来立即更新用户配置文件。 -
source可以使用小数点代替,是一样的效果。这种方式很常见,在上面列出的两种配置文件内容中都有使用到。
~/.bashrc用户配置文件/
- 当登录了non-login shell,就只会读取并执行~/.bashrc文件。
- 如果不小心改坏了或者删除了这个文件,可以使用/etc/skel/.bashrc还原。推荐经常备份~/.bashrc
其他配置文件
/etc/man_db.conf
- 存放man读取的数据的路径(ubuntu没有)
~/.bash_history
- history命令读取的数据
~/.bash_logout
- 配置用户注销之后,bash还需要执行哪些命令再真正离开。
stty(setting tty)和set
- stty用于查看和设定当前tty下的按键映射
- set用于显示所有用户变量和环境变量,另外也可以用于设定输入输出环境有关的一些配置。
通配符
符号 | 内容 |
---|---|
# | 注释 |
\ | 转义 |
; | 多命令分隔 |
~ | 用户家目录 |
$ | 取变量 |
& | 让指令在后台工作 |
! | 非 |
/ | 路径分隔符 |
>,>> | 输出数据流重导向,取代和累加 |
<,<< | 输入数据流重导向,取代和累加 |
' ' | 纯文本,单引号内不被shell解析 |
" " | 保留shell解析 |
`?` | 命令结果替换成文本 |
() | 子shell |
{} | 命令区块 |