Как мне прочитать числовые разрешения больше, чем 777?

0

Я заметил это только сейчас, когда использую findи statчтобы получить разрешения для всех элементов, /usr/local/share/localeпрежде чем я рекурсивно изменю их . statпоказывает разрешения в числовом формате, с которым я не знаком - все каталоги 40755и файлы есть 100644. Я предполагаю, что последние три являются просто нормальными восьмеричными разрешениями (о которых я уже знаю), но что означают 40s и 100s?

Черный свет
источник
statиспользует drwxвыходные данные symbolic ( ) в моей системе. Как ты это называешь? which stat?
Даниэль Бек
Полная команда , которую я использовал это find /usr/local/share/locale -exec stat -f '%p %N' {} \;. statесть /usr/bin/stat. Это на OS X Mountain Lion; ты на линуксе?
Blacklight Shining

Ответы:

3

stat(1)это, прежде всего, обертка для stat(2), и страница руководства stat(2)показывает это:

 The status information word st_mode has the following bits:

 #define S_IFMT   0170000  /* type of file */
 #define S_IFIFO  0010000  /* named pipe (fifo) */
 #define S_IFCHR  0020000  /* character special */
 #define S_IFDIR  0040000  /* directory */
 #define S_IFBLK  0060000  /* block special */
 #define S_IFREG  0100000  /* regular */
 #define S_IFLNK  0120000  /* symbolic link */
 #define S_IFSOCK 0140000  /* socket */
 #define S_IFWHT  0160000  /* whiteout */
 #define S_ISUID  0004000  /* set user id on execution */
 #define S_ISGID  0002000  /* set group id on execution */
 #define S_ISVTX  0001000  /* save swapped text even after use */
 #define S_IRUSR  0000400  /* read permission, owner */
 #define S_IWUSR  0000200  /* write permission, owner */
 #define S_IXUSR  0000100  /* execute/search permission, owner */

Итак, первые 100 означают, что это обычный файл, а первые 40 означают, что это каталог.

Spiff
источник
2
Они все в восьмеричном виде, потому что восьмеричное удобно для младших 9 бит (rwxrwxrwx), и смешивание восьмеричного с десятичным будет катастрофой. (S_IFREG будет 32768, что является своего рода распознаваемым числом, но комбинация этого с битами разрешения 0644 будет 33188, что намного труднее читать, чем 0100644)
Алан Карри