Debian:所有命令都以 root 用户身份执行。

Debian:所有命令都以 root 用户身份执行。

所以今天我登录到我的根服务器,首先看到的是:

-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

相关内容