我刚刚安装了一个全新的debian buster:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ cat /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
[...]
$ whoami
zozo
$ su
Password:
# id -u
0
# printenv | grep -i ^path
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果我以root身份运行:
# grep -i path /etc/profile.d/*
没有输出# grep -i path ~/.profile
没有输出# grep -i path ~/.bashrc
没有输出在Debian系统上没有,~/.bash_profile
也没有~/.bash_login
vi ~/.profile
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
但是问题仍然存在:
Ctrl+D返回普通用户
然后
$ su
password:
# printenv | grep -i ^path
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
因此,我进行了一些搜索:6.2 Bash启动文件
然后
if [ -z "$PS1" ];then echo NOT interactive shell ;else echo INteractive shell ;fi
INteractive shell
它说:
当Bash作为交互式登录外壳被调用时,它首先读取并执行/ etc / profile [...]。在[...]之后,它会寻找[/]〜/ .profile ...
所以我想知道为什么它不能PATH
从~/.profile
(~/.profile
不被调用/加载)加载。当然,如果我将其放入~/.bashrc
,它会起作用。
因此,最后,默认情况下,没有基本命令(如关机或重新启动)的路径。
此外,我意识到存在诸如之类的工具systemctl
,本质上是一个管理命令,/usr/bin
而不是/sbin
或/usr/sbin
(以及许多其他管理命令,如getfacl
,setfacl
...,但这是另一个问题)。
我应该在这里错过一些东西。
只有登录shell读取/etc/profile
和~/.profile
。
您可以通过致电进行检查echo $0
。
如果输出以减号(例如-bosh
)开头,则为登录shell。
因此,一个好主意是注销并在更改后再次登录 /etc/profile
文件喜欢/etc/sh.shrc
,/etc/bash.bashrc
或者他们在$ HOME同行被读取任何交互的shell,不仅登录shell。
由于您的外壳不是登录外壳,因此您应该尝试找出发生这种情况的原因。如果您通过ssh
或从文本控制台登录,而您的外壳未标记为登录外壳,则绝对应针对发行版进行错误报告。
正确的X11环境,开始与新创建的shell窗口所有shellargv[0]
开头-
,为此,这种贝壳自认作为登录shell。如果您没有遇到这种情况,则您的X11环境可能已损坏。
如果您使用启动超级用户会话su
,则这绝对不会启动登录shell。如果您希望这样的外壳表现得像登录外壳一样,请调用:
su -
你有尝试过吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句