Linux-使用“ su-”但保留当前目录


14

当我su -进入根目录时,当前目录设置为根目录。无论如何,要保留我所在的当前目录,就像sudo -s。还是使用sudo的答案?


5
请注意,我不想听起来很粗鲁,但是为什么不能通过“ man su”解决此问题呢?
Myrrdyn

1
@Rory请阅读Myrrdyn评论
c4f4t0r 2014年

sudo su -c "zsh"在我的情况下,我喜欢使用,将我保留在当前目录中,并以root用户身份将zsh加载为shell。ctrl+d之后,您将返回到当前用户。对于目录而言,对我来说直接可以在centos上运行,但是也许在传递的命令中添加`&& cd $ {pwd)`可以解决问题。
GabLeRoux

@Myrrdyn当您知道所要查找的内容时,这些文档非常有用。如果您不这样做,请专家咨询一些建议会更快,并且更具说服力。
罗曼·文森特

Answers:


18

如果可能的话,最好使用sudo,因为这样就不需要知道(或给某人)root的密码。将root密码设置得又长又可怕,然后将其锁定在安全的地方。

如果您想以后拒绝某人访问,只需删除他们对sudo的访问,而不必教其他所有人一个新的root密码。

但是-如果您不想使用'-'参数。您将获得一个shell作为root用户,它将不是登录shell(因此它将不会运行root的.profile)。


1
就我而言,我需要别名来执行类似的操作asuser git reset --hard。但是su - <user> -m -c "git reset --hard"sudo -u <user> git reset --hard这会节省我的环境,而git会尝试读取当前用户的git config。因此,我只想声明有时使用su- <user> -c“ cd ; bash”的user205705 解决方案pwd更好。
ReFruity 2015年

16

我同意sudo几乎总是一个更好的答案,但可以回答问题的另一部分...

“ su-”中的“-”表示您要模拟超级用户登录名,而不是仅使用超级用户特权运行。

如果您使用普通的'su'而不是'su-',则将保留在同一目录中。但是,您也将在同一环境中运行,因此可能需要修改路径才能访问某些管理命令。


9

如果使用su-,它应该让你在你的当前目录。 --l--login 告诉su:

提供类似于用户直接登录用户所期望的环境。

或者只是使用sudo,它还有很多其他优点。或ssh键。


6

您绝对应该使用sudo。

su -m
-m(-p):不重置环境变量(通常不建议)

当您更改为root时,这会将您保留在该文件夹中。

使用sudo的好处


1
除了可能不重置PATH环境(可能是安全问题)以外,我看不到它本身与“ su”有什么不同。
David Pashley 2009年

例如,@ DavidPashley,它.bashrc从外部用户而不是根用户执行。
phil294

4

如果您确实想使用su,则可以使用一种方法来保留在同一目录中。

su - <user> -c "cd `pwd`; bash"

这里发生了什么:

  • su - <user> =登录为
  • -c 这意味着“在new的shell中运行命令
  • -c "cd `pwd`" 我们提供的命令是切换到当前direcotory(pwd)-但由于使用的是反引号,因此pwd在运行su命令之前先对命令进行评估,以便实际上以旧用户身份切换到现在位于目录中的目录。唯一的问题是新外壳程序在运行命令后立即退出,因此我们添加:
  • -c "cd `pwd`; bash" 这意味着“ bash在运行cd命令后运行(新外壳),并且bash外壳在我们注销之前不会退出。

1
这实际上是问题的唯一答案。做得好!
Cacahuete Frito

实际上,su - [user] -c "cd $(pwd); bash"可能会稍微好一点(将反引号更改为$())。
Cacahuete Frito

3

使用sudo :)。说真的,您不需要su。'sudo'更好,因为您仅将它用于特权命令,并且可以帮助避免错误。您还将获得问责制。


2

如果使用“ su”,它将执行一个交互式shell。这与“ sudo -s”相同。“ su-”创建一个登录外壳,它将覆盖环境。“ sudo -i”与sudo等价。如果要获取交互式外壳,则应始终使用sudo -i(或su-)形式,否则有可能在用户的主目录中获得奇怪的文件权限。


0

您必须修改su的来源才能完成此工作。在初始化环境变量的过程中有一个chdir调用。注释掉那些包含该调用的陈述。现在,您可以执行“ su-”,但保留当前目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.