Linux
Rsync 和文件所有權 - 不要更改伺服器上的所有權
所以我有一個從我的個人電腦同步到的網路伺服器,我在文件權限方面遇到了問題。
我已經嘗試了這兩個命令,但它們都沒有給我想要的東西。
rsync -a --no-o --no-g --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ admin-user@mysite.com:/var/www/mysite.com rsync -a --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ admin-user@mysite.com:/var/www/mysite.com
這是我想要的解釋,以及實際發生的情況,我使用前面提到的兩個命令得到了相同的效果。應該是這樣,索引可由執行 nginx 的使用者 www-data 讀取,並且可由管理員使用者寫入。
-rw-r----- 1 admin-user www-data 127 M D mm:ss index.html
這是執行 rsync 後實際發生的情況:
-rw-r----- 1 admin-user admin-user 128 M D mm:ss index.html
這顯然會導致訪問網站時出現 404,目前我必須在執行 rsync 後執行一個更正權限的腳本。
所以我想要的是伺服器上文件中的 GID 在我執行 rsync 後不會更改,我手動指定 GID 的解決方案也不起作用,因為其他程序使用的其他文件需要設置為其他團體。基本上 rsync 應該修改文件中的數據,但不要觸及其他任何內容。
這也不應該需要超級使用者權限,因為該文件可由我登錄的使用者寫入。
OS: Ubuntu 16.04 Server and Desktop rsync --version (home computer): 3.1.2 protocol version 31 rsync --version (server): 3.1.1 protocol version 31
為了使 rsync 創建具有相同組的更新文件,它們最初分配給 admin 使用者必須是該組的一部分。
解決方案是執行
usermod -aG www-data admin-user
在網路伺服器上。
我剛剛嘗試過,它似乎工作得很好。我為 rsync 使用了以下選項:
rsync -a --no-o --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/site/ admin-user@remote:/var/www/site
這最初是由@Thomas 在評論中提出的。