path修改

修改默认path路径避免找不到命令的错误

问题描述

debian 12 默认的 PATH 路径有点少:

$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games

很多常见的命令都会因为不包含在 PATH 中而无法使用,报错 “command not found”:

$ usermod -aG sudo sky bash: usermod: command not found

打开 /etc/profile 文件看到:

if [ "$(id -u)" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" fi export PATH

看上去像是没有自动 source /etc/profile,比如我用 su 到 root 账号后执行 source,那就正常的得到上面的 PATH:

$ su root Password: $ id uid=0(root) gid=0(root) groups=0(root) $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games $ source /etc/profile $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

普通账号的修复

对于普通账号,比如我安装时建立的 sky 账号,只要简单在 .zshrc 中加入:

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH=$HOME/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

重新登录 sky 账号,验证即可:

$ echo $PATH /home/sky/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

这个需要先安装 zsh 和 oh-my-zsh,bash 应该类似,只是我目前基本只用 zsh。

root 账号的修复

貌似没有找到解决不自动 source /etc/profile 的办法,所以只能手工执行

source /etc/profile

来解决。或者,类似 sky 账号那样,安装 zsh 和 oh-my-zsh,但发现 root 账号不能改成默认使用 zsh,只能在 su 到 root 账号之后,手工执行 zsh 来从 bash 换到 zsh。