Разархивировать файл при получении правильных разрешений?

17

Я распаковал файл на моем сервере, используя:

unzip filename

Однако это, похоже, вызвало все файлы с правами владельца / группы 0 0.

Файлы, которые я загружал, были PHPпрограммным скриптом, поэтому мне интересно, как правильно установить разрешения при разархивировании файлов и на что они должны быть установлены?

Brett
источник

Ответы:

10

Насколько я знаю, Zip не поддерживает сохранение владения / разрешения файлов. Вы можете попробовать установить umask, чтобы unzip создавал файлы с этими разрешениями. Бегать

umask 644

перед тем unzip.

lawl0r
источник
Это было на самом деле молнии с окном, извините.
Бретт
1
Неважно, был ли он создан в Windows или * nix. Zip по-прежнему не поддерживает разрешения для файлов Unix. Независимо от того, где он был создан.
lawl0r
Да, я знаю .... но вы сказали, что я мог бы попытаться установить umaskтак, чтобы это создавало почтовый индекс с этими разрешениями; но не думаю, что я могу сделать это на окнах?
Бретт
Перед распаковкой
lawl0r
8
@ lawl0r да, это так. Используйте опцию -Z, чтобы увидеть их.
OrangeDog
20

На самом деле, некоторые ответы здесь не верны. Файлы ZIP также могут иметь права доступа к файлам. (*) Вы можете перечислить права доступа к файлам в вашем ZIP-файле с помощью:

unzip -Z

Возможно, инструмент, который вы использовали для создания ZIP-файла, не сохранял разрешения или неправильно их сохранял.

Итак, если вы создали ZIP-файл самостоятельно , проверьте инструмент, с помощью которого вы создали ZIP-файл. Может быть, есть способ установить разрешения перед архивированием (как в случае с maven), или он сохраняет исходные разрешения (но это будет работать только в системе, которая поддерживает разрешения - т.е. не в Windows).

Если вы не создали ZIP-файл самостоятельно , ваш единственный шанс - установить правильные разрешения после разархивирования, например, с помощью

chmod -R [permissions] [directory]

(*) Мы используем эту функцию в сочетании с плагином сборки maven, где вы можете указать fileMode для файлов, которые попадают в ZIP-файл.

Дэвид Танзер
источник
1
Я думаю, что вы правы, но то, как вы предлагаете ответ, это не правильно. Вы должны сосредоточиться, чтобы дать хороший ответ, чем критиковать по-новому ...
Франциско Тапиа
2
@FranciscoTapia Я обновил свой ответ (с некоторыми вещами, которые можно попробовать), но оставлю подсказку, что другие ответы там неверны. Я думаю, что это важно.
Дэвид Танзер
1
UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler.на Windows / Mingw. В настоящее время у меня нет доступа к моей коробке Linux, но там -Z тоже работает. В любом случае, спасибо за подсказку!
Дэвид Танзер
3
@ Дэвид Танзер , ваш ответ самый лучший, даже если он не принят. Действительно, происхождение архива (например, Windows, Linux и т. Д.) Имеет важное значение. Я тестировал на Linux ( Zip 3.0 , UnZip 6.00 ). Как только файл помещен в архив, разрешения сохраняются. И они восстанавливаются на извлеченном файле (например, когда файл извлекается в Linux). Очевидно, что разрешения не будут применены при извлечении на Windows box. Это будет действительно здорово видеть в разархивировать определенного переключателя (как деготь «s --no-same-permissions) , которая не сохраняет права и уважает UMASK при извлечении.
flaz14
1
@DanielF Разрешения есть только в том случае, если создающая программа поместила их туда, поэтому если ваш архив был создан в Windows, zipinfo/ unzip -Zможно только догадываться. Чтобы увидеть, есть ли разрешения, используйте zipinfo -v/ unzip -Zvи ищите «внешние атрибуты файла не MSDOS»; два наиболее значимых байта - это разрешения UNIX (в шестнадцатеричной, а не восьмеричной!) форме, если «файловая система или операционная система происхождения» - UNIX.
Алексей