Como posso obter permissões de arquivo binário a partir da linha de comando?

2

Usando stat -c "%a %n" * , estou obtendo permissões de arquivo no modo octal (como 755). Existe alguma maneira de ver as permissões de arquivo no modo binário (como 111 101 101)?

    
por sourav 01.07.2017 / 12:34

4 respostas

6

Para um único arquivo:

stat -c "%a" filename.txt | xargs -I PERM echo "obase=2; ibase=8; PERM" | bc

E como um script mais claro para mais de um arquivo:

#!/bin/bash
for file in *
do
  perm=$(stat -c "%a" "$file")
  bin=$(echo "obase=2; ibase=8; $perm" | bc)
  echo "$bin $file"
done

a saída:

110110100 baz
110110100 foo
110110101 bar

Notas

  • Primeiro, fazemos o loop em todos os arquivos e diretórios usando for file in * .
  • Com stat -c "%a , reunimos a permissão do arquivo em octal e, em seguida,
  • Usando echo , adicionamos outros detalhes necessários a permission e adicionamos a bc .
  • Finalmente bc faz a conversão e depois imprimimos o resultado e o nome do arquivo.
  • obase = 2; significa saída deve estar em binário, ibase = 8 significa que nossa entrada é em octal e $ perm é a permissão de arquivo em octal como 664.
por Ravexina 01.07.2017 / 12:55
1

Você pode fazer isso usando o módulo stat do perl, por exemplo: dado

$ stat -c '%a %n' *
600 other file
775 somedir
664 somefile

então

$ perl -MFile::stat -e 'printf "%b %s\n", (stat $_)->[2] & 07777, $_ for @ARGV' *
110000000 other file
111111101 somedir
110110100 somefile
    
por steeldriver 01.07.2017 / 14:08
0

Se você quiser apenas visualizar as permissões de arquivo em binário, poderá usar a primeira coluna de ls -l :

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

Aqui você pode ver que rwxr-xr-x corresponde a 111101101

    
por wjandrea 01.07.2017 / 16:15
0

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 

O trabalho é feito via os.stat() function, que retorna uma tupla de atributos de arquivo, entre os quais st_mode no formato decimal. Em seguida, convertemo-lo em binário e extraímos os últimos 9 dígitos.

Tudo é executado dentro da compreensão da lista para operar em todos os arquivos fornecidos na linha de comando (para que você possa fornecer vários arquivos ou usar o globstar).

Como um script

#!/usr/bin/env python2

import sys, os

for filename in sys.argv[1:]:
    perms = os.stat(filename).st_mode
    print bin(perms)[-9:], filename
    
por Sergiy Kolodyazhnyy 01.07.2017 / 20:42