获取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进程的所有者。
任何关于更聪明的解决方案或更好的正则表达式的提示都会很棒。
答案 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发行版的最佳方法,因此可能需要对您进行一些额外的研究。