tt_*_*ntz -2 linux bash shell terminal sudo
我知道sudo bash -c 'some_command'它将以some_command与 sudo 相同的权限运行。
我对发生了什么感到困惑?它是否some_command以 sudo 的形式在 bash 中运行(与 相同sudo bash)然后切换回我的当前用户?为什么我没有像运行时那样留在 bash 实例中,并拥有 sudo 权限sudo bash?
我尝试运行man bash,它描述了该-c选项(引用如下)。但是,我正在努力弄清楚描述与我在跑步时观察到的行为之间的关系sudo bash -c 'some_command'
如果存在 -c 选项,则从第一个非选项参数 command_string 中读取命令。如果 command_string 后面有参数,则将它们分配给位置参数,从 $0 开始。
考虑这个片段(注意 UID 和 PID/PPID 列。):
$ sudo ps -f
UID PID PPID C STIME TTY TIME CMD
root 8997 8715 0 11:57 pts/17 00:00:00 sudo ps -f
root 8998 8997 0 11:57 pts/17 00:00:00 ps -f
$ sudo bash -c 'ps -f'
UID PID PPID C STIME TTY TIME CMD
root 8909 8715 3 11:55 pts/17 00:00:00 sudo bash -c ps -f
root 8910 8909 0 11:55 pts/17 00:00:00 ps -f
$ sudo bash -c 'echo hi; ps -f'
hi
UID PID PPID C STIME TTY TIME CMD
root 8957 8715 0 11:56 pts/17 00:00:00 sudo bash -c echo hi; ps -f
root 8958 8957 0 11:56 pts/17 00:00:00 bash -c echo hi; ps -f
root 8959 8958 0 11:56 pts/17 00:00:00 ps -f
Run Code Online (Sandbox Code Playgroud)
sudo启动。ps -frootsudo以带有参数的用户bash身份开始。看来,作为一种优化,正在使用start 。因此,只能看到 2 个进程。root-c 'ps -f'bashexecps -fsudo以带参数的用户bash身份开始。命令(对 的参数)不是简单的可执行文件 + args。它们是 2 个命令,以. 所以,不能直接调用。它使用标准机制。所以,是进程的父进程。root-c 'echo hi; ps -f'-c;bashexecfork+execbashps