С помощью stat -c "%a %n" *
я получаю права доступа к файлам в восьмеричном режиме (например, 755). Есть ли способ просмотреть права доступа к файлам в двоичном режиме (например, 111 101 101)?
Для единственного файла:
stat -c "%a" filename.txt | xargs -I PERM echo "obase=2; ibase=8; PERM" | bc
И как более четкий сценарий для больше что одного файла:
#!/bin/bash
for file in *
do
perm=$(stat -c "%a" "$file")
bin=$(echo "obase=2; ibase=8; $perm" | bc)
echo "$bin $file"
done
вывод:
110110100 baz
110110100 foo
110110101 bar
for file in *
.stat -c "%a
мы собираем разрешение файла в восьмеричном, затемecho
мы добавляем другие необходимые детали к permission
и победите его к bc
.bc
делает преобразование и затем нас распечатка результат и имя файла.Можно сделать это использование модуля статистики жемчуга, например, данный
$ stat -c '%a %n' *
600 other file
775 somedir
664 somefile
затем
$ perl -MFile::stat -e 'printf "%b %s\n", (stat $_)->[2] & 07777, $_ for @ARGV' *
110000000 other file
111111101 somedir
110110100 somefile
Если Вы просто хотите визуализировать полномочия файла в двоичном файле, Вы могли бы использовать первый столбец ls -l
:
$ ls -ld /bin
drwxr-xr-x 2 root root 4096 mai 18 05:38 /bin
Здесь Вы видите это rwxr-xr-x
соответствует 111101101
$ python -c 'import sys,os;[ sys.stdout.write( " ".join([bin(os.stat( i ).st_mode)[-9:],i,"\n"]) ) for i in sys.argv[1:] ]' /etc/passwd
110100100 /etc/passwd
Задание сделано через os.stat()
функция, которая возвращает кортеж атрибутов файла, среди которыхst_mode
в десятичном формате. Мы затем преобразовываем его в двоичный файл и извлекаем последние 9 цифр.
Все выполняется в понимании списка для работы на все файлы, данные на командной строке (таким образом, можно обеспечить несколько файлов или использовать globstar).
Как сценарий
#!/usr/bin/env python2
import sys, os
for filename in sys.argv[1:]:
perms = os.stat(filename).st_mode
print bin(perms)[-9:], filename