使用bash获取http进程用户

时间:2015-03-10 23:24:38

标签: regex bash http process

获取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进程的所有者。

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

1 个答案:

答案 0 :(得分:1)

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

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

如果您确实想要查找运行进程的所有者,请记住Apache经常启动根拥有的“主”进程,然后以Web用户身份启动子进程。所以也许是这样的:

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

但是你也应该能够根据操作系统检测来确定事物,因为事情往往遵循标准:

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发行版的最佳方法,因此可能需要对您进行一些额外的研究。