... и как мне их установить? Это работает для каталогов таким же образом? Что происходит с 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