Что касается сломанных пакетов, попробуйте установить тот же пакет с aptitude. он будет сдаваться менее легко и попытается найти решения, которые могут включать изменение других пакетов. Вы также можете получить список удерживаемых пакетов с dpkg --get-selections | grep hold, что может показать вам проблему.
В противном случае, возможно, попробуйте установить openjdk и jre:
Выполнение функции apt-cache search jdk или apt-cache search jre перечисляет множество пакетов, которые могут вас заинтересовать. Для установки открытых JDK и JRE вы должны использовать sudo apt-get install openjdk-7-jdk openjdk-7-jre-headless, вы можете заменить 7 на 6 или 8, если вы предпочитаете openjdk 6 или 8
EDIT: Исправлена команда apt-get, спасибо @lesslazy
Пользователь root не должен называться «root». whoami
возвращает первое имя пользователя с идентификатором пользователя 0
. $ USER
содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0
, но имеет другое имя.
Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:
id -u
Я использую -u
для эффективный идентификатор пользователя, а не -r
для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .
/ etc / passwd
содержит следующие имена пользователей с идентификатором пользователя 0
в данном порядке:
rootx root2
Записан как root2
, дает следующие результаты:
whoami
: rootx
echo $ USER
: root2
(это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER'
) id -u
: 0
Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u
. Обновленный скрипт будет выглядеть так:
#! / bin / bash if! [$ (id -u) = 0]; затем эхо «Я не корень!» выход 1 fi
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
#! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:
#! / Bin / bash if! [$ (id -u) = 0]; затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например. (переключить процессор Intel в режим энергосбережения): echo 1 & gt; / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave
Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.
gksudo
может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu
. [ ! d5]
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
#! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:
#! / Bin / bash if! [$ (id -u) = 0]; затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например. (переключить процессор Intel в режим энергосбережения): echo 1 & gt; / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave
Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.
gksudo
может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu
. [ ! d5]
Пользователь root не должен называться «root». whoami
возвращает первое имя пользователя с идентификатором пользователя 0
. $ USER
содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0
, но имеет другое имя.
Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:
id -u
Я использую -u
для эффективный идентификатор пользователя, а не -r
для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .
/ etc / passwd
содержит следующие имена пользователей с идентификатором пользователя 0
в данном порядке:
rootx root2
Записан как root2
, дает следующие результаты:
whoami
: rootx
echo $ USER
: root2
(это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER'
) id -u
: 0
Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u
. Обновленный скрипт будет выглядеть так:
#! / bin / bash if! [$ (id -u) = 0]; затем эхо «Я не корень!» выход 1 fi
sh
( dash
) в качестве интерпретатора вместо bash
. Но хороший выстрел, спасает еще одну вилку :)
– Lekensteyn
13 March 2011 в 14:34
[-w /]
. Идея остается прежней. Примечание: в некоторых элементах chroot [-w / etc / shadow]
не будет работать, потому что / etc / shadow
не существует, поэтому подход с /
. Лучше бы проверить фактическую потребность в корневых разрешениях. Если сценарий должен записываться в / etc / someconfig
, просто проверьте, доступен ли этот файл для записи, или файл не существует, и / etc
доступен для записи.
– Lekensteyn
15 March 2011 в 02:47
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
$ USER
, особенно таким образом. $ USER
задается оболочкой входа, она не обязательно распространяется на программу ( env -i sh -c 'echo $ USER'
). Таким образом, $ USER
пуст и возникает синтаксическая ошибка.
– Lekensteyn
13 March 2011 в 13:26
$ USER
, заданный оболочкой, но и то, что легко подделать. Whoami вернет фактического пользователя.
– Paul de Vrieze
13 March 2011 в 15:48
Этот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Как @Lekensteyn сказал , вы должны использовать эффективный идентификатор пользователя. Вам не нужно вызывать id -u
в bash:
#! / Bin / bash, если [[$ EUID -ne 0]]; затем эхо «Вы должны быть root, чтобы сделать это». 1 & gt; 2 выход 100 fi
Предложение @ geirha из комментариев использует арифметическую оценку:
#! / Bin / bash if ((EUID! = 0)); затем эхо «Вы должны быть root, чтобы сделать это». 1 & gt; 2 выход 100 fi
((..))
, а [[..]]
для тестирования строк и файлов, поэтому я сделал бы если ((EUID! = 0)); тогда вместо
или просто , если ((EUID)); то
– geirha
13 March 2011 в 16:41
EUID
должен стать $ EUID
. Вместо (($ EUID! = 0))
используйте [$ EUID! = 0]
. Он также будет работать с тире
.
– Lekensteyn
13 March 2011 в 17:23
EUID
работает отлично. Вопрос помечен тегом bash
не тире
. Команда env -i sh -c '[$ EUID! = 0]'
терпит неудачу, но env -i bash -c '((EUID! = 0))'
работает. btw, dash
не работает для некоторых символов не-ascii на Ubuntu stackoverflow.com/questions/5160125/… Это 2011 год, и есть люди, которые используют другие языки ,
– jfs
13 March 2011 в 17:39
$ EUID
с этого момента. В результате я принял принятый ответ.
– Thomas Ward♦
3 August 2011 в 20:15