Diese Frage wurde bereits in superuser.com beantwortet (ich weiß nicht, ob ich eine Frage von einer Seite als Duplikat von einer anderen markieren kann). Die Lösung ist so einfach wie das Schreiben (vorausgesetzt, ich befinde mich im selben Verzeichnis wie der Zieldateiname):
$ namei -l $(pwd)/somefile ## or `namei -l $(realpath -s somefile)`
Wegen -l
, listet es grundlegende Berechtigungen im Langformat für jedes übergeordnete Verzeichnis auf.
Ich muss pwd
verwenden /realpath
weil namei
löst relative Pfade nicht auf. Wenn ich nicht im Zielverzeichnis bin, schreibe einfach den vollständigen Pfad.
Ich habe dieses kleine Skript erstellt, das dies tut. Ich verwende cd "$1"; pwd
um das aktuelle Verzeichnis zu erhalten, damit Pfade nicht kanonisiert werden (z. B. wenn Sie magic-ls .
versuchen und Ihr aktuelles Verzeichnis ist /var/lib/postgres, aber das ist ein symbolischer Link zu /mnt/postgres, Sie erhalten /var
, /var/lib
und /var/lib/postgres
, während Sie realpath
verwenden Sie würden /mnt
erhalten und /mnt/postgres
)
magic-ls() {
local current=$(cd "$1"; pwd)
while [[ $current != '/' ]]; do
ls -ld "$current"
current=$(dirname "$current")
done
}
Hier ist eine Beispielausgabe:
[[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
Übrigens funktioniert es seit cd ""
auch ohne Argument ändert Ihr Verzeichnis nicht.
Bearbeiten:realpath
entfernt aus der While-Prüfung, da dies zu unerwarteten Ergebnissen führen könnte, wenn ein Link auf /
vorhanden wäre im Pfad und wurde nicht benötigt.
Verwenden Sie einfach die Parametererweiterung:
#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
ls -lLd "$path"
path="${path%/*}"
done
Aufrufmethode :
bash test.sh /var/lib/program/subfolder/somefile
geben
-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
Ich habe ein Bash-Skript für Sie geschrieben. Es wird einige Fehler haben, wenn Sie Platz in den Namen haben. Wenn es dich stört, freue ich mich über Änderungsvorschläge in den Kommentaren.
#!/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
Mit realpath -s
Sie können den absoluten Pfad abfangen, aber Sie werden dem Link nicht folgen. Wenn kein Argument angegeben wird, verwenden wir pwd als aufzulistende Datei/Verzeichnis.
Wir hängen jeden Pfad an eine Liste an. Das gibt uns am Ende den Vorteil eines besseren Layouts, sodass wir eine schöne Tabelle bekommen, weil wir ls
ausführen nur einmal.
Ausgabe:
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