Questa domanda ha già ricevuto risposta in superuser.com (non so se posso contrassegnare una domanda da un sito come duplicata da un altro). La soluzione è semplice come scrivere (supponendo che io sia nella stessa directory del nome del file di destinazione):
$ namei -l $(pwd)/somefile ## or `namei -l $(realpath -s somefile)`
A causa di -l
, elenca i permessi di base in formato esteso per ciascuna directory principale.
Devo usare pwd
/realpath
perché namei
non risolve percorsi relativi. Se non sono nella directory di destinazione, basta scrivere il percorso completo.
Ho creato questo piccolo script che fa questo. Uso cd "$1"; pwd
per ottenere la directory corrente in modo che i percorsi non siano canonizzati (diciamo, se provi magic-ls .
e la tua directory corrente è /var/lib/postgres, ma questo è un collegamento simbolico a /mnt/postgres, otterrai /var
, /var/lib
e /var/lib/postgres
, durante l'utilizzo di realpath
otterresti /mnt
e /mnt/postgres
)
magic-ls() {
local current=$(cd "$1"; pwd)
while [[ $current != '/' ]]; do
ls -ld "$current"
current=$(dirname "$current")
done
}
Ecco un esempio di output:
[[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
Tra l'altro funzionerà anche senza argomenti dal cd ""
non cambia la tua directory.
Modifica:rimosso realpath
dal controllo while, dal momento che potrebbe portare a risultati imprevisti se ci fosse un collegamento a /
nel percorso e non era necessario.
Usando semplicemente l'espansione dei parametri:
#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
ls -lLd "$path"
path="${path%/*}"
done
metodo di chiamata :
bash test.sh /var/lib/program/subfolder/somefile
dare
-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
Ho scritto uno script bash per te. Avrà alcuni bug, se hai spazio nei nomi. Se ti dà fastidio, sono felice per i consigli sui cambiamenti nei commenti.
#!/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
Con realpath -s
puoi prendere il percorso assoluto, ma non seguirai il link. Se non viene fornito alcun argomento, useremo pwd come file/directory da elencare.
Aggiungiamo ogni percorso a un elenco. Questo ci dà il vantaggio di un layout migliore alla fine, in modo da ottenere una bella tabella perché eseguiamo ls
solo una volta.
Uscita:
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