Существует команда chmod для установки прав доступа к файлам, но можно ли получить права доступа к файлам в восьмеричном режиме (например, 755) из командной строки?
Можно попробовать
stat -c "%a %n" *
Замена *
с соответствующим каталогом или точным именем файла, которое Вы хотите исследовать.
Из страницы справочника статистики,
-c --format=FORMAT
use the specified FORMAT instead of the default; output a newline after
each use of FORMAT
%a Access rights in octal
%n File name
Использование:
С файлами:
$ stat -c "%a %n" ./Documents/Udev.html
664 ./Documents/Udev.html
С папками:
$ stat -c "%a %n" ./Documents/
755 ./Documents/
Просто расширяем \ упрощаем предыдущие ответы, связанные с «stat»:
Вы можете просто запустить:
stat <path_to_file>
Вывод будет содержать восьмеричное разрешение вместе с другой информацией .
Подробности (версия и пример статистики):
# stat --version
stat (GNU coreutils) 8.4
[user@localhost ~]# touch /tmp/TEST_PERMISSONS
[user@localhost ~]# chmod 644 /tmp/TEST_PERMISSONS
[user@localhost ~]# stat /tmp/TEST_PERMISSONS
File: `/tmp/TEST_PERMISSONS'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 1010058 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-26 18:58:59.000000000 +0300
Modify: 2015-08-26 18:58:59.000000000 +0300
Change: 2015-08-26 18:59:16.000000000 +0300
Обратите внимание: ( 0644 / - rw-r - r -)
Для мобильности можно использовать perl
:
$ perl -e 'printf "%04o %s\n", (stat)[2] & 07777, $_ for @ARGV' *.txt
0644 1.txt
0644 2.txt
0644 3.txt
0644 4.txt
0600 PerlOneLiner.txt
0664 perl.txt
Если Вы хотите заметить, когда ошибка происходит, попробуйте:
perl -e '
for (@ARGV) {
print "$!: $_\n" and next unless -e;
printf "%03o %s\n", (stat)[2] & 07777, $_;
}
' *.txt
Права доступа к файлам в Linux могут отображаться в восьмеричном формате с помощью команды Linux stat.
Просто нажмите Ctrl kbd> + Alt kbd> + T kbd> на клавиатуре, чтобы открыть терминал. Когда он откроется, перейдите в каталог, где вы хотите найти права доступа к файлу в восьмеричном режиме.
stat -c '%A %a %n' *
% A Права доступа в удобочитаемой форме
% a Права доступа в восьмеричном формате
% n Имя файла
Восьмеричные числа и разрешения [ 118]
Вы можете использовать восьмеричное число для представления режима / разрешения:
r: 4 w: 2 x: 1
Например, для владельца файла вы можете использовать восьмеричный режим следующим образом. Разрешение на чтение, запись и выполнение (полное) для файла в восьмеричном виде равно 0 + r + w + x = 0 + 4 + 2 + 1 = 7
Только разрешение на чтение и запись для файла в восьмеричном виде равно 0 + r + w + x = 0 + 4 + 2 + 0 = 6
Разрешение только на чтение и выполнение файла в восьмеричном виде: 0 + r + w + x = 0 + 4 + 0 + 1 = 5
Используйте вышеуказанный метод для расчета разрешения для группы и других лиц. Допустим, вы хотите дать полное разрешение владельцу, читать и выполнить разрешение на группирование и разрешение только на чтение для других, затем необходимо рассчитать разрешение следующим образом: Пользователь = r + w + x = 0 + 4 + 2 + 1 = 7 Группа = r + w + x = 0 + 4 + 2 + 0 = 6 Другие = r + w + x = 0 + 0 + 0 + 1 = 1
Действующее разрешение - 761.
blockquote>Источник: http://kmaiti.blogspot.com/2011/09/umask-concept.html
find
с -printf
действие.ls
не показывает восьмеричные полномочия, но можно использовать это find
- основанное обходное решение:
find path -printf "%m:%f\n"
Например, для проверки моего каталога Videos:
$ find Videos -printf "%m:%f\n"
755:Videos
%m
спецификатор формата говорит -printf
действие для печати восьмеричных полномочий, в то время как %f
спецификатор формата заставляет это печатать имя файла.
Можно передать несколько имен файлов find
. Можно даже использовать шарики (например, find * -printf "%m:%f\n"
).
Вы не должны использовать тест как -name
или -iname
; достаточно передать названия файлов или каталогов, которыми Вы интересуетесь как начальные точки find
. Таким образом, предоставьте их имена как аргументы сразу после слова find
, как показано выше.
find
дает Вам большой контроль над тем, как он показывает вывод. Существует две модификации в особенности, что Вы могли бы найти полезным:
По умолчанию, find
рекурсивно вызывает подкаталоги, подобные ls -R
. Если Вы не хотите find
для посещения подкаталогов начальных точек, Вы передаете ему, можно добавить -maxdepth 0
(или использовать -maxdepth
с другими значениями, чтобы указать, как глубоко Вы хотите, чтобы это пошло).
$ find Documents -maxdepth 0 -printf "%m:%f\n"
755:Documents
%f
только показывает имя файла, итак, если find
должен рекурсивно вызвать для получения до файла, Вы не могли бы знать, где он расположен. Показать путь, начинаясь, какой бы ни начальная точка файл была найдена под, использование %p
вместо этого.
$ find /boot -printf "%m:%p\n"
755:/boot
644:/boot/initrd.img-4.4.0-92-generic
600:/boot/System.map-4.4.0-93-generic
600:/boot/vmlinuz-4.4.0-92-generic
600:/boot/vmlinuz-4.4.0-93-generic
....
Посмотрите man find
для получения дополнительной информации об использовании find
команда.
ls
и awk
)Это может использоваться для списка всех файлов каталога с их полномочиями:
ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf("%0o ",k);print}'
Это - по существу та же команда как в Adam Courtemanche lso
псевдоним, который тот процитированный ответ, просто выполненный как единственная команда. Если Вы только используете это однажды, или в редком случае, то Вы не могли бы хотеть потрудиться писать это как функцию оболочки или псевдоним.
Как детализировано в “755” - разрабатывают полномочия с ‘ls’ Adam Courtemanche на AgileAdam.com, можно создать псевдоним lso
это действует как ls -l
но немного обрабатывает output1 для отображения полномочий также в восьмеричном. Это добавляет ведущий столбец, показывающий три-digit2 восьмеричные полномочия. Как записано, это работает на большинство файлов и каталогов, но это не работает правильно, если липкие или setuid/setgid биты установлены 3
alias lso="ls -alG | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}'"
Это имеет серьезный недостаток, тем не менее, как techtonik указывает. Вы не можете передать аргументы этому lso
исказите, как Вы были бы к ls
команда, потому что они взяты в качестве дополнительных аргументов awk
вместо этого. Таким образом Вы не можете работать lso
на определенном файле или каталоге, и при этом Вы не можете передать опции (как -F
, или --color
) к lso
.
Фиксация должна определить lso
как функция, а не псевдоним.
lso() { ls -alG "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Если Вы испытываете это в интерактивном режиме в Вашей оболочке, выполненной unalias lso
для удаления псевдонима - можно сделать это или прежде или после определения функции. Если Вы помещаете его в файл, который получен, такой как ~/.bashrc
, просто выньте alias
строка и добавляет функциональное определение.
Почему это работает? В отличие от псевдонимов, функции оболочки удара могут взять позиционные параметры, т.е. параметры командной строки. "$@"
расширяется до полного списка аргументов, вызывая аргументы lso
функция, которая будет передана ls
. (В отличие от определения псевдонима, не заключается в кавычки тело функции; следовательно было необходимо удалить \
символы прежде $
и "
.)
Так как можно передать опции lso
при определении этот путь как функция можно хотеть удалить -a
и -G
опции из определения - можно передать их вручную в случаях, где Вы хотите их. ( -l
вариант требуется для деталей как полномочия файла показаться вообще, таким образом, нет никакого преимущества для удаления его.)
lso() { ls -l "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Благодаря techtonik для указания на ограничение в определении lso
как псевдоним, таким образом заставляя меня развернуть это сообщение с материалом о создании его функция вместо этого.
1One может отметить, что это, кажется, презирает общее правило о не парсинге вывода от ls
. ls
производит очень человекочитаемый вывод; это представляет особенности и ограничения, делающие это обычно неподходящий, как введено для других команд. В этом случае мы анализируем ls
так как мы хотим сохранить точное поведение ls
кроме нашего добавленное изменение.
2One ограничение этого псевдонима, который также относится к функциональной версии, показанной ниже его, и который можно считать ошибкой, то, что это только отображает три восьмеричных цифры, даже когда четвертая восьмеричная цифра является нулем. Как jfmercer справедливо указал, восьмеричные цифры, отображенные здесь, не отражают липкий бит если существующий, ни setuid или setgid биты.
3More серьезно, чем просто не показ четвертой восьмеричной цифры то, что этот метод предполагает, что они не установлены, и если они - если Вы видите t
, s
, или S
в строке разрешения - затем необходимо игнорировать восьмеричные цифры. Это, потому что биты выведены из строки полномочий способом, которая не составляет липкие setuid/setgid биты.