Как говорит 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.
На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:
sudo aptitude install texlive
Вы можете удалить пакет miktex:
sudo aptitude -f remove miktex
Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.
На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:
sudo aptitude install texlive
Вы можете удалить пакет miktex:
sudo aptitude -f remove miktex
Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.
На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:
sudo aptitude install texlive
Вы можете удалить пакет miktex:
sudo aptitude -f remove miktex
Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.
На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:
sudo aptitude install texlive
Вы можете удалить пакет miktex:
sudo aptitude -f remove miktex
Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.
На данный момент, кажется, miktex еще не обновлен для работы с Ubuntu 18.04. Вместо этого я рекомендую использовать texlive:
sudo aptitude install texlive
Вы можете удалить пакет miktex:
sudo aptitude -f remove miktex
Однако полное удаление miktex сложнее, потому что пакет просто установщик. Если вы установили его в своем домашнем каталоге, просмотрите ~/bin для остатков. В противном случае загляните в /usr/local/bin.