Как получить права доступа к файлу в восьмеричном формате?

Как получить права доступа к файлу в восьмеричном формате?

... и как мне их установить? Это работает для каталогов таким же образом? Что происходит с sticky bit и другими "экзотическими" вещами?

решение1

Как и предполагал@Густав, statпрограмма (которая является частьюGNU coreutilsи по сути это программа "Linux" по этой причине, хотя у вас может бытьпортилиупаковкав системах BSD) может это сделать. Команда

stat -c "%a %n"файл

создает отформатированный листинг только с восьмеричным режимом (включая закодированные биты setuid, setgid и sticky) и именем файла. Согласно документации

  • %aэто "Права доступа в восьмеричном формате"
  • %nэто "Имя файла"

Например, если взять этот сценарий:

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

вы можете увидеть такой вывод myscript /usr/bin /usr/bin/X /usr/bin/bsd-write:

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

Вы увидите 3 или 4 восьмеричные цифры, возвращаемые дляправа доступа, в зависимости от того, установлены ли setuid и т. д. Первая (четвертая) цифра объединяет

  • 4 (setuid)
  • 2 (setgid)
  • 1 (липкий)

Theправа доступавозвращено исключение дополнительных битов, возвращаемых системным вызовомstatкоторые говорят, является ли имя каталогом ( S_IFDIR) или файлом ( S_IFREG). Все эти биты, кстати, вписываются в 16-битное значение из-за давних реализаций Unix в 1970-х и начале 1980-х годов — и имеютстандартные значения. Посколькуправа доступаисключая тип файла, вы можете использовать это значение как есть в chmodкоманде (а такжеchmodфункция), потому что она восьмеричная, иchmodкоманда ожидает этого. Даже setuid и т. д. работают с восьмеричным, хотя такие вещи, как

chmod u+s /usr/bin/whatever

более читабельны.

Для дальнейшего чтения

решение2

stat -c "%a %n" <file>

кажется, это работает, но больше я ничего не знаю.

решение3

Получение: как ответил Гюстав.

Параметр:

chmod 0755 myfile

То же самое для каталогов. Для липкого бита первая цифра должна быть 1. О липком бите:https://askubuntu.com/a/432703

Связанный контент