使用 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 发行版的最佳方法,所以这可能需要您进行一些额外的研究。
为 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 发行版的最佳方法,所以这可能需要您进行一些额外的研究。