บังคับให้เจ้าของและกลุ่มสำหรับเนื้อหาของไฟล์ tar หรือไม่


21

ฉันต้องการสร้างไฟล์ tar ที่มีเนื้อหาเป็นของเจ้าของ: คู่ของกลุ่มที่ไม่มีอยู่ในระบบที่ไฟล์นั้นถูกสร้างขึ้นมา

นี่คือทิศทางที่ฉันได้ลอง:

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

และเมื่อใช้คำสั่งนี้ฉันได้รับข้อผิดพลาดต่อไปนี้:

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

มีวิธีบังคับให้ tar ยอมรับเจ้าของหรือไม่: กลุ่มแม้ว่าจะไม่มีอยู่ในระบบที่ไฟล์ถูกสร้างขึ้น?


1
โปรดทราบว่า - เจ้าของไม่ใช่ตัวเลือกที่สนับสนุนโดย tar นี่คือ GNUism ที่ไม่สามารถพกพาได้ ด้วยดาวคุณเช่นใช้ค้นหาในตัวและระบุ -chown ชื่อผู้ใช้ / ผู้ใช้ -chgrp groupname / groupid
Schily

คำตอบ:


19

Linux ไม่ใช้ชื่อเจ้าของและกลุ่มภายใน แต่เป็นตัวเลข - UID และ GID ชื่อผู้ใช้และกลุ่มถูกแมปจากเนื้อหาของไฟล์ / etc / passwd และ / etc / group เพื่อความสะดวกของผู้ใช้ เนื่องจากคุณไม่มีรายการ 'เจ้าของ' ในไฟล์เหล่านั้น Linux จึงไม่รู้ว่าควรกำหนด UID และ GID ใดให้กับไฟล์ ลองส่งตัวเลขแทน:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

ดูเหมือนว่าจะทำงาน


! ที่น่าสนใจ ดังนั้นคำสั่ง tar จะต้องทำการสำรวจระบบเพื่อให้หมายเลขผู้ใช้และกลุ่มตรงกับชื่อที่ฉันพยายามใช้ ขอบคุณ!
David

1
หมายเหตุสำหรับผู้อื่นที่พบเจอสิ่งนี้: tar จะส่งชื่อผู้ใช้ / กลุ่มโดยอัตโนมัติเมื่อใช้-tvfแฟล็ก ในการดูหมายเลขปัจจุบันของไฟล์ในไฟล์เก็บถาวรให้ใช้คำสั่งดังนี้:$ tar --numeric-owner -tvf archive.tar
David

ที่จริงแล้วสำหรับรุ่น tar ของฉันฉันสามารถป้อนชื่อผู้ใช้ที่ฉันต้องการและเก็บไว้ในไฟล์ tar (แต่ด้วยรหัสผู้ใช้ที่เป็นตัวเลขของฉันตามค่าเริ่มต้น) ในขณะที่รายชื่อคุณจะได้รับชื่อผู้ใช้โดยค่าเริ่มต้น แต่ผู้ใช้รหัสใช้--numeric-ownerธง สิ่งที่น่าสนใจกว่านั้นก็คือคุณสามารถตั้งค่าการใช้ทั้งสองหรือ--owner=name:1234 --group=groupname:4711ที่มา: ฟังก์ชั่น parse_owner_group ของซอร์สโค้ด tar
Bluehorn

อาจเป็นเรื่องน่าสังเกตว่าส่วนหัวของ tar (มาตรฐานบน BSD และ Linux) เข้ารหัสทั้งค่าตัวเลข UID / GID รวมถึงชื่อผู้ใช้และกลุ่ม เมื่อนำออกมาจะมีการใช้ชื่อก่อนหากมีอยู่ในส่วนหัวและจับคู่ผู้ใช้และกลุ่มที่กำหนดไว้ในระบบ UID ที่เป็นตัวเลขและ GID จะถูกใช้เป็นทางเลือกเท่านั้น
kbolino

1

เพิ่ม params กับ--no-same-owner --no-same-permissions tarใช้เวลาดูที่เอกสาร


2
ตัวเลือกเหล่านั้นจะใช้เมื่อทำการแตกไฟล์จากไฟล์เก็บถาวร tar เท่านั้นไม่ใช่สร้างไฟล์
Anthony G - ความยุติธรรมสำหรับโมนิก้า

คุณพูดถูกแล้ว @AnthonyGeoghegan!
Bruno Wego

-2

นี่คือส่วนหนึ่งของรหัสที่จะแทนที่ผู้ใช้ / กลุ่มด้วย id ได้ทันที:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata

5
ไม่ถ้าidรู้วิธีแก้ไขชื่อtarก็รู้เช่นกัน คำถามเกี่ยวกับชื่อผู้ใช้ที่ระบบไม่รู้จัก
Daniel S
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.