web-dev-qa-db-fra.com

Comment puis-je obtenir les autorisations de fichiers binaires à partir de la ligne de commande?

En utilisant stat -c "%a %n" * j'obtiens des autorisations de fichier en mode octal (tel que 755). Existe-t-il un moyen de voir les autorisations de fichier en mode binaire (tel que 111 101 101)?

2
sourav

Pour un seul fichier:

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

Et en tant que script plus clair pour plus d'un fichier:

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

le résultat:

110110100 baz
110110100 foo
110110101 bar

Remarques

  • Premièrement, nous parcourons tous les fichiers et répertoires en utilisant for file in *.
  • Avec stat -c "%a nous recueillons l’autorisation de fichier en octal, puis
  • En utilisant echo, nous ajoutons d’autres détails nécessaires à permission et nous les transmettons à bc.
  • Enfin, bc effectue la conversion, puis nous affichons le résultat et le nom du fichier.
  • obase = 2; signifie que la sortie doit être en binaire, ibase = 8 signifie que notre entrée est en octal et $ perm est l'autorisation de fichier en octal, comme 664.
6
Ravexina

Vous pouvez le faire en utilisant le module Perl stat , par exemple. donné

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

ensuite

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

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 

Le travail est effectué via la fonction os.stat(), qui renvoie un ensemble d'attributs de fichier, parmi lesquels isst_mode au format décimal. Nous le convertissons ensuite en binaire et extrayons les 9 derniers chiffres.

Tout est effectué dans le cadre de la compréhension de liste pour fonctionner sur tous les fichiers donnés en ligne de commande (vous pouvez donc fournir plusieurs fichiers ou utiliser Globstar).

en tant que 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
0

Si vous voulez juste visualiser les permissions de fichiers en binaire, vous pouvez utiliser la première colonne de ls -l:

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

Ici vous pouvez voir que rwxr-xr-x correspond à 111101101

0
wjandrea