Linux配置PATH与用户环境变量

安装文件存在却提示command not found,可能是程序目录没有进入PATH;但环境变量也可能只在当前终端生效。本篇为当前用户添加自己的命令目录,不改全系统PATH,也不把密码写进启动文件。

确认当前Shell和命令查找结果

printf '%s\n' "$SHELL"
ps -p $$ -o comm=
printf '%s\n' "$PATH"
command -v baole-path-check

$SHELL通常记录账号默认Shell,ps用于确认当前进程;当前不是Bash时,应按对应Shell规则配置。PATH是一组以冒号分隔的目录,按顺序查找命令;不要用一个新目录覆盖原有内容,也不要为方便把当前目录“.”或任意可写公共目录放到前面。

用自己的测试命令验证临时设置

先确认以下示例文件名未被使用;已存在则换一个新名字,不覆盖原程序。创建目录后用nano写入示例脚本:

mkdir -p "$HOME/.local/bin"
nano "$HOME/.local/bin/baole-path-check"
#!/bin/sh
printf 'baole-path-ok\n'
chmod u+x "$HOME/.local/bin/baole-path-check"
export PATH="$HOME/.local/bin:$PATH"
command -v baole-path-check
baole-path-check

应找到自己家目录下的完整命令路径,并输出baole-path-ok。export只改变当前Shell及其后续子进程,不会自动改变已经运行的其他进程;退出后重新登录可能恢复原值。

放进正确的用户启动文件

Bash交互式登录会话依次查找 ~/.bash_profile、~/.bash_login、~/.profile,只读取第一个存在且可读的文件。交互式非登录会话通常读取 ~/.bashrc。先查看现有文件与既有调用关系,不为了照教程新建一个.bash_profile而遮住原来的.profile。

在实际使用的登录配置文件中,保留原内容并加入一次以下片段;没有该目录时不添加,已经包含时也不重复:

if [ -d "$HOME/.local/bin" ]; then
  case ":$PATH:" in
    *":$HOME/.local/bin:"*) ;;
    *) export PATH="$HOME/.local/bin:$PATH" ;;
  esac
fi

新登录验证,失败可撤销

保存修改前副本,先用 bash -n 实际配置文件 检查语法,然后保留原终端,另外建立一个SSH登录。新会话重新执行command -v与测试命令,确认结果;若失败,检查读取了哪个启动文件及脚本是否有执行权限,不不断把同一行追加到所有文件。

需要撤销时恢复本次改动的原文件或移除新增片段,再开新会话验证。不要把整个PATH清空“重置”。服务和cron有各自环境,不依赖SSH登录文件;为它们配置变量时应使用对应管理方式。密钥、数据库口令等不适合写进人人可读的profile或命令行历史。