
我需要使用 tar 命令上的“p”選項備份一些資料。問題是我要恢復此資料的地方將具有所有相同的用戶,但這些用戶可能具有不同的 ID。這對 tar 有什麼影響嗎?
答案1
tar
根據 UID 和 GID 記錄權限,而不是根據與它們關聯的字串。因此,如果一台伺服器上的 UID 為 3300 並且連結到“bob”,則在新伺服器上該檔案將由 UID 為 3300 的使用者擁有。
UNIX 上的虛擬所有內容(我想說的是所有內容,但你永遠無法 100% 確定)都使用 UID:GID 值,因為這是實際儲存在檔案系統層級的內容。這個名稱只是 passwd 檔案中的簡單查找,底層檢查是使用數值完成的。
答案2
總結之前的答案並添加一些重要資訊:
建立檔案時,
tar
將始終保留文件的使用者和群組ID,除非--owner=NAME
否則用,表示--group=NAME
。無論哪種情況,每個文件都將始終有一個關聯的數位用戶和群組 ID。GNU
tar
,也許還有其他版本tar
,也儲存使用者和群組名字,除非--numeric-owner
使用。bsdtar
預設還儲存使用者名稱和群組名,但不支援--numeric-owner
選項創造存檔直到版本 3.0(請注意,它支援以下選項:提取存檔時間更長)。當提取為普通用戶,所有文件都會總是歸用戶所有。它不會有任何不同,因為提取文件意味著在文件系統上建立一個新文件,而普通用戶無法建立文件並將所有權授予其他人。
當提取為根,
tar
預設將恢復提取檔案的所有權,除非--no-same-owner
使用,這將賦予 root 自己擁有權。在 GNU tar、bsdtar 以及可能的其他版本中
tar
,恢復的所有權是由使用者(和群組)完成的姓名,如果該資訊在檔案中和目標系統中有匹配的使用者。否則,將透過 ID 進行恢復。如果--numeric-owner
提供了選項,則忽略使用者名稱和群組名稱並使用 ID。無論哪種情況,只要使用數字 ID,匹配的用戶和群組都會不是需要存在於系統中。權限和時間戳記也會保存到存檔中,並預設恢復,除非使用選項
--no-same-permissions
和/或。--touch
當用戶提取時,用戶的umask
為減去--same-permissions
除非使用,否則來自權限。--preserve-permissions
和--same-permissions
是別名,具有相同的功能-p
希望這有助於澄清問題! :)
答案3
如果您嘗試在兩個系統之間傳輸文件,rsync 預設將透過使用者名稱而不是 uid 設定權限,並查看兩端的使用者名稱。只有當該用戶不存在於其中一個系統上時,它才會使用 uid 複製該用戶,除非您另有說明。
答案4
使用 GNU tar 的 --same-owner 選項。看http://www.gnu.org/software/tar/manual/html_section/Attributes.html