su по сравнению с su - (на Debian): почему ПУТЬ является тем же?

Это находится на Linux?

Существует на самом деле несколько тонко различных версий названия команды, которые используются ps, killall, и т.д.

Два основных варианта: 1) длинное название команды, которое является тем, что Вы получаете, когда Вы работаете ps u; и 2) короткое название команды, которое является тем, что Вы получаете, когда Вы работаете ps без любых флагов.

Вероятно, самое большое различие происходит, если Ваша программа является сценарием оболочки или чем-нибудь, что требует интерпретатора, например, Python, Java, и т.д.

Вот действительно тривиальный сценарий, который демонстрирует различие. Я назвал его mycat:

#!/bin/sh
cat

После выполнения его вот два различных типов ps.

Во-первых, без u:

$ ps -p 5290
  PID TTY      ... CMD
 5290 pts/6    ... mycat

Во-вторых, с u:

$ ps u 5290
USER       PID ... COMMAND
mikel     5290 ... /bin/sh /home/mikel/bin/mycat

Отметьте, как вторая версия запускается с /bin/sh?

Теперь, насколько я могу сказать, killall на самом деле чтения /proc/<pid>/stat, и захватывает второе слово, промежуточное parens как название команды, таким образом, это действительно, что необходимо указывать, когда Вы работаете killall. Логически, это должно совпасть со что ps без u флаг говорит, но это была бы хорошая идея проверить.

Вещи проверить:

  1. что делает cat /proc/<pid>/stat скажите, что название команды?
  2. что делает ps -e | grep db2 скажите, что название команды?
  3. сделать ps -e | grep db2 и ps au | grep db2 показать то же название команды?

Примечания

Если Вы используете другие флаги PS также, то Вы могли бы найти более простым использовать ps -o comm видеть краткое название и ps -o cmd видеть длинное имя.

Вы также могли бы найти pkill лучшая альтернатива. В частности, pkill -f попытки соответствовать использованию полного названия команды, т.е. названия команды, как распечатано ps u или ps -o cmd.

4
06.03.2016, 02:34
2 ответа

Для конфигурирования su PATH, взгляните на /etc/login.defs:

ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

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

  • /etc/environment
  • /etc/bash.bashrc
  • /etc/profile
  • /etc/profile.d/*
  • ~/.bashrc
  • ~/.bash_profile

Без чего-либо специального в настройках в расчете на пользователя, su кажется, получает PATH от /etc/environment и su - кажется, получает его среду от /etc/login.defs ENV_SUPATH.

Таким образом в Вашей системе, мое предположение - то, что у Вас есть то же PATH значение в /etc/login.defs как в /etc/environment, или у Вас есть некоторая дополнительная конфигурация в /etc/profile.d, /etc/bash.bashrc, или некоторый емкостно-резистивный файл в /home/someuser.

5
27.01.2020, 20:49

Параметр - стартовая среда средств, которая является почти тем же как со средой входа в систему для того пользователя.

Без - среда - то же как среда исходного пользователя.

Например, PATH обычно то же для пользователей root и обычных пользователей. В некоторых системах существует нет sbin папки для обычных пользователей. Вы не можете отключить - от su легко. Конечно, можно пойти для редактирования исходного кода.

Можно попробовать это путем выполнения

export FOO=bar
su # enter your password
echo $FOO
logout
su - # enter your password again
echo $FOO

В первый раз echo $FOO печать "запрещает", и во втором разе это пусто.

4
27.01.2020, 20:49

Теги

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