С помощью 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
Для одного файла:
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
Для одного файла:
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
Вы можете сделать это, используя модуль статистики perl, например. заданный
$ 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
Вы можете сделать это, используя модуль статистики perl, например. заданный
$ 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
$ 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
Вы можете сделать это, используя модуль статистики perl, например. заданный
$ 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
$ 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