我正在嘗試編寫一個 Bash 腳本,用於向 Apache2 用戶自動 chown'in 檔案。但我之前需要 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}'
謝謝。