Il y a une commande, je pense qu'il est livré avec Apache ou est en quelque sorte liée à celui-ci, qui vérifie les autorisations, jusqu'au bout. Donc, si j'ai /home/foo/bar/baz
Cela me dira quelles sont les autorisations pour baz
, bar
, foo
et home
. Est-ce que quelqu'un sait ce que cette commande est ou une autre façon de faire cela? La commande commence fondamentalement à l'argument et fonctionne de la manière à /
Vous permettant de savoir quelles sont les autorisations dans le chemin afin que vous puissiez voir si vous avez un problème d'autorisation.
L'utilité que vous pouvez penser est la commande namei
. Selon la page manuelle:
Namei utilise ses arguments comme des chemins de chemin sur tout type de fichier UNIX (liens symboliques, fichiers, répertoires, etc.). Namei suit ensuite chaque chemin de chemin jusqu'à ce qu'un point de terminal soit trouvé (un fichier, un répertoire, un périphérique de caractère, etc.). S'il trouve un lien symbolique, nous montrons le lien et commençons à la suivre, en indiquant la sortie pour afficher le contexte.
La sortie que vous désirez peut être reçue comme suit:
$ namei -l /usr/src/linux-headers-2.6.35-22/include/
f: /usr/src/linux-headers-2.6.35-22/include/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxrwsr-x root src src
drwxr-xr-x root root linux-headers-2.6.35-22
drwxr-xr-x root root include
La commande namei
fait partie du package logiciel Linux-util-ng . Voir la page page manuelle pour plus de détails.
Je ne suis au courant de commandes, mais il est assez facile d'écrire un script:
#!/bin/bash
ARG=$1
while [[ "$ARG" != "." && "$ARG" != "/" ]]
do
ls -ld -- "$ARG"
ARG=`dirname -- "$ARG"`
done
Exemple:
$ perms.sh /tmp/1/2/3/hello.txt
-rw-rw-r-- 1 user group 0 Jan 14 16:59 /tmp/1/2/3/hello.txt
drwxrwxr-x 2 user group 4096 Jan 14 16:59 /tmp/1/2/3
drwxrwxr-x 3 user group 4096 Jan 14 16:43 /tmp/1/2
drwxrwxr-x 3 user group 4096 Jan 14 16:43 /tmp/1
drwxrwxrwt 12 root root 4096 Jan 14 17:02 /tmp
Je pense que la commande vous recherchez est:
namei -l `pwd`
ce qui, lorsqu'il est exécuté dans/tmp/foo/bar, vous donne une liste comme:
drwxr-xr-x root root /
drwxrwxrwt root root tmp
drwxr-xr-x user group foo
drwxr-xr-x user group bar
Que diriez-vous d'une fonction de bash récursive pour une solution amusante:
[bash#] function uptree { ( \ls -ld -- "$PWD"; [ "$PWD" = '/' ] && return; cd ..; uptree ) | column -t ; }
[bash#] pwd
/home/frielp/bin/dev
[bash#] uptree
drwxrwxr-x. 2 frielp frielp 4096 Dec 14 14:50 /home/frielp/bin/dev
drwxr-xr-x. 15 frielp frielp 4096 Aug 23 10:48 /home/frielp/bin
drwxr-xr-x. 60 frielp frielp 4096 Jan 14 16:48 /home/frielp
drwxr-xr-x. 4 root root 4096 Dec 1 09:14 /home
dr-xr-xr-x. 23 root root 4096 Jan 14 08:18 /
[bash#] pwd
/home/frielp/bin/dev
[bash#]
Cela pourrait facilement être fait un one-liner. Ce n'est pas récursif et devrait être un moyen relativement rapide de le faire dans Bash. Appeling PWD Dans chaque boucle n'est pas particulièrement rapide, évitez donc si vous le pouvez.
#!/bin/bash
if [ -n "$1" ]; then
echo "Usage: $0 [FILE]"
exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
stat -c "$PWD %A" .
cd ..
done
Alternative, une doublure pour le répertoire actuel.
(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)
alternativement, envisagez d'utiliser find
avec tac
find /path -printf '%M %u %g %p\n' | tac