Cette question a déjà reçu une réponse dans superuser.com (je ne sais pas si je peux marquer une question d'un site comme doublon d'un autre). La solution est aussi simple que d'écrire (en supposant que je suis dans le même répertoire que le nom de fichier cible) :
$ namei -l $(pwd)/somefile ## or `namei -l $(realpath -s somefile)`
A cause de -l
, il répertorie les autorisations de base au format long pour chaque répertoire parent.
Je dois utiliser pwd
/realpath
parce que namei
ne résout pas les chemins relatifs. Si je ne suis pas dans le répertoire cible, écrivez simplement le chemin complet.
J'ai fait ce petit script qui fait ça. J'utilise cd "$1"; pwd
pour obtenir le répertoire courant afin que les chemins ne soient pas canonisés (par exemple, si vous essayez magic-ls .
et votre répertoire actuel est /var/lib/postgres, mais c'est un lien symbolique vers /mnt/postgres, vous obtiendrez /var
, /var/lib
et /var/lib/postgres
, tout en utilisant realpath
vous obtiendriez /mnt
et /mnt/postgres
)
magic-ls() {
local current=$(cd "$1"; pwd)
while [[ $current != '/' ]]; do
ls -ld "$current"
current=$(dirname "$current")
done
}
Voici un exemple de sortie :
[[email protected] ~]$ magic-ls
drwx------ 1 leodag leodag 2722 jun 21 13:49 /home/leodag
drwxr-xr-x 1 root root 18 mai 2 2019 /home
Au fait, cela fonctionnera également sans argument depuis cd ""
ne change pas votre répertoire.
Édit :supprimé realpath
de la vérification while, car cela pourrait conduire à des résultats inattendus s'il y avait un lien vers /
dans le chemin, et était inutile.
En utilisant simplement l'expansion des paramètres :
#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
ls -lLd "$path"
path="${path%/*}"
done
méthode d'appel :
bash test.sh /var/lib/program/subfolder/somefile
donner
-rw-r--r-- 1 root root 0 Jun 21 18:49 /var/lib/program/subfolder/somefile
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program/subfolder
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program
drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib
drwxr-xr-x 1 root root 4096 Jun 13 19:24 /var
J'ai écrit un script bash pour vous. Il y aura quelques bogues, si vous avez de l'espace dans les noms. Si cela vous dérange, je suis heureux de changer les recommandations dans les commentaires.
#!/bin/bash
if [ ! -z "$1" ] && [ -e "$1" ]
then
path=`realpath -s "$1"` # read argument as absolute path
else
path="$PWD" # No valid argument, so we take pwd
fi
paths=""
while [ "$path" != / ];do
paths+=" $path"
path=`dirname "$path"`
done
paths+=" $path" # Adding / to pathlist too
ls -ld $paths
Avec realpath -s
vous pouvez saisir le chemin absolu, mais vous ne suivrez pas le lien. Si aucun argument n'est donné, nous utiliserons pwd comme fichier/répertoire à lister.
Nous ajoutons chaque chemin à une liste. Cela nous donne l'avantage d'une meilleure mise en page au final, de sorte que nous obtenons une belle table car nous exécutons ls
une seule fois.
Sortie :
bobafit:~$ magic_ls_-l_command /usr/bin/python3
drwxr-xr-x 21 root root 4096 Jun 20 10:07 /
drwxr-xr-x 14 root root 4096 Sep 5 2019 /usr
drwxr-xr-x 2 root root 110592 Jun 20 10:07 /usr/bin
lrwxrwxrwx 1 root root 9 Apr 7 12:43 /usr/bin/python3 -> python3.8