Buộc chủ sở hữu và nhóm cho nội dung của một tập tin tar?


21

Tôi muốn tạo một tệp tar có nội dung thuộc về chủ sở hữu: cặp nhóm không tồn tại trên hệ thống mà tệp đang được tạo.

Đây là hướng tôi đã thử:

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

Và khi chạy lệnh này, tôi gặp lỗi sau:

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

Có cách nào để buộc tar chấp nhận chủ sở hữu: nhóm, mặc dù cả hai đều không tồn tại trên hệ thống mà tệp được tạo?


1
Lưu ý rằng --owner không phải là một tùy chọn được hỗ trợ bởi tar. Đây là một GNUism không di động. Với dấu sao, ví dụ: bạn sử dụng tên người dùng tích hợp và chỉ định tên người dùng / tên người dùng -chgrp tên nhóm / nhóm.
schily

Câu trả lời:


19

Linux không sử dụng tên nhóm và chủ sở hữu nội bộ nhưng số - UID và GID. Tên người dùng và nhóm được ánh xạ từ nội dung của tập tin / etc / passwd và / etc / nhóm để thuận tiện cho người dùng. Vì bạn không có mục 'người khác' trong bất kỳ tệp nào trong số đó, Linux thực sự không biết nên gán UID và GID nào cho tệp. Thay vào đó, hãy thử vượt qua một số:

$ 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

Nó dường như làm việc.


Hấp dẫn! Vì vậy, lệnh tar phải bỏ phiếu hệ thống cho số người dùng và nhóm để khớp với tên tôi đang cố sử dụng. Cảm ơn!
David

1
Một lưu ý cho những người khác gặp phải điều này: tar tự động xuất tên người dùng / nhóm khi sử dụng -tvfcờ. Để xem các số hiện tại cho các tệp trong kho lưu trữ, hãy sử dụng một lệnh như thế này:$ tar --numeric-owner -tvf archive.tar
David

Trên thực tế với phiên bản tar của tôi, tôi có thể nhập bất kỳ tên người dùng nào tôi muốn và được lưu trong tệp tar (nhưng với id người dùng số theo mặc định). Trong khi liệt kê, bạn nhận được tên người dùng theo mặc định nhưng id người dùng sử dụng --numeric-ownercờ. Điều thú vị hơn là bạn có thể thiết lập cả hai bằng cách sử dụng --owner=name:1234hoặc --group=groupname:4711. Nguồn: hàm parse_owner_group của mã nguồn tar
Bluehorn

Có lẽ đáng chú ý là tiêu đề tar ustar (tiêu chuẩn trên BSD và Linux) mã hóa cả giá trị UID / GID số cũng như tên người dùng và nhóm. Khi giải nén, các tên được sử dụng trước tiên, nếu chúng có mặt trong tiêu đề và khớp với người dùng và nhóm được xác định trên hệ thống. UID và GID số sẽ chỉ được sử dụng làm dự phòng.
kbolino


-2

Đây là một đoạn mã để thay thế người dùng / nhóm bằng id khi đang di chuyển:

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

5
Không. Nếu id biết cách giải quyết tên, tar cũng biết. Câu hỏi là về một tên người dùng không biết đến hệ thống.
Daniel S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.