Почему некоторые символические ссылки влияют на поведение программы?

Одна вещь, которая несколько раз озадачивала меня:

% which halt /sbin/halt % file /sbin/halt /sbin/halt: symbolic link to `reboot' 

Однако выполнение sudo halt , конечно же, не перезагружает систему. Почему это?

Есть несколько других программ, работающих таким образом, например pdflatex .

One Solution collect form web for “Почему некоторые символические ссылки влияют на поведение программы?”

Каждая программа может видеть полную командную строку, которая использовалась для ее запуска (за исключением подстановочных знаков и переменных, которые оболочка расширяет).

В программе C командная строка хранится в argv , что является коротким для вектора аргументов .
Имя прогеймы – это первый элемент argv , то есть argv[0] .

Очевидно, что в случае halt и reboot программа меняет свое поведение на основе argv[0] .

Из bash вы можете увидеть полную командную строку, используемую для запуска программы, используя ps -p <pid> -o cmd или cat /proc/<pid>/cmdline .

Обратите внимание, что есть другой тип ссылки, называемый жесткой ссылкой, которая будет иметь тот же эффект. Например, в моей системе sudo и sudoedit – это один и тот же файл с двумя разными именами и разными sudoedit поведения.

ls -i может помочь вам найти эти команды, например:

 $ ls -il | awk '$3 != 1 { print }' total 156872 2491111 -rwsr-xr-x 2 root root 127560 2011-01-20 05:03 sudo 2491111 -rwsr-xr-x 2 root root 127560 2011-01-20 05:03 sudoedit 

См. man ln для получения дополнительной информации о жестких ссылках, если вы не знакомы с ними.

  • Почему это, когда я загружаю двоичный файл из Интернета, у него нет установленных разрешений, но когда я использую gcc для создания двоичного файла, он это делает?
  • Пример setuid из Википедии: 4700
  • разрешение и пользователь / группа программы, выполняемой через скрипт
  • Почему этот исполняемый файл все еще выполняется после того, как я удалил его?
  • Ограничить доступ приложений к определенным ресурсам
  • Можно ли вызвать функции исполняемого файла?
  • binary может запускаться только при запуске после создания символической ссылки на него
  • Bash выполняет другой файл из запросившегося, даже если он предоставляет полный путь
  • Выполнить на месте зашифрованный привод ПЗУ
  • Загрузка разделяемых библиотек и использование ОЗУ
  • Нет такого файла или каталога, но я могу это увидеть!
  • Linux и Unix - лучшая ОС в мире.