GNU/Linux >> LINUX-Kenntnisse >  >> Linux

`ls -l` für alle übergeordneten Verzeichnisse

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

Linux
  1. Alle Verzeichnisse in einem Verzeichnis klein schreiben?

  2. @reboot von Crontab funktioniert nur für Root?

  3. Station – Eine intelligente Workstation für alle Ihre Apps

  4. Was ist das Standard-Root-Passwort für MySQL 5.7

  5. Wie listet man die Verzeichnisgröße aller untergeordneten Verzeichnisse auf?

11 Nützliche Split-Befehlsbeispiele für Linux-Systeme

Linux-rmdir-Befehl für Anfänger (mit Beispielen)

So listen Sie alle Benutzer in Linux auf

Einfaches Passwort für Root-Benutzer auf CentOS aktivieren

ulimit für root-Benutzer bestimmen

Wie liste ich alle Benutzer mit root auf?