Peg*_*a88 7 google-compute-engine google-cloud-platform containeros google-container-os
将我的问题归结为最简单的情况,我使用Compute Engine和以下启动脚本:
#! /bin/bash
sudo useradd -m drupal
su drupal
cd /home/drupal
touch test.txt
Run Code Online (Sandbox Code Playgroud)
我可以在此命令后确认drupal用户是否存在,测试文件也是如此.但是我希望测试文件的所有者是'drupal'(因此是su).但是,当我将其用作启动脚本时,我仍然可以确认ROOT是文件的所有者:
意思是我的
su drupal
Run Code Online (Sandbox Code Playgroud)
不工作.sudo su drupal也没有任何区别.我正在使用Google Container OS,但在Debian 8图像上也是如此.
小智 6
sudo su
不是在shell中运行的命令 - 它启动一个新的shell.
新的shell不再运行您的脚本,并且运行该脚本的旧shell在继续之前等待新的shell退出.
该sudo su
命令将启动一个新shell.旧shell等待旧的shell退出并继续执行其余代码.您的脚本在"旧"shell中运行,这意味着这些命令:
cd /home/drupal
touch test.txt
Run Code Online (Sandbox Code Playgroud)
仍然以root身份执行,因此这些文件的所有者也是root用户.
您可以将脚本修改为:
#! /bin/bash
sudo useradd -m drupal
sudo -u drupal bash -c 'cd ~/; touch text2.txt'
Run Code Online (Sandbox Code Playgroud)
它应该工作.该-u
标志以用户指定的方式执行命令,在本例中为"drupal"
归档时间: |
|
查看次数: |
1423 次 |
最近记录: |