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

当我做su -到根目录时,我的当前目录被设置为root的主目录。 有没有办法保持我当前的目录,很像sudo -s 。 或者是使用sudo的答案?

如果可能的话,最好使用sudo,因为那样你就不需要知道root用户的密码。 将root密码设置为长而可怕的内容,然后将其locking在安全的位置。

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

但是,如果不想使用“ – ”参数,则不需要使用“ – ”参数。 你会得到一个shell作为根,它不会是一个loginshell (所以它不会运行根的.profile。)

我同意,sudo几乎总是一个更好的答案,但要回答问题的其他部分…

“su – ”中的“ – ”表示您要模拟超级用户login,而不是仅以超级用户特权运行。

如果你使用普通的'su'而不是'su – ',你将会保持在同一个目录下。 但是您也将在相同的环境中运行,因此可能需要修改您的path以访问某些pipe理命令。

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

提供一个类似于用户希望用户直接login的环境。

或者只是使用sudo,它有很多其他的优点。 或者ssh密钥。

你一定要用sudo。

苏姆
-m(-p):不要重置环境variables(一般不推荐)

当您切换到根目录时,这将使您保持在该文件夹中。

使用sudo的好处

使用sudo :)。 说真的,你不需要su。 'sudo'更好,因为你只使用它作为特权命令,可以帮助避免错误。 你也得到责任。

如果你使用“su”,它会做一个交互式的shell。 这跟“sudo -s”是一样的。 “su – ”创build一个loginshell,它将覆盖环境。 “sudo -i”与sudo是同等的。 如果您正在尝试获取交互式shell,则应始终使用sudo -i(或su – )表单,否则可能会在用户主目录中出现怪异的文件权限。

如果你真的想使用su ,有一种方法可以保留在同一个目录下。

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

这里发生了什么:

  • su - <user> =login为
  • -c这意味着“在新的shell中运行命令
  • -c "cd `pwd`"我们给出的命令是切换到当前的diret( pwd ) – 但是因为我们使用了反引号,所以在我们运行su命令之前对pwd命令进行了评估,以便我们切换到目录现在作为旧用户。 这里唯一的问题是运行这个命令后新的shell会立即退出,于是我们添加:
  • -c "cd `pwd`; bash"意思是“在运行cd命令之后运行bash (new shell),并且bash shell在退出之前不会退出。

你必须修改su的来源来完成这项工作。 在初始化环境variables的过程中有一个chdir调用。 包括那个电话在内的那些声明注释掉了。 现在,你可以做“苏”,但保持当前的目录。