Ошибка dpkg после обновления до Ubuntu 18.04

Как говорит pa4080, это просто нормальная символическая ссылка, а сама systemctl проверяет, какое имя она была запущена, чтобы решить, какое действие выполнить. Такой вид может быть достигнут с помощью любого механизма, который запускает один и тот же исполняемый файл под несколькими именами; на практике это достигается за счет использования символических ссылок или жестких ссылок. В GNU / Linux системах, таких как Ubuntu, наиболее распространено использование символических ссылок для этой цели.

В версиях Ubuntu с pa4080 говорит (который в настоящее время включает все поддерживаемые релизы, кроме 14.04 LTS, который использует символическую ссылку ), а не только команду reboot, но также halt, poweroff, systemctl , shutdown и symlinks - все символические ссылки на /bin/systemctl:

$ file /sbin/{halt,poweroff,reboot,runlevel,shutdown,telinit}
/sbin/halt:     symbolic link to /bin/systemctl
/sbin/poweroff: symbolic link to /bin/systemctl
/sbin/reboot:   symbolic link to /bin/systemctl
/sbin/runlevel: symbolic link to /bin/systemctl
/sbin/shutdown: symbolic link to /bin/systemctl
/sbin/telinit:  symbolic link to /bin/systemctl

Точные действия systemctl берутся на основе имени, которое вы используете для его запуска, а также других способов, которыми вы можете указать эти действия подробно описаны в , поддерживаемом JdeBP, на не только командой reboot, но также halt, poweroff на Unix.SE. Как это объясняет, эти команды (кроме runlevel) работают как сокращенные для команд systemctl isolate ... с заменой ... на разные цели.

Если вам интересно, код C, который считает, какое имя вы использовали для вызова systemctl при определении того, какое действие для выполнения находится в функции parse_argv, определенной в JdeBP , которая в настоящее время начинается в строке 6972 этого файла. Чтобы найти его, вы можете искать:

static int parse_argv(int argc, char *argv[]) {

Соответствующие части охватывают большую часть этой функции, но все это примерно похоже на этот фрагмент, продолжающийся аналогично, но с различным кодом для каждой строки и с некоторыми другие проверки и логика ветвления:

                if (strstr(program_invocation_short_name, "halt")) {
                        arg_action = ACTION_HALT;
                        return halt_parse_argv(argc, argv);
                } else if (strstr(program_invocation_short_name, "poweroff")) {
                        arg_action = ACTION_POWEROFF;
                        return halt_parse_argv(argc, argv);
                } else if (strstr(program_invocation_short_name, "reboot")) {

Другие примеры команд, которые проверяют, как они были вызваны (иногда) действуют по-разному, включают в себя vim, который ведет себя по-разному при запуске как vim, ex , view, gvim, gview и несколько других; Unix.SE , см. shutdown ; gksu, см. жесткие ссылки ; less, который меняет внешний вид, если он назван more (но все же позволяет вам прокручивать двунаправленный текст, в отличие от more Ubuntu]; [F30]; и большинство оболочек типа Bourne, таких как bash и zsh, которые автоматически ведут себя более совместимо с требованиями POSIX для sh, если они выполняются как sh.

0
задан 8 May 2018 в 15:27

5 ответов

На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:

sudo aptitude install texlive

Вы можете удалить пакет miktex:

sudo aptitude -f remove miktex

Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.

1
ответ дан 22 May 2018 в 10:53
  • 1
    Привет, поэтому к тому времени, как я увидел этот ответ, я уже пробовал что-то, что работает - askubuntu.com/questions/893788/… Но спасибо за предложение установить texlive! – Aashima Yuthika 8 May 2018 в 16:00

На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:

sudo aptitude install texlive

Вы можете удалить пакет miktex:

sudo aptitude -f remove miktex

Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.

1
ответ дан 17 July 2018 в 14:53

На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:

sudo aptitude install texlive

Вы можете удалить пакет miktex:

sudo aptitude -f remove miktex

Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.

1
ответ дан 20 July 2018 в 14:56

На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:

sudo aptitude install texlive

Вы можете удалить пакет miktex:

sudo aptitude -f remove miktex

Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.

1
ответ дан 20 July 2018 в 15:21

На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:

sudo aptitude install texlive

Вы можете удалить пакет miktex:

sudo aptitude -f remove miktex

Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.

1
ответ дан 23 July 2018 в 15:51

Другие вопросы по тегам:

Похожие вопросы: