我正在尝试编写一个 Bash 脚本,用于自动将文件 chown'in 给 Apache2 用户。但我之前需要 100% 确定它的用户名是什么?我知道它通常是 www-data。但是,我需要确定用户名是否以某种方式更改过。
我正在寻找一个仅返回 Apache2 用户名的字符串。
我知道# ps -aux | grep apache2
还有很多其他的,但他们返回了大量的数据,而我只需要一个用户名。
非常感谢您的帮助!
谢谢。
答案1
Apache2 的用户名和组 ID 由配置文件中的指令设置。此文件位于 中/etc/apache2/envvars
。
您可以检查该文件并注意到,默认情况下,正如您所怀疑的那样,它是www-data
。此外,从文件中可以看到,用户组默认设置为相同的名称。
现在您有了有效用户,apache
您可以使用它将文件更改为该用户:
$ sudo chown -R www-data:www-data myhtmldirectory
这会将 myhtmldirectory 及其下的所有文件和目录的用户和组所有者更改为www-data
。
如果您只想更改用户所有者,请删除:www-data
组的部分。
获得正确 usrID 的一个非常可靠的方法是:
$ awk -F= '$1 == "export APACHE_RUN_USER" {print $2}' /etc/apache2/envvars
此行将解析已启动的当前会话的 envvars 文件。
答案2
要查找匹配的任何进程的有效用户的名称apache2
,请使用:
ps -o euser= -C apache2
该-o
选项设置输出格式。在我们的例子中,我们只要求输入有效用户名。euser
尾随的=
指示ps
隐藏正常标题行。这样,输出仅包含与匹配的用户名apache2
。
我没有运行 apache2,因此作为示例:
$ ps -o euser= -C mount.ntfs
root
$ ps -o euser= -C atd
daemon
答案3
我发现了一个非常简单的解决方案,它只返回 apache2 用户名:
ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
谢谢。