Когда я делаю su -
чтобы получить root, мой текущий каталог настроен на root's home. Есть ли способ сохранить текущий каталог, в котором я был, как и sudo -s
. Или ответ использовать sudo?
Всегда лучше использовать sudo, если это возможно, потому что тогда вам не нужно знать (или давать кому-то) пароль root. Установите пароль root на что-нибудь длинное и ужасное, а затем заприте его в сейфе.
Если вы хотите запретить кому-либо доступ позже, вы просто откажетесь от доступа к sudo, вместо того, чтобы учить всех остальных новому паролю root.
Однако вам не нужно использовать параметр '-', если вы не хотите. Вы получите оболочку как root, она просто не будет оболочка входа (поэтому он не будет запускать корневой профиль.)
Я согласен с тем, что sudo почти всегда лучший ответ, но чтобы ответить на другую часть вопроса ...
'-' в 'su -' указывает, что вы хотите имитировать вход в систему суперпользователя, а не просто запускать с привилегиями суперпользователя.
Если вы используете обычную «su», а не «su -», вы останетесь в том же каталоге; однако вы также будете работать в той же среде, поэтому может потребоваться изменить свой путь для доступа к некоторым командам администратора.
Если вы используете su
без -
, он должен держать вас в вашем текущем каталоге. -
, -l
или --login
скажи su:
Обеспечьте среду, аналогичную той, которую пользователь ожидал бы, если бы пользователь вошел в систему напрямую.
Или просто используйте sudo, у него много других преимуществ. Или ssh-ключи.
Вам обязательно стоит использовать sudo.
вс -м
-m (-p): не сбрасывать переменные среды (обычно не рекомендуется)
Это сохранит вас в папке, когда вы перейдете на root.
Если вы действительно хотите использовать su
, есть способ оставаться в том же каталоге.
su - <user> -c "cd `pwd`; bash"
Что тут происходит:
su - <user>
= войти как -c
что означает "запустить команду в новой оболочке-c "cd `pwd`"
команда, которую мы даем, - это переключиться на текущий каталог (pwd
) - но поскольку мы используем обратные кавычки, pwd
оценивается перед запуском su
, чтобы мы фактически переключились в каталог, в котором мы СЕЙЧАС в качестве старого пользователя. Единственная проблема здесь в том, что новая оболочка закрывается сразу после выполнения команды, поэтому мы добавляем:-c "cd `pwd`; bash"
что означает "беги bash
(новая оболочка) после запуска cd
команда, а оболочка bash не завершится, пока мы не выйдем из нее.Используйте sudo :). Серьезно, su вам не нужно. «sudo» лучше, поскольку вы используете его только для привилегированных команд и может помочь избежать ошибок. Вы также получаете ответственность.
Если вы используете «su», это интерактивная оболочка. Это то же самое, что и "sudo -s". «su -» создает оболочку входа в систему, которая переопределит среду. "sudo -i" эквивалентен sudo. Если вы пытаетесь получить интерактивную оболочку, вы всегда должны использовать форму sudo -i (или su -), в противном случае можно получить странные права доступа к файлам в домашнем каталоге пользователя.
вы должны изменить источник su, чтобы выполнить эту работу. в процедуре инициализации переменных окружения есть вызов chdir. прокомментируйте эти заявления, включенные в этот звонок. и теперь вы можете выполнить «su -», но сохранить текущий каталог.