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

3 ответа3

2

Как предлагает @Gustave, программа 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 (липкий)

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

chmod u+s /usr/bin/whatever

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

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

0

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

Окружение:

chmod 0755 myfile

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

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

Кажется, работает - но я не знаю больше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .