切换到 root 时传递命令

切换到 root 时传递命令

我正在使用 切换到 root 用户sudo -i,但是否可以在同一行中传递要执行的命令?例如:sudo -i -c "mkdir qq"

答案1

sudo运行命令。只需执行:

sudo -i mkdir qq

您不需要像 这样的特殊选项su

答案2

作为穆鲁说,的典型用途sudo是仅运行一个命令。您不需要-c像大多数 shell 或su命令那样传递标志。

但是,根据您希望运行的结果mkdir qq,您可能还想省略该-i标志。无论您是在没有命令参数的情况下运行sudo -i以启动 shell,还是使用命令参数 ( ) 运行单个命令,都会模拟您将获得的环境sudo -i command...sudo -i如果你以目标用户身份登录。当未指定目标用户时,该用户为root,其主目录为/root。以用户身份登录会将您置于其主目录中,sudo -i这也是一样,尽管仅适用于正在启动的 shell 或正在运行的单个命令。

因此,运行sudo -i mkdir qq实际上mkdir qq是以 root 身份从运行/root。由于qq相对路径,该命令创建的目录实际上是/root/qq,即目录qq中名为的目录/root。如果这就是您想要的,那太好了!但是如果您想要的实际上是qq在您当前所在的位置创建一个名为的目录,那么您应该改为执行以下操作之一:

  • 要创建目录,通常不需要 的root完整登录环境。因此,您只需放弃-i标记并运行即可sudo mkdir qq
  • 在极不可能的情况下,您需要root的登录环境来创建目录(我想不出您需要这样做的原因),那么您可以使用目录的完整路径。虽然我怀疑您在这种情况下是否需要这样做,但最好知道您在运行的命令中使用完整路径,以sudo -i确保您引用正确的文件或目录。例如,如果您的目标是qq 在 中创建/opt,您可以运行sudo -i mkdir /opt/qq。不过,同样,由于mkdir这不是必需的,只需删除-i
  • 如果您不需要以root其他用户身份运行命令,则无需运行。要在您的用户已有写入权限的地方创建新目录,最好直接运行mkdir qq而不使用sudo。特别是,如果qq您要在此目录中安装即时通讯程序 QQ,仅供您使用,而不能供系统上的其他用户使用,并且您要在主目录中创建它,那么最好不要sudo在安装或运行该程序时使用。(我不认为这是为 QQ 准备的。这只是一个例子。)

答案3

您可以使用类似如下的方法:

$ sudo -i /bin/bash -c 'mkdir qq && bash'

# pwd
/root

# ls -d qq
qq

首先,您传递/bin/bash您的 shell、mkdir qq您想要运行的命令并&& bash获取具有 root 访问权限的 shell。

相关内容