2015-03-16 2 views
1

Я хочу написать сценарий оболочки/Perl, который может проверить, установлен ли файл с определенными битами разрешения.Получить строку бит прав на Linux/Perl?

Например, я хочу, чтобы проверить, если файл имеет разрешение как

drwxr-s--- 

Когда я использую функцию stat в Perl, он дает мне десятичное число. Есть ли способ получить точную строку, как указано выше, в моем скрипте perl и сравнить ее? Если нет - есть ли способ преобразовать эту строку в число, а затем сравнить?

+2

См. 'Man 2 stat' и' perldoc -f -X' – ikegami

+0

@ThisSuitIsBlackNot: Не совсем. Здесь я хочу посмотреть, есть ли у файла все разрешенные биты, о которых я упоминал. Остальные вопросы - это проверить бит владельца. Извинения за путаницу. – Deadman

+0

Не думайте, что Perl возвращает как десятичное число. Подумайте об этом как о восьмиступенчатом наборе разрешений. Вы можете использовать _bit math_, чтобы проверить, установлено ли определенное разрешение. Вы также можете использовать Perl [проверки файлов] (http://perldoc.perl.org/functions/-X.html), чтобы проверить разрешение. –

ответ

1

Почему бы просто не преобразовать ваш десятичный номер в двоичную форму и использовать двоичный код AND или XOR?

Этот код дает двоичные разрешения:

printf '%b', (stat 'filename.txt')[2] & 07777; 

Например, -rw-р ----- бинарная форма будет 110100000.

+0

Я тоже работаю, но хочу получить строковое значение разрешений как есть. Это возможно? – Deadman

+0

@ пользователь2780224, yep. Существует функция format_perms(), принимающая десятичную форму и предоставляющая вам нужную строку. – sota

0

я каким-то образом число нужно сравнить против и это то, что я получил, чтобы получить ответ:

my $mode = (stat('$file'))[2]; 
printf("permissions are %04o\n", $mode & 07777); 

и это сработало для меня !!