Как я могу получить разрешения двоичного файла из командной строки?

С помощью stat -c "%a %n" * я получаю права доступа к файлам в восьмеричном режиме (например, 755). Есть ли способ просмотреть права доступа к файлам в двоичном режиме (например, 111 101 101)?

2
задан 1 July 2017 в 14:17

4 ответа

Для единственного файла:

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 делает преобразование и затем нас распечатка результат и имя файла.
  • obase=2; вывод средств должен быть в двоичном файле, ibase=8 означает, что наш вход находится в восьмеричном, и $perm является разрешением файла в восьмеричном как 664.
6
ответ дан 2 December 2019 в 01:36

Можно сделать это использование модуля статистики жемчуга, например, данный

$ 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
1
ответ дан 2 December 2019 в 01:36

Если Вы просто хотите визуализировать полномочия файла в двоичном файле, Вы могли бы использовать первый столбец ls -l:

$ ls -ld /bin
drwxr-xr-x 2 root root 4096 mai 18 05:38 /bin

Здесь Вы видите это rwxr-xr-x соответствует 111101101

0
ответ дан 2 December 2019 в 01:36

Python

$ 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
0
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: