使用 bash 获取 http 进程用户

fetching a http process user using bash

为 bash 脚本使用获取 Web 进程用户 (apache|nginx|www-data) 的最佳方法是什么?

以我为例,设置文件夹权限并更改为 poper 所有者。

目前我正在使用:

ps aux | grep -E "(www-data|apache|nginx).*(httpd|apache2|nginx)" \
| grep -o "^[a-z\-]*" | head -n1

在 bash 脚本中获取 http 进程的所有者。

任何关于更聪明的解决方案或更好的正则表达式的提示都很好。

您的解决方案实际上取决于您的操作系统。一种选择可能是检查您的密码文件中是否存在可能的候选人:

user=$(awk -F: '/www|http/{print ;exit}' /etc/passwd)

如果您真的想查找 运行 进程的所有者,请记住 Apache 经常启动根拥有的 "master" 进程,然后启动儿童作为网络用户。所以也许是这样的:

user=$(ps aux|awk '=="root"{next} /www|http|apache/{print ;exit}')

但您也应该能够根据 OS 检测来确定事物,因为事物往往遵循标准:

case "`uname -s`" in
  Darwin)  user=_www; uid=70 ;;
  FreeBSD) user=www; uid=80 ;;
  Linux)
    if grep Ubuntu /etc/lsb-release; then
      user=www-data; uid=$(id -u www-data)
    elif [ -f /etc/debian_version ]; then
      user=www-data; uid=$(id -u www-data)
    elif etc
      etc
    fi
    ;;
esac

我不知道检测不同 Linux 发行版的最佳方法,所以这可能需要您进行一些额外的研究。