Fakeroot
Các fakeroot tiện ích, hoặc các tiện ích mới hơn fakeroot-ng (cùng mục đích, kỹ thuật thực hiện khác nhau) chạy một chương trình và giả vờ chương trình là nó đang chạy như là người chủ và hệ thống mà các cuộc gọi như chown
đã thành công. Chỉ có chương trình tin rằng các cuộc gọi này đã thành công, không có gì thực sự được phản ánh trong hệ thống tập tin (không thể kể từ khifakeroot
nó không có đặc quyền bổ sung). Tuy nhiên, nếu chương trình thay đổi quyền sở hữu của một tệp và sau đó thực hiện một số hành động dựa trên quyền sở hữu của tệp đó, điều này có thể thay đổi hành vi của chương trình.
Một cách điển hình để có được công việc hữu ích từ fakeroot bằng cách chạy một môi trường fakeroot trong đó xảy ra những điều sau đây:
- Tạo một số tệp, di chuyển chúng xung quanh, thay đổi quyền sở hữu và chế độ, v.v.
- Tạo một kho lưu trữ của các tập tin này.
Thí dụ:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
Bạn cần sử dụng một lệnh gọi duy nhất fakeroot
, vì không có bộ nhớ giữa các lần gọi.
Không gian tên Linux
Để hoàn thiện, tôi sẽ đề cập rằng nếu bạn có nhân Linux ≥3.8, thì không gian tên là một cách khác để tạo môi trường gốc giả. Hỗ trợ người dùng chưa hoàn toàn ở đó nên tôi sẽ không đi sâu vào chi tiết.
Gắn kết kho lưu trữ
Một cách khác để giải quyết vấn đề của bạn là gắn kết kho lưu trữ dưới dạng thư mục. Bạn có thể sử dụng archivemount , có khả năng sửa đổi một số định dạng lưu trữ thông qua libarchive , bao gồm cả tar nén.
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
tar --owner=root --group=root cfpJ files.tar.xz files/
ra lỗi cho tôitar: You must specify one of the
-Acdtrux 'hoặc--test-label' options Try
tar --help' hoặctar --usage' for more information.