В рамках процедуры установки программного обеспечения я использую:
curl -s <url-to-targz> | tar -p -x -z -C /
внутри скрипта Perl (я использую qx($command)
или system($command)
.Все идет хорошо, и tar шар установлен в / моей системы, но когда я делаю то же самое с общим ресурсом nfs:
curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt
Затем происходит следующее:
- Когда я делаю это по приглашению, все идет хорошо (т.е. все мои разрешения, которые я сохранил в tar-бале, все еще остаются в силе).
- Когда я делаю это, отказываясь от сценария Perl (или, в этом случае, сценария оболочки), либо
qx($command)
либоsystem($command)
оставляют меня в ситуации, когда меняются права доступа (например, что было исполняемым), больше не исполняется).
Я подозреваю, что это связано с umask (в моей системе это 022), и обычно флаг -p должен об этом позаботиться, но в этом случае радости все равно нет. У кого-нибудь есть какие-либо предложения для меня (кроме чтения man-страницы :-))?
Я также пробовал что-то вроде system("umask xyz; $command")
, но (возможно, потому что команда $command
использует форк моего процесса, который получает umask 022
): тоже не радость.
Изменить: Некоторые ответы указывают, что я должен использовать Umask из Perl. Я думаю, что umask 000 добьется цели (но я увижу это утром, когда я нахожусь в системе. Хотя umask по-разному влияет на файлы и каталоги. Есть ли способ полностью отключить umask во время работы моего програна (несмотря на тысячу соображений безопасности против него).