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

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

% 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 для создания двоичного файла, он это делает?
  • «Незаконная инструкция» на статическом бинарном MIPS
  • О исполняемых файлах в Linux
  • Можно ли вызвать функции исполняемого файла?
  • Ограничить доступ приложений к определенным ресурсам
  • Как определить, существует ли внешняя команда в сценарии?
  • ld-uClibc.so отсутствует
  • Нет такого файла или каталога, но я могу это увидеть!
  • ls colors: почему некоторые из моих шрифтов черные, а другие - зеленые на выходе ls
  • разрешение и пользователь / группа программы, выполняемой через скрипт
  • Почему этот исполняемый файл все еще выполняется после того, как я удалил его?
  • Какой пользователь выполняет сценарий / приложение Linux как?
  • Interesting Posts

    Как проверить файл с числовым именем и, если он существует, скопировать его с новым именем, используя следующий порядковый номер

    Преобразование кадров PNG в видео на 1 FPS

    Запустить второй X-сервер из X в качестве службы systemd

    wpa_supplicant / WiFi Direct: команда wpa_cli p2p_find возвращает FAIL

    У CentS-7 Kernel Image есть суффикс «debug» после установки Kickstart

    запись модуля ядра USB-нюхания

    Как назначить вывод команды переменной без запуска команды в подоболочке?

    Команда подстановки Stat для захвата разрешений на числовые файлы в Solaris 10

    Как установить easy_install с помощью интерпретатора Python, отличного от параметров по умолчанию, на CentOS?

    Как связать папку для создания ярлыка

    чтение / dev / ttyUSB0

    Действительно ли AIX избили Red Hat Enterprise Linux?

    Как переименовать несколько файлов, заменив строку в имени файла?

    Команда «повторно применить» предыдущую команду?

    Bash работает с несколькими программами и закрывается

    Linux и Unix - лучшая ОС в мире.