Итак, сегодня я вошел на свой корневой сервер, и первое, что приветствует меня, это:

-bash: id: command not found
-bash: [: : integer expression expected

Я переключился на root и попытался запустить nano, но безуспешно. После некоторых исследований я обнаружил, что все команды пропали, кроме самых основных. Последнее, что я сделал, это добавил несколько строк в /etc /profile и /etc /environment. И я добавил символическую ссылку на /usr /lib /grails или что-то в этом роде. Но я не заметил никакого эффекта сразу. Как обычный пользователь, я все еще имею все команды между прочим.

3 ответа3

3

Сначала убедитесь, что вы делаете что-то вроде:

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
0

Мне не удалось запустить ant-скрипт, так как переменная env указывающая на установку Java, оказалась пустой.

Я побежал:

source /etc/profile

и тогда он больше не был пустым, поэтому, возможно, файл /etc/profile работает неправильно? Вы пробовали это? (Нет, я не эксперт, но иногда мне везет ... :-)

0

Я столкнулся с той же проблемой в Debian jessie (8.0).

Профиль /etc / начинается со следующего:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .