Спосіб №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