Je dois définir le même chmod, comment obtenir le numéro pour -rw-r - r-- ?
chmod
supports --reference
: “--reference = RFILE utilisez le mode RFILE au lieu des valeurs MODE” - man chmod.
Je dois définir le même chmod, comment obtenir le numéro pour -rw-r - r-- ?
chmod
supports --reference
: “--reference = RFILE utilisez le mode RFILE au lieu des valeurs MODE” - man chmod.
Réponses:
S'il vous plaît vérifier la stat
sortie:
# stat .xsession-errors
File: ‘.xsession-errors’
Size: 839123 Blocks: 1648 IO Block: 4096 regular file
Device: 816h/2070d Inode: 3539028 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ lik) Gid: ( 1000/ lik)
Access: 2012-05-30 23:11:48.053999289 +0300
Modify: 2012-05-31 07:53:26.912690288 +0300
Change: 2012-05-31 07:53:26.912690288 +0300
Birth: -
stat -c %a /path/to/file
est le tour de magie dont vous avez besoin.
Le numéro du mode de permission complet est un nombre octal à 4 chiffres, bien que la plupart du temps, vous n'utilisiez que les 3 chiffres les moins significatifs. Ajoutez chaque groupe dans la chaîne des autorisations, en prenant r = 4, w = 2, x = 1. Par exemple:
421421421
-rwxr-xr--
\_/ -- r+w+x = 4+2+1 = 7
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+_ = 4+0+0 = 4 => 0754
Maintenant, parfois, vous verrez un étrange modestring comme ceci:
-rwsr-xr-T
Le quatrième chiffre est surchargé sur les x
bits du modestring. Si vous voyez une lettre autre que celle- x
ci, cela signifie qu'un de ces bits "spéciaux" à quatrième chiffre est défini, et si la lettre est en minuscule, x
cette position est également définie. Donc la traduction pour celui-ci est:
4 2 1
421421421
-rwsr-xr-T
+ + + -- s+_+T = 4+0+1 = 5
\_/ -- r+w+s = 4+2+1 = 7 (s is lowercase, so 1)
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+T = 4+0+0 = 4 (T is uppercase, so 0) => 05754
La méthode UNIX standard pour montrer qu'un nombre est octal est de le démarrer avec un zéro. De toute façon, GNU chmod
supposera que le mode que vous donnez est octal, mais il est plus sûr d’ajouter le zéro.
Enfin, si vous voyez un +
à la fin du modestring:
-rwxr-xr-x+
cela signifie alors que le fichier a des autorisations étendues et que vous aurez besoin de plus que chmod
. Regardez dans les commandes setfacl
et getfacl
, pour commencer.
Les autorisations ne sont que la représentation sous forme de chaîne d'un nombre binaire.
Le 0
est principalement représenté par -
, le reste sont des lettres.
Pour les autorisations de base:
Convertissez tous -
et caps S
ou T
to 0
, le reste devrait représenter 1
.
Le nombre binaire résultant ainsi construit doit être imprimé sous forme octale:
$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644
En une ligne:
$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644
Correction d'erreur et détection des 3 autres bits 1000
, 2000
ou 4000
nécessite un code supplémentaire:
#!/bin/bash
Say (){ printf '%s\n' "$@"; }
SayError(){ a=$1; shift; printf '%s\n' "$@" >&2; exit "$a"; }
e1="Permission strings should have 10 characters or less"
e2="Assuming first character is the file type"
e3="Permission strings must have at least 9 characters"
e4="Permission strings could only contain 'rwxsStT-'"
a=$1
((${#a}>10)) && SayError 1 "$e1"
((${#a}==10)) && { Say "$e2"; a=${a#?}; }
((${#a}<9)) && SayError 2 "$e3"
a=${a//[^rwxsStT-]}
((${#a}<9)) && SayError 3 "e4"
b=${a//[ST-]/0}; b=${b//[!0]/1}; c=0
[[ $a =~ [sS]......$ ]] && c=$((c|4))
[[ $a =~ [sS]...$ ]] && c=$((c|2))
[[ $a =~ [tT]$ ]] && c=$((c|1))
printf '%04o\n' "$((2#$b|c<<9))"
Obtenez la liste des fichiers avec leurs valeurs de chaîne et leurs autorisations hexadécimales. Mettez% N à la fin pour que la sortie puisse être placée dans Excel plus facilement.
stat -c "%A %a %N" *
-rw-r--r-- 644 `file2.txt'
-rw-r--r-- 644 `file3.txt'
-rw-r--r-- 644 `file4.txt'
-rw-r--r-- 644 `file.txt'
drwxr-xr-x 755 `hsperfdata_root'
-rw-r--r-- 644 `junk.txt'
drwx------ 700 `vmware-root'
Ceci trouvera tous les fichiers avec une permission hex spécifique.
find /tmp1 -user root -perm 644