Il existe une commande chmod pour définir les autorisations de fichier, mais puis-je obtenir les autorisations de fichier en mode octal (tel que 755) à partir de la ligne de commande?
command-line
permissions
Anwar
la source
la source
stat --format "%A" $FILE
vous donne ledrwxr-x---
format lisible par l'homme . qui peut ou peut ne pas être utile.Réponses:
Tu peux essayer
Remplacez-le
*
par le répertoire approprié ou par le nom de fichier exact à examiner.De la page de manuel de stat ,
Usage:
Avec des fichiers:
Avec des dossiers:
(Référence)
la source
stat -f '%A %a %N' *
(crédit: geeklog.adamwilson.info/article/58/… )ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
est une mauvaise idée. Si vous voulez vraiment utiliser une boucle, vous pouvez le fairefor f in *; do stat "%a %n" "$f"; done
Les autorisations de fichiers sous Linux peuvent être affichées au format octal à l’aide de la commande Linux stat.
Appuyez simplement sur Ctrl+ Alt+ Tsur votre clavier pour ouvrir Terminal. Lorsqu'il s'ouvre, accédez au répertoire dans lequel vous souhaitez rechercher les autorisations de fichiers en mode octal.
% A Droits d'accès sous forme lisible par l'homme
% a Droits d'accès en octal
% n Nom du fichier
Source: http://kmaiti.blogspot.com/2011/09/umask-concept.html
la source
Comme détaillé dans les autorisations de type «755» avec «ls» par Adam Courtemanche sur AgileAdam.com , vous pouvez créer un alias
lso
qui agit comme si,ls -l
mais traite légèrement la sortie 1 pour afficher les autorisations également en octal. Cela ajoute une colonne de tête indiquant les autorisations octales à deux chiffres à trois chiffres . Tel qu'écrit, cela fonctionne pour la plupart des fichiers et des répertoires, mais ne fonctionne pas correctement si les bits sticky ou setuid / setgid sont définis. 3Comme le souligne Techtonik , cela présente toutefois un grave inconvénient . Vous ne pouvez pas transmettre d'arguments à cet
lso
alias comme à lals
commande , car ils sont considérés comme des arguments supplémentairesawk
. Ainsi, vous ne pouvez pas exécuterlso
sur un fichier ou un répertoire spécifique, vous ne pouvez pas non plus transmettre d’option (comme-F
, ou--color
) àlso
.Le correctif consiste à définir
lso
une fonction plutôt qu'un alias.Si vous essayez cela interactivement dans votre shell, exécutez
unalias lso
pour supprimer l'alias - vous pouvez le faire avant ou après avoir défini la fonction. Si vous le placez dans un fichier source, tel que~/.bashrc
, il suffit de supprimer laalias
ligne et d'ajouter la définition de la fonction.Pourquoi ça marche? Contrairement aux alias, les fonctions du shell bash peuvent prendre des paramètres de position , c'est -à- dire des arguments de ligne de commande .
"$@"
étend à la liste complète des arguments , entraînant le passage des arguments à lalso
fonctionls
. (Contrairement à une définition d'alias, aucun corps de fonction n'est cité; il était donc nécessaire de supprimer les\
caractères avant$
et"
.)Étant donné que vous pouvez transmettre des options à
lso
une fonction définie de cette manière, vous souhaiterez peut-être supprimer les options-a
et-G
de la définition. Vous pouvez les transmettre manuellement dans les cas où vous le souhaitez. ( L'-l
option est requise pour des détails comme les autorisations de fichiers à afficher du tout , donc il n'y a aucun avantage à le retirer.)Merci à techtonik pour souligner la limitation dans la définition
lso
comme un alias, me motive ainsi à étendre ce poste avec du matériel de faire une fonction à la place.1 On peut noter que cela semble bafouer la règle générale selon laquelle il ne faut pas analyser la sortie de
ls
.ls
produit une sortie très lisible par l'homme; cela introduit des particularités et des limitations qui le rendent généralement inadapté comme entrée pour d'autres commandes. Dans ce cas, nous analysonsls
puisque nous souhaitons conserver le comportement exact dels
notre seul changement.2 Une limite de cet alias, qui s'applique également à la version de fonction indiquée ci-dessous, et qui peut être considérée comme un bogue, est qu'elle n'affiche que trois chiffres octaux, même lorsque le quatrième chiffre est zéro. Comme jfmercer l' a fait remarquer à juste titre , les chiffres octaux affichés ici ne reflètent pas le bit collant s'il est présent, ni les bits setuid ou setgid.
3 Plus sérieusement que simplement ne pas montrer le quatrième chiffre octal est que cette méthode suppose qu'ils ne sont pas définies, et si elles sont - si vous voyez
t
,s
ouS
dans la chaîne d'autorisation - alors vous devriez ne pas tenir compte des chiffres octaux . Ceci parce que les bits sont déduits de la chaîne d'autorisations d'une manière qui ne prend pas en compte les bits sticky setuid / setgid.la source
awk: read error (Is a directory)
--color
paramètre pour afficher les couleurslso() { ls -alG "$@" --color | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
En étendant simplement \ simplifiant les réponses précédentes 'stat':
Vous pouvez simplement lancer:
La sortie contiendra une permission octale avec d'autres informations.
Détails (version et exemple de la statistique):
Notez le: ( 0644 / -rw-r - r--)
la source
Pour la portabilité, vous pouvez utiliser
perl
:Si vous voulez remarquer quand une erreur se produit, essayez:
la source
Vous pouvez utiliser
find
avec l'-printf
action.ls
ne montre pas les permissions octales, mais vous pouvez utiliser cettefind
solution de contournement:Par exemple, pour vérifier mon répertoire de vidéos:
Le
%m
spécificateur de format indique à l'-printf
action d'imprimer des autorisations octales, tandis que le%f
spécificateur de format lui permet d'imprimer le nom de fichier.Vous pouvez transmettre plusieurs noms de fichiers à
find
. Vous pouvez même utiliser des globs (par exemplefind * -printf "%m:%f\n"
).Vous n'êtes pas obligé d'utiliser un test comme
-name
ou-iname
; il suffit de donner le nom des fichiers ou des répertoires qui vous intéressentfind
. Autrement dit, fournissez leurs noms comme arguments immédiatement après le motfind
, comme indiqué ci-dessus.find
vous donne un grand contrôle sur la façon dont il affiche la sortie. Il y a deux modifications en particulier qui pourraient vous être utiles:Par défaut,
find
recurses sous répertoires, similaire àls -R
. Si vous ne souhaitezfind
pas visiter les sous-répertoires des points de départ que vous lui transmettez, vous pouvez les ajouter-maxdepth 0
(ou les utiliser-maxdepth
avec d'autres valeurs pour indiquer la profondeur à laquelle vous souhaitez aller).%f
affiche uniquement un nom de fichier, donc s'ilfind
faut recurse pour obtenir un fichier, vous pourriez ne pas savoir où il se trouve. Pour afficher un chemin commençant par le point de départ du fichier, utilisez%p
plutôt.Voir
man find
pour plus d'informations sur l'utilisation de lafind
commande.Une autre méthode (
ls
etawk
)Ceci peut être utilisé pour lister tous les fichiers de répertoires avec leurs permissions:
C’est essentiellement la même commande que dans le
lso
pseudonyme d’ Adam Courtemanche , que cette réponse a cité, n’est exécutée qu’en une seule commande. Si vous utilisez cette option une seule fois ou dans de rares cas, vous ne voudrez peut-être pas vous soucier de l'écrire sous forme d'alias ou de fonction shell.la source