Метод № 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