Unix / Linux - 环境
Unix / Linux - Shell 环境
Section titled “Unix / Linux - Shell 环境”Shell 环境包含定义命令行会话行为和上下文的设置和变量。理解和自定义此环境是高效使用类 Unix 系统的关键。
Shell 变量与环境变量
Section titled “Shell 变量与环境变量”变量存储数据(文本、数字、路径)并使用名称引用。
- **Shell 变量:**仅存在于当前的 shell 会话中。它们不会传递给从该 shell 启动的程序。
- **环境变量:**由从当前 shell 启动的子进程(程序或子 shell)继承。它们定义了更广泛的执行环境。
设置变量(语法在不同的 shell 之间略有差异,例如 bash、zsh、sh):
# 设置一个 SHELL 变量(Bourne 家族 shell 的常用语法:bash, zsh, sh)# 等号周围不能有空格!MY_VAR="Hello Shell"
# 使用 '$' 访问变量的值$ echo $MY_VARHello Shell
# 使用 'export' 将 shell 变量设置为环境变量export MY_VAR
# 或者一步到位设置并导出export EDITOR="vim"要查看当前设置的所有环境变量:
$ env# 或者$ printenv要查看特定环境变量的值:
$ echo $HOME/home/user$ printenv PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/user/binShell 初始化文件
Section titled “Shell 初始化文件”当您登录或启动新的 shell 会话时,shell 会读取配置文件来设置环境、定义别名、函数和变量。具体读取的文件取决于所使用的 shell(例如,bash、zsh)以及它是否是登录 shell 或交互式非登录 shell。
常见的配置文件包括:
- 系统范围设置:通常在
/etc/profile、/etc/bash.bashrc(对于 bash)、/etc/zsh/zshrc(对于 zsh) 中。由系统管理员管理。 - 用户特定设置(在您的家目录
~中): - **Bash:**对于 登录 shell,读取
~/.bash_profile、~/.bash_login或~/.profile(找到的第一个)。对于 交互式非登录 shell(登录后打开的大多数终端窗口),读取~/.bashrc。通常,.bash_profile会被设置为简单地加载.bashrc。 - **Zsh:**读取
~/.zshenv(总是读取)、~/.zprofile(登录)、~/.zshrc(交互式)、~/.zlogin(在zshrc之后登录)。大多数用户自定义设置放在~/.zshrc中。 - **传统 Bourne Shell (
sh):**对于登录 shell,读取/etc/profile,然后是~/.profile。
**一般实践:**将您大多数个人环境设置(PATH 修改、别名、自定义函数、提示符设置)放在 ~/.bashrc(对于 Bash)或 ~/.zshrc(对于 Zsh)中。专门在登录时需要的设置(可能很少见)放在 ~/.bash_profile 或 ~/.zprofile 中。
关键环境变量
Section titled “关键环境变量”几个标准的环境变量显著影响 shell 的行为。
一个冒号分隔的目录列表(:)。当您输入一个命令(例如,ls)时,shell 会 按顺序 在这些目录中搜索可执行文件。如果在 PATH 中的任何目录都找不到,就会出现 ‘command not found’ 错误。
$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/.local/bin:/home/user/bin将您自己的自定义脚本目录(~/scripts)添加到 PATH 中(将这行添加到您的 ~/.bashrc 或 ~/.zshrc):
export PATH="$HOME/scripts:$PATH"(前置添加确保您的脚本优先于同名系统脚本被找到。后置添加($PATH:$HOME/scripts)也很常见)。
您的家目录的绝对路径。
$ echo $HOME/home/aliceUSER / LOGNAME
Section titled “USER / LOGNAME”您的登录用户名。
$ echo $USERalice您的默认登录 shell 程序的路径。
$ echo $SHELL/bin/bash指定您正在使用的终端模拟器的类型(例如,xterm、xterm-256color、linux、screen)。程序使用此信息来确定如何正确绘制输出(例如,使用颜色、清屏)。
$ echo $TERMxterm-256color不正确的 TERM 设置可能导致像 vim 或 less 这样的程序输出乱码。
EDITOR / VISUAL
Section titled “EDITOR / VISUAL”指定其他程序将使用的默认文本编辑器(例如,git 用于提交消息,crontab -e)。VISUAL 通常优先于全屏编辑器,EDITOR 优先于行编辑器。
# 在 ~/.bashrc 或 ~/.zshrc 中设置export VISUAL="vim"export EDITOR="nano"当前工作目录。当您使用 cd 命令时,shell 会自动更新它。
$ pwd/home/alice/projects$ echo $PWD/home/alice/projectsPS1 / PS2 (提示符字符串)
Section titled “PS1 / PS2 (提示符字符串)”PS1 定义了主命令提示符字符串。它可以包含特殊转义序列来显示用户信息、主机名、当前目录、时间等信息。自定义 PS1 是个性化 shell 的常见方式。
PS2 定义了次要提示符,当 shell 期望更多输入时显示(例如,在开引号或括号之后)。
Bash/Zsh 的 PS1 设置示例(通常在 .bashrc/.zshrc 中设置):
# 显示 [用户@主机名 当前目录]$ (root 用户则显示 #)export PS1='[\u@\h \W]\$ '现代提示符通常包含颜色和 Git 分支信息,这涉及到更复杂的 PS1 设置。
其他变量,如 LANG、LC_* 控制语言和本地化设置。LD_LIBRARY_PATH 影响动态链接(谨慎使用)。
通过修改 shell 配置文件中的环境变量,您可以根据您的需求定制 Unix/Linux 命令行体验。