Если вы хотите включить файлы, на которые указывают симлинки, используйте -h
.
tar -chzf foo.tar.gz directory/
Разрешения и права собственности сохраняются по умолчанию. Если вы хотите просто включить симлинки как симлинки, опустите -h
. Маленькие -z
предназначены для gzip.
Все это описано в man tar
; вы можете искать термины (например, "симлинк") в man
через прямую косую черту /.
Когда вы распаковываете архив (tar -xzf foo.tar.gz
), право собственности будет сохранено только в том случае, если вы распаковываете от имени root, иначе все файлы будут принадлежать вам. Это особенность, поскольку в противном случае обычному пользователю часто было бы невозможно получить доступ к файлам в архиве, который он (например) скачивает. Модальные разрешения (чтение/запись/выполнение) останутся прежними. Если в качестве обычного пользователя вы хотите сохранить право собственности, вы можете использовать ключ -p
(так tar -xzpf foo.tar.gz
).
Однако есть одна загвоздка.
Владение файлом на самом деле хранится в виде номера, а не имени; система сообщает имена, соотнося их со значением из /etc/passwd
. Вы можете найти номер, соответствующий вашему имени пользователя, с помощью:
grep yourusername < /etc/passwd
Что приведет к выводу чего-то вроде:
piotek:x:1001:1001::/home/piotek:/bin/bash
Первое число - это номер вашего пользователя, второе - номер вашей группы (обычно они одинаковы). Остальные поля описаны в man 5 passwd
(обратите внимание на 5
).
Как следствие, если вы закачаете некоторые файлы в tar и распакуете их на другой системе от имени root или используя -p
(чтобы сохранить право собственности), и на этой системе есть пользователь с номером пользователя 1001, эти файлы будут принадлежать этому пользователю, даже если его имя не piotek
(и даже если на системе есть пользователь piotek
с другим соответствующим номером).
Страница руководства tar
немного запутана в этом отношении, поскольку она ссылается на переключатель -p
как на включающий разрешения файлов. Это обычная для *nix двусмысленность в контексте, где состояние битов чтения/записи/исполнения называется режимом.
grep -v "^$PWD$" FILE-LIST
-v
инвертирует поиск, поэтому печатаются только не совпадающие -строки ^...$
гарантирует, что шаблон соответствует только всей строке (, иначе все подкаталоги $PWD
также будут отфильтрованы)