我正在使用 切换到 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。