
В рамках процедуры установки программного обеспечения я использую:
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 во время работы моей программы (несмотря на тысячу соображений безопасности против этого).