5

У меня проблемы с работой функции chown в Perl. У меня есть скрипт:

#!/usr/bin/perl

$file   = "";
$file   = $ARGV[0];

$user   = "jboss";
$group  = "jboss";

if ($file eq "")
{
    print "Syntax: $0 <file>\n";
    exit 0;
}

@file = ($file);

print "Chowning the file $file to $user:$group\n";

$number = chown $user, $group, "$file";

print "Number of ownerships changed: $number\n";

exit 0;

SELinux включен и разрешен, но:

root# ls -l file 
-rw-r--r--. 1 root root 0 Jul 26 10:27 file  
root# id -a jboss uid=666(jboss) gid=666(jboss) groups=666(jboss)  
root# perlchown_file.pl file   
Chowning the file file to jboss:jboss  
Number of ownerships changed: 1  
root# ls -l file 
-rw-r--r--. 1 root root 0 Jul 26 10:27 file

Вопрос: что мне здесь не хватает? Конечно, вы можете написать здесь qx("/usr/bin/chown jboss: jboss"), но весь смысл здесь в том, чтобы использовать здесь более платформо-независимую функцию, а не обратную кавычку

2 ответа2

12

Функция chown Perl ожидает числовой uid/gid вместо имени пользователя / группы. Смотрите perldoc -f chown.

Чтобы получить uid из имени пользователя и gid из имени группы, вы можете использовать функции getpwnam и getgrnam следующим образом:

my $uid = getpwnam $user_name;
my $gid = getgrnam $group_name;
chown $uid, $gid, $file_name;
3

Если вы use warnings; Вы бы получили сообщение об ошибке, в котором говорится:

Аргумент "jboss" не числовой в chown ...

Это дало бы вам подсказку, что вам нужны UID и GID вместо пользователя и группы. Всегда полезно запускать каждый скрипт Perl с use warnings use strict .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .