Bash Shell 配置与环境变量全解析
1. 全局与本地配置文件
在 Linux 系统中,Bash 外壳的配置分为全局配置和本地配置。全局配置文件用于设置系统范围内的函数和别名,而本地配置文件则允许每个用户根据自己的喜好定制外壳环境。
-
全局配置文件
:
/etc/bashrc的主要功能是设置系统范围的函数和别名,包括终端仿真器类型、命令提示符字符串、新文件创建时的默认权限掩码(umask)以及$SHELL变量。需要注意的是,不应直接修改默认的全局配置文件。若要修改或添加全局配置,应在/etc/profile.d目录下添加自定义文件,文件名以.sh结尾即可。 -
本地配置文件
:位于每个用户的主目录下,主要有
.bashrc和.bash_profile。当启动登录外壳时,Bash 首先运行/etc/profile,然后运行~/.bash_profile。~/.bash_profile会调用~/.bashrc来设置别名和函数,接着设置并导出路径,使该路径对所有后续的非登录外壳可用。而~/.bashrc会调用/etc/bashrc。以下是具体代码示例:
# ~/.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
# ~/.bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging
feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
2. 追踪配置脚本执行顺序
为了验证配置脚本的执行顺序,可以在每个脚本的开头添加
echo
语句。以下是具体操作步骤:
1.
以 root 用户身份修改
:
-
编辑
/etc/profile
:在
pathmunge
过程之后添加
echo "Running /etc/profile"
。
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
echo "Running /etc/profile"
if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`id -u`
UID=`id -ru`
fi
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
- **编辑 `/etc/bashrc`**:添加 `echo "Running /etc/bashrc"`。
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
echo "Running /etc/bashrc"
# Prevent doublesourcing
if [ -z ".bashrcSOURCED" ]; then
.bashrcSOURCED="Y"
- **创建 `/etc/profile.d/myBashConfig.sh`**:添加 `echo "Running /etc/profile.d/myBashConfig.sh"`。
# /etc/profile.d/myBashConfig.sh
echo "Running /etc/profile.d/myBashConfig.sh"
-
以学生用户身份修改
:
-
编辑
~/.bash_profile:添加echo "Running ~/.bash_profile"。
-
编辑
# .bash_profile
echo "Running ~/.bash_profile"
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
- **编辑 `~/.bashrc`**:添加 `echo "Running ~/.bashrc"`。
# .bashrc
echo "Running ~/.bashrc"
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging
feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
修改完成后,打开一个新的终端会话,每个执行的文件都会在终端上打印其名称。
3. 环境变量的探索
环境变量是影响外壳行为的重要因素,它们由变量名和值组成。可以使用简单的工具来探索和操作环境变量,永久更改需要在配置文件中进行,而临时更改可以通过命令行的基本命令实现。
-
查看环境变量
:使用
printenv命令查看当前环境变量。
$ printenv | less
部分环境变量,如
LS_COLORS
和
TERMCAP
,包含很长的文本字符串。
LS_COLORS
定义了在终端支持颜色显示时,各种命令运行时特定文本的显示颜色;
TERMCAP
定义了终端仿真器的功能。
-
查看单个环境变量的值
:使用
echo
命令查看特定环境变量的值。
$ echo $HOME
/home/student
还可以查看
LOGNAME
、
HOSTNAME
、
pwd
、
OLDPWD
和
USER
等变量的值。当将
/tmp
设置为当前工作目录时,再次检查
pwd
和
OLDPWD
的值会发生变化。
4. 用户外壳变量
用户外壳变量是本地环境的一部分,仅对当前外壳及其子进程可用。若要使修改或新创建的变量对新启动的外壳可用,需要使用
export
命令。
以下是设置和测试用户外壳变量的步骤:
1.
设置新变量
:在现有终端会话中,确保新环境变量
MyVar
不存在并设置它,然后验证其值。
[student@studentvm1 ~]$ echo $MyVar ; MyVar="MyVariable" ; echo $MyVar
MyVariable
-
验证变量的作用域
:打开另一个 Bash 终端会话,验证
MyVar不存在。
[student@studentvm1 ~]$ echo $MyVar
-
导出变量
:在第一个终端会话中,导出
MyVar并启动一个新的屏幕会话,验证MyVar在新会话中是否可用。
[student@studentvm1 ~]$ export MyVar="MyVariable" ; echo $MyVar
MyVariable
[student@studentvm1 ~]$ screen
[student@studentvm1 ~]$ echo $MyVar
MyVariable
-
取消设置变量
:退出屏幕会话并取消设置
MyVar。
[student@studentvm1 ~]$ exit
[screen is terminating]
[student@studentvm1 ~]$ unset MyVar
[student@studentvm1 ~]$ echo $MyVar
-
临时设置环境变量
:使用
env工具临时为程序或子外壳设置环境变量。
[student@studentvm1 ~]$ env MyVar=MyVariable Bash
[student@studentvm1 ~]$ echo $MyVar
MyVariable
[student@studentvm1 ~]$ exit
exit
[student@studentvm1 ~]$
5. 别名的使用
别名是减少输入工作量和降低错误率的有效方法,它可以用较短的命令替代较长的命令。
-
查看现有别名
:使用
alias命令查看当前的别名列表。
[student@testvm1 ~]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias glances='glances -t1'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias lsn='ls --color=no'
alias mc='. /usr/libexec/mc/mc-wrapper.sh'
alias vi='vim'
alias vim='vim -c "colorscheme desert" '
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-
alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
-
添加自定义别名
:可以在
~/.bashrc文件中添加新的别名,使其在重启和注销/登录后仍然有效。若要使别名对所有用户可用,可将其添加到/etc/profile.d目录下的自定义文件中。
# 在 ~/.bashrc 中添加别名
alias newalias='long command'
6. 配置文件执行顺序总结
为了更清晰地展示配置文件的执行顺序,我们可以用 mermaid 流程图表示:
graph TD;
A[启动登录外壳] --> B[/etc/profile];
B --> C[~/.bash_profile];
C --> D[~/.bashrc];
D --> E[/etc/bashrc];
在启动登录外壳时,Bash 会按照
/etc/profile
->
~/.bash_profile
->
~/.bashrc
->
/etc/bashrc
的顺序执行配置文件。理解这个顺序对于正确配置 Bash 外壳环境非常重要。
7. 练习
为了巩固所学知识,以下是一些相关练习:
1. 解释外壳变量和环境变量的区别,并说明这种区别的重要性。
2. 启动非登录 Bash 外壳时,哪个配置文件首先运行?
3. 非特权用户能否设置或更改自己的外壳变量?
4. 桌面上新启动的外壳首先执行哪个配置文件?
5. 查看当前桌面上每个打开终端会话中
COLUMNS
变量的值,若值无差异,调整一个或多个终端窗口大小后再次检查,思考该变量的用途。
6. 使用虚拟控制台登录时,外壳配置文件的执行顺序是怎样的?
7. 为什么理解 Bash 配置文件的执行顺序很重要?
8. 为学生用户添加一个别名,用于以不同的颜色方案启动 Vim 编辑器。颜色方案和说明文件位于
/usr/share/vim/vim81/colors
目录下,尝试几种不同的颜色方案并通过打开一个 Bash 配置文件进行测试。
9. 上述别名添加在哪个文件中?
10. 使用
su
命令切换到 root 用户时,Bash 配置文件的执行顺序是怎样的?
11. 使用
sudo
命令时,Bash 配置文件的执行顺序是怎样的?
12. 若要添加一个环境变量,使其成为所有用户环境的一部分,应在哪个文件中添加?
13. 系统启动进入恢复模式时,哪些外壳配置文件会被执行?
通过完成这些练习,你将对 Bash 外壳的配置和环境变量有更深入的理解。
Bash Shell 配置与环境变量全解析
8. 别名的实际应用与注意事项
在实际使用中,别名可以极大地提高工作效率。例如,对于经常使用的复杂命令,通过设置别名可以减少输入错误和节省时间。以下是一些别名的实际应用场景和注意事项:
-
提高命令执行效率
:以
ll别名为例,它将ls -l --color=auto这个较长的命令简化为ll。每次使用ll时,实际上执行的是完整的命令,这样就避免了每次都输入长命令的麻烦。
# 使用 ll 别名查看目录详细信息
[student@testvm1 ~]$ ll
total 12
drwxr-xr-x. 2 student student 4096 Nov 24 11:20 Desktop
drwxr-xr-x. 2 student student 4096 Nov 24 11:20 Documents
drwxr-xr-x. 2 student student 4096 Nov 24 11:20 Downloads
-
避免命令冲突
:在设置别名时,要注意避免与系统命令或其他别名冲突。例如,不要将
ls别名设置为一个与系统ls命令功能完全不同的命令,否则可能会导致混淆和错误。 -
永久保存别名
:为了使别名在重启和注销/登录后仍然有效,可以将别名添加到
~/.bashrc文件中。添加后,使用source ~/.bashrc命令使更改立即生效。
# 在 ~/.bashrc 中添加别名
alias newalias='long command'
# 使更改立即生效
[student@testvm1 ~]$ source ~/.bashrc
9. 环境变量的高级应用
除了基本的查看和设置环境变量外,环境变量还有一些高级应用场景。
-
脚本中的环境变量
:在编写脚本时,可以使用环境变量来传递参数和配置信息。例如,在一个备份脚本中,可以使用
BACKUP_DIR环境变量指定备份文件的存储目录。
#!/bin/bash
# 获取备份目录环境变量
BACKUP_DIR=$BACKUP_DIR
# 检查环境变量是否设置
if [ -z "$BACKUP_DIR" ]; then
echo "BACKUP_DIR environment variable is not set."
exit 1
fi
# 执行备份操作
cp -r /path/to/source $BACKUP_DIR
-
动态配置应用程序
:一些应用程序可以根据环境变量进行动态配置。例如,在开发环境中,可以设置
DEBUG环境变量为true来开启调试模式。
# 设置 DEBUG 环境变量
export DEBUG=true
# 启动应用程序
./myapp
10. 配置文件的安全性考虑
在修改配置文件时,需要考虑安全性问题,避免因错误的配置导致系统不稳定或安全漏洞。
-
避免直接修改全局配置文件
:如前文所述,不建议直接修改
/etc/profile和/etc/bashrc等全局配置文件。因为这些文件的修改可能会影响到所有用户,并且在系统更新时可能会导致配置丢失或冲突。建议使用/etc/profile.d目录下的自定义文件进行配置。 -
权限管理
:确保配置文件的权限设置正确。例如,
~/.bashrc和~/.bash_profile等用户配置文件应该只有用户本人可以读写,避免其他用户篡改配置。
# 设置 ~/.bashrc 文件的权限
chmod 600 ~/.bashrc
11. 总结
本文详细介绍了 Bash 外壳的配置和环境变量的相关知识,包括全局和本地配置文件、环境变量的探索和操作、别名的使用以及配置文件的执行顺序等内容。通过实际操作和练习,我们可以更好地理解和掌握这些知识,从而提高在 Linux 系统中的工作效率。
为了方便大家回顾,以下是一个关键知识点的表格总结:
| 知识点 | 描述 |
| — | — |
| 全局配置文件 |
/etc/bashrc
用于设置系统范围的函数和别名,不建议直接修改,可在
/etc/profile.d
目录下添加自定义文件 |
| 本地配置文件 |
~/.bash_profile
和
~/.bashrc
位于用户主目录,用于用户自定义配置 |
| 环境变量 | 影响外壳行为,可通过
printenv
查看,永久更改需在配置文件中进行,临时更改可通过命令行实现 |
| 用户外壳变量 | 仅对当前外壳及其子进程可用,使用
export
命令使其对新启动的外壳可用 |
| 别名 | 减少输入工作量,可通过
alias
命令查看和设置,可添加到
~/.bashrc
或
/etc/profile.d
中使其永久生效 |
| 配置文件执行顺序 | 启动登录外壳时,顺序为
/etc/profile
->
~/.bash_profile
->
~/.bashrc
->
/etc/bashrc
|
12. 进一步学习建议
如果你想深入学习 Bash 外壳的配置和环境变量,可以参考以下资源:
-
在线文档
:Linux 官方文档和相关技术博客提供了丰富的信息和示例。
-
书籍
:《Linux 命令行与 Shell 脚本编程大全》等书籍详细介绍了 Linux 系统的各种操作和编程技巧。
-
实践项目
:通过实际项目来应用所学知识,加深理解和掌握。
希望本文对你有所帮助,祝你在 Linux 系统中取得更好的工作效率!
Bash Shell 配置与环境变量详解
超级会员免费看
7万+

被折叠的 条评论
为什么被折叠?



