![Debian:所有命令都以 root 用户身份执行。](https://linux22.com/image/1333944/Debian%EF%BC%9A%E6%89%80%E6%9C%89%E5%91%BD%E4%BB%A4%E9%83%BD%E4%BB%A5%20root%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E6%89%A7%E8%A1%8C%E3%80%82.png)
所以今天我登录到我的根服务器,首先看到的是:
-bash: id: command not found
-bash: [: : integer expression expected
我切换到 root 并尝试运行 nano,但没有成功。经过一番研究,我发现除了最基本的命令外,所有命令都消失了。我最后做的是向 /etc/profile 和 /etc/environment 添加了一些行。我还向 /usr/lib/grails 或类似的东西添加了一个符号链接。但我没有立即注意到任何效果。顺便说一句,作为普通用户,我仍然拥有所有命令。
答案1
首先确保你做了如下事情:
export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
能够执行任何操作。
接下来确保修复您的/etc/profile
文件,因为其中似乎有一个语法错误...该错误表明它是一个if
或另一个涉及[
运算符的表达式。
您的似乎/usr/bin/id
丢失了。它是否位于另一个未安装、已安装noexec
或类似的分区上?
对于稍后发现此问题的人:事实证明,之后的/etc/environment
格式不正确(未包含所有需要的行),因此bash
之前读取的环境/etc/profile
已经损坏。来自man ssh
:
/etc/environment
This file is read into the environment at login (if
it exists). It can only contain empty lines, com-
ment lines (that start with '#'), and assignment
lines of the form name=value. This file is pro-
cessed in all environments (normal rsh/rlogin only
process it on AIX and potentially some other sys-
tems). The file should be writable only by root,
and should be world-readable.
在 Debian (6.0.6) 上这是我的默认设置/etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
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/games"
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
export PATH
umask 022
答案2
env
由于指向 Java 安装的变量为空,因此我无法运行 ant 脚本。
我跑了:
source /etc/profile
然后它就不再是空的了,所以可能/etc/profile
没有正常运行?你试过这个吗?(不,我不是专家,但有时我会很幸运……:-)
答案3
我在 Debian jessie (8.0) 上遇到了同样的问题。
/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
因此,这些行设置了路径,但它们首先使用“id”命令,由于尚未设置 PATH,因此无法找到该命令!
只需在第一行指定 id 的绝对路径:
if [ "`/usr/bin/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