Спосіб №1 - стат
Ви можете використовувати statкоманду для отримання бітів дозволів. statдоступний на більшості Unixes (OSX, BSD, а не AIX з того, що я можу знайти). Це повинно працювати на більшості Unixes, за винятком OSX та BSD, які я можу знайти.
$ stat -c "%a" <file>
Приклад
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
Використовуйте цю команду:
$ stat -c "%a" afile.txt
664
І скористайтеся простим, grepщоб побачити, чи режим дозволів для груп становить 6 або 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Для OSX і BSD ви повинні використовувати цю форму stat, stat -f(або , можливо stat -x), і розібрати відповідно. Оскільки варіанти statвідрізняються, ви можете зафіксувати цю команду в lsb_release -aкоманді та викликати відповідну версію на базі ОС. Не ідеально, але працездатно. Зрозумійте, що lsb_releaseце доступно лише для дистрибутивів Linux, тому для тестування інших ОС Unix потрібно розробити іншу альтернативу .
Метод №2 - знайти
Я думаю, що ця команда може вам краще служити. Я використовую findі printfперемикач.
Приклад
$ find a -prune -printf '%m\n'
664
Спосіб №3 - Perl
Perl може бути більш портативним способом зробити це залежно від ОС, яку ви намагаєтеся охопити.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
ПРИМІТКА . Вищенаведене використовує stat()функцію Perl для запиту бітів файлової системи.
Ви можете зробити це більш компактним, відправивши використання масиву @pvта stat()безпосередньо вирішивши:
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664