Amandasaurus Asked: 2009-06-18 06:45:02 +0800 CST2009-06-18 06:45:02 +0800 CST 2009-06-18 06:45:02 +0800 CST Linux - 使用“su -”但保留当前目录 772 当我su -进入 root 时,我的当前目录设置为 root 的主目录。无论如何要保留我所在的当前目录,就像sudo -s. 还是使用 sudo 的答案? linux unix sudo su 8 个回答 Voted Best Answer crb 2009-06-18T06:47:20+08:002009-06-18T06:47:20+08:00 如果可能,最好使用 sudo,因为这样您就不需要知道(或给某人)root 的密码。将root密码设置为长而可怕的密码,然后将其锁定在保险箱中。 如果您想稍后拒绝某人访问,您只需删除他们对 sudo 的访问权限,而不必教其他人一个新的 root 密码。 但是 - 如果您不想使用,则不需要使用“-”参数。您将以 root 身份获得一个 shell,它不会是登录 shell(因此它不会运行 root 的 .profile。) Russell Heilling 2009-06-18T06:51:14+08:002009-06-18T06:51:14+08:00 我同意 sudo 几乎总是一个更好的答案,但要回答问题的另一部分...... 'su -' 中的 '-' 表示您要模拟超级用户登录,而不是仅以超级用户权限运行。 如果您使用普通的“su”而不是“su -”,您将留在同一目录中;但是您也将在相同的环境中运行,因此可能需要修改您的路径以访问一些管理命令。 freiheit 2009-06-18T06:51:17+08:002009-06-18T06:51:17+08:00 如果您在su没有 的情况下使用-,它应该将您保留在当前目录中。 -,-l或--login 告诉 su: 提供与用户直接登录时所期望的环境相似的环境。 或者只使用 sudo,它还有很多其他优点。或 ssh 密钥。 will.barley 2014-01-16T23:57:31+08:002014-01-16T23:57:31+08:00 如果你真的想使用su,有一种方法可以留在同一个目录中。 su - <user> -c "cd `pwd`; bash" 这里发生了什么: su - <user> = 登录为 -c 这意味着“在新的外壳中运行命令 -c "cd `pwd`" 我们给出的命令是切换到当前目录 ( pwd) - 但是因为我们使用反引号,所以pwd在我们运行命令之前对命令进行评估,su以便我们实际切换到我们现在作为旧用户所在的目录。这里唯一的问题是新的shell在运行命令后立即退出,所以我们添加: -c "cd `pwd`; bash" 这意味着“bash在运行命令后运行(新 shell),cd并且 bash shell 在我们注销之前不会退出。 Jindrich 2009-06-18T06:50:01+08:002009-06-18T06:50:01+08:00 你绝对应该使用 sudo。 su -m -m (-p):不重置环境变量(一般不推荐) 当您更改为 root 时,这将使您保留在该文件夹中。 使用 sudo 的好处 chmeee 2009-06-18T06:49:17+08:002009-06-18T06:49:17+08:00 使用 sudo :)。说真的,你不需要su。'sudo' 更好,因为您只将它用于特权命令,并且可以帮助避免错误。你也得到了问责。 David Pashley 2009-06-18T06:50:28+08:002009-06-18T06:50:28+08:00 如果您使用“su”,它会执行交互式 shell。这与“sudo -s”相同。“su -” 创建一个登录 shell,它将覆盖环境。“sudo -i”与 sudo 等价。如果您尝试获得交互式 shell,则应始终使用 sudo -i(或 su -)形式,否则可能会在用户的主目录中获得奇怪的文件权限。 swigger 2010-02-21T02:01:43+08:002010-02-21T02:01:43+08:00 您必须修改 su 的来源才能完成这项工作。在初始化环境变量的过程中有一个 chdir 调用。注释掉那些声明,包括那个电话。现在,您可以执行“su -”但保留当前目录。
如果可能,最好使用 sudo,因为这样您就不需要知道(或给某人)root 的密码。将root密码设置为长而可怕的密码,然后将其锁定在保险箱中。
如果您想稍后拒绝某人访问,您只需删除他们对 sudo 的访问权限,而不必教其他人一个新的 root 密码。
但是 - 如果您不想使用,则不需要使用“-”参数。您将以 root 身份获得一个 shell,它不会是登录 shell(因此它不会运行 root 的 .profile。)
我同意 sudo 几乎总是一个更好的答案,但要回答问题的另一部分......
'su -' 中的 '-' 表示您要模拟超级用户登录,而不是仅以超级用户权限运行。
如果您使用普通的“su”而不是“su -”,您将留在同一目录中;但是您也将在相同的环境中运行,因此可能需要修改您的路径以访问一些管理命令。
如果您在
su
没有 的情况下使用-
,它应该将您保留在当前目录中。-
,-l
或--login
告诉 su:或者只使用 sudo,它还有很多其他优点。或 ssh 密钥。
如果你真的想使用
su
,有一种方法可以留在同一个目录中。这里发生了什么:
su - <user>
= 登录为-c
这意味着“在新的外壳中运行命令-c "cd `pwd`"
我们给出的命令是切换到当前目录 (pwd
) - 但是因为我们使用反引号,所以pwd
在我们运行命令之前对命令进行评估,su
以便我们实际切换到我们现在作为旧用户所在的目录。这里唯一的问题是新的shell在运行命令后立即退出,所以我们添加:-c "cd `pwd`; bash"
这意味着“bash
在运行命令后运行(新 shell),cd
并且 bash shell 在我们注销之前不会退出。你绝对应该使用 sudo。
当您更改为 root 时,这将使您保留在该文件夹中。
使用 sudo 的好处
使用 sudo :)。说真的,你不需要su。'sudo' 更好,因为您只将它用于特权命令,并且可以帮助避免错误。你也得到了问责。
如果您使用“su”,它会执行交互式 shell。这与“sudo -s”相同。“su -” 创建一个登录 shell,它将覆盖环境。“sudo -i”与 sudo 等价。如果您尝试获得交互式 shell,则应始终使用 sudo -i(或 su -)形式,否则可能会在用户的主目录中获得奇怪的文件权限。
您必须修改 su 的来源才能完成这项工作。在初始化环境变量的过程中有一个 chdir 调用。注释掉那些声明,包括那个电话。现在,您可以执行“su -”但保留当前目录。