Afficher l'autorisation / le propriétaire de l'arborescence complète du répertoire

27

Je me souviens avoir fait quelque chose comme "XXX / home / user / dir / child / file" et cela a renvoyé le propriétaire et / ou la permission de:

/home
/home/user
/home/user/dir
/home/user/child
/home/user/child/file

Mais je ne me souviens pas de ce qu'était cette commande. Quelqu'un a une idée?

veuillez me supprimer
la source
Ne rien voir d'éclairant de apropos modeou apropos permissionssur OS X et Debian. Savez-vous quelle plateforme / distribution vous utilisiez? Serait-ce une commande de site local? Vous pouvez créer un script pour un tel outil en utilisant dirnameet stat.
mrb
Utiliser Arch Linux et une jolie installation vanille donc pas trop d'outils supplémentaires installés. Notez qu'il s'agissait de propriétaires ET / OU d'autorisations, je ne suis pas sûr à ce stade. L'un ou l'autre serait utile.
veuillez me supprimer

Réponses:

31

La commande aurait pu être:

namei -m /home/user/dir/child/file
user59736
la source
6
namei -moest génial, que cela vous donne également le propriétaire.
earthmeLon
2
ATTENTION: namei n'affichera pas les ACL linux ou MAC SELinux. J'ai compris qu'une ACL bloquait nginx en vérifiant manuellement avecsudo su nginx -s/bin/bash
Ray Foss
28

Je pense que vous pensez peut-être à la treecommande. Par exemple:

$ tree -pufid apps/glassfish3/ | less
apps/glassfish3
[drwxr-xr-x saml    ]  apps/glassfish3/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/config
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/doc-files
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/security
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/sql
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/decorator
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb/embeddable
...
...

Les commutateurs ci-dessus effectuent les opérations suivantes:

  • -p - autorisations
  • -u - nom d'utilisateur / ID utilisateur
  • -f - chemin complet
  • -i - n'imprime pas les lignes d'indentation
  • -d - imprimer uniquement les répertoires

Les références

slm
la source
3
Je pense qu'il a été demandé d'afficher les ancêtres et /home/user/dir/child/filenon les enfants.
Raphael Ahrens
@RaphaelAhrens - oui, je m'en rends compte, mais il n'y a pas de commande à ma connaissance qui fasse exactement cela, il y a cependant la commande d'arbre qui fait ce que j'ai montré et elle est étrangement similaire à ce à quoi le PO pensait.
slm
Est-ce -uvraiment nécessaire? Il semble que ce soit ici par défaut (Tree ver. 1.6.0 sous GNU bash 4.2.45). Existe-t-il une option pour désactiver le "nom d'utilisateur / ID utilisateur"?
Nikos Alexandris
1
@NikosAlexandris - si je laisse tomber ce commutateur, je n'obtiens pas le nom d'utilisateur. Mon ver: arbre v1.6.0. Je suis sur Fedora 19, GNU bash, version 4.2.45 (1) -release (x86_64-redhat-linux-gnu).
slm
Différents "défauts" entre les versions bash? Merci d'avoir informé.
Nikos Alexandris
3

Après y avoir réfléchi, je suis venu avec cette

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done

La sortie ressemble à ceci

-rw------- 1 tant tant 181016423 Jun 25 23:49:17 2013 /home/tant/test_file
drwxr-xr-x 85 tant tant 5632 Jul  9 19:40:11 2013 /home/tant
lrwxr-xr-x 1 root wheel 8 Sep  4 23:53:27 2012 /home -> usr/home

J'espère que c'est ok que c'est dans l'ordre inverse.

Sur la base des commentaires, voici un moyen de lister de la racine vers le bas:

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done | sed '1!G;h;$!d'
Raphael Ahrens
la source
1
Vous pouvez inverser avec | tacsi vous l'avez ou | sed '1!G;h;$!d'non.
mrb
2
Cela se cassera pour les chemins relatifs. Faites à la [ "$l_path" != / -a "$l_path" != . ]place.
@Evan Teitelman dirname devrait donner le chemin complet
Raphael Ahrens
1
@RaphaelAhrens non, il retournera un point pour le chemin relatif à la fin.
précipitez-vous le
1
En outre, stat -ldevrait probablement être statou ls -ld.
0

Dans le répertoire dont vous souhaitez connaître les autorisations et les propriétaires des ancêtres:

for i in $(seq 0 $(pwd | tr -cd / | wc -c)) ; do pwd ; ls -lad ; cd .. ; done

Notez qu'après cela, vous serez /dedans :) si vous voulez retourner où vous étiez, encapsulez la commande à l'intérieur

HERE=$(pwd)
...
cd ${HERE}
yPhil
la source
-1

La commande que vous recherchez pour répertorier les autorisations et les propriétaires / groupes est ls -l .

L'option -l est utilisée pour le format de liste longue.

ls -l / chemin / vers / liste

De plus, si vous souhaitez lister et les fichiers cachés, ajoutez l' option -a (tout) .

ls -al / chemin / vers / liste

En outre, si vous souhaitez répertorier les autorisations dans vos sous - répertoires, utilisez l' option -R (récursive) .

ls -Rl / chemin / vers / liste

La première colonne affiche les autorisations (lecture (r), écriture (w), exécution (x)) et certaines autorisations spéciales (répertoires (d), - (fichier normal)) et les 3e et 4e colonnes vous montrent le fichier / répertoire propriétaire et groupe respectivement.

dastergon
la source
2
Je ne pense pas que ce soit ce qui est demandé. Il semble que le demandeur recherche une liste des autorisations des répertoires qui mènent à un fichier.
Mat