Berechtigung / Eigentümer des vollständigen Verzeichnisbaums anzeigen

27

Ich erinnere mich, etwas wie "XXX / home / user / dir / child / file" gemacht zu haben und es gab den Besitzer und / oder die Erlaubnis von:

/home
/home/user
/home/user/dir
/home/user/child
/home/user/child/file

Aber ich erinnere mich nicht, was dieser Befehl war. Jemand eine Idee?

Bitte lösche mich
quelle
Nicht etwas zu sehen von Aufklärung apropos modeoder apropos permissionsauf OS X und Debian. Wissen Sie, welche Plattform / Distribution Sie verwendet haben? Könnte es ein standortlokaler Befehl gewesen sein? Sie könnten ein solches Tool mit dirnameund skripten stat.
mrb
Verwenden Sie Arch Linux und eine hübsche Vanille-Installation, damit nicht zu viele zusätzliche Tools installiert werden. Beachten Sie, dass es Eigentümer und / oder Berechtigungen waren, ich bin mir zu diesem Zeitpunkt nicht sicher. Beides wäre nützlich.
Bitte löschen Sie mich

Antworten:

31

Der Befehl könnte gewesen sein:

namei -m /home/user/dir/child/file
user59736
quelle
6
namei -moist toll, dass es dir auch den besitzer gibt.
ErdeMeLon
2
ACHTUNG: namei zeigt keine Linux-ACLs oder SELinux-MACs an. Ich fand heraus, dass eine ACL Nginx blockiert, indem ich manuell nachsudo su nginx -s/bin/bash
Ray Foss vom
28

Ich denke, Sie könnten an den treeBefehl denken . Beispielsweise:

$ tree -pufid apps/glassfish3/ | less
apps/glassfish3
[drwxr-xr-x saml    ]  apps/glassfish3/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/config
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/doc-files
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/security
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/sql
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/decorator
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb/embeddable
...
...

Die obigen Schalter bewirken Folgendes:

  • -p - Berechtigungen
  • -u - Benutzername / Benutzer-ID
  • -f - vollständigen Pfad
  • -i - Keine Einrückungslinien drucken
  • -d - Nur Verzeichnisse drucken

Verweise

slm
quelle
3
Ich denke, es wurde gebeten, die Vorfahren /home/user/dir/child/fileder Kinder nicht anzuzeigen .
Raphael Ahrens
@RaphaelAhrens - ja, das ist mir klar, aber es gibt keinen Befehl, von dem ich weiß, dass er genau das tut. Es gibt jedoch den Baum-Befehl, der das tut, was ich gezeigt habe, und der ist verdächtig ähnlich dem, woran das OP gedacht hat.
SLM
Ist das -uwirklich nötig? Es scheint, dass es hier Standard ist (Tree Version 1.6.0 unter GNU Bash 4.2.45). Gibt es eine Option, um den "Benutzernamen / Benutzer-ID" zum Schweigen zu bringen?
Nikos Alexandris
1
@NikosAlexandris - Wenn ich diesen Schalter drücke, erhalte ich keinen Benutzernamen. Mein ver: tree v1.6.0. Ich bin auf Fedora 19, GNU bash, Version 4.2.45 (1) -release (x86_64-redhat-linux-gnu).
slm
Unterschiedliche "Vorgaben" zwischen den Bash-Versionen? Danke für die Information.
Nikos Alexandris
3

Nachdem ich ein bisschen nachgedacht hatte, kam ich auf diese Idee

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done

Die Ausgabe sieht so aus

-rw------- 1 tant tant 181016423 Jun 25 23:49:17 2013 /home/tant/test_file
drwxr-xr-x 85 tant tant 5632 Jul  9 19:40:11 2013 /home/tant
lrwxr-xr-x 1 root wheel 8 Sep  4 23:53:27 2012 /home -> usr/home

Ich hoffe es ist in Ordnung, dass es in umgekehrter Reihenfolge ist.

Basierend auf den Kommentaren ist hier eine Möglichkeit, eine Liste von der Wurzel abwärts zu erstellen:

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done | sed '1!G;h;$!d'
Raphael Ahrens
quelle
1
Sie können mit umkehren, | tacwenn Sie es haben, oder | sed '1!G;h;$!d'wenn nicht.
mrb
2
Dies wird für relative Pfade unterbrochen. Mach [ "$l_path" != / -a "$l_path" != . ]stattdessen.
@Evan Teitelman Dirname sollte den vollständigen Pfad angeben
Raphael Ahrens
1
@RaphaelAhrens nein, es wird am Ende einen Punkt für den relativen Pfad zurückgeben.
Ansturm
1
Auch stat -lsollte wohl statoder sein ls -ld.
0

In dem Verzeichnis, in dem Sie die Berechtigungen und Eigentümer des Vorgängers erfahren möchten:

for i in $(seq 0 $(pwd | tr -cd / | wc -c)) ; do pwd ; ls -lad ; cd .. ; done

Beachten Sie, dass Sie sich danach in /:) befinden, wenn Sie zu Ihrem ursprünglichen Standort zurückkehren möchten, schließen Sie den Befehl in den Ordner ein

HERE=$(pwd)
...
cd ${HERE}
yPhil
quelle
-1

Der Befehl, den Sie zum Auflisten von Berechtigungen und Eigentümern / Gruppen benötigen , lautet ls -l .

Die Option -l wird für ein langes Listenformat verwendet.

ls -l / path / to / list

Wenn Sie außerdem die versteckten Dateien auflisten möchten, fügen Sie die Option -a (all) hinzu .

ls -al / path / to / list

Auch, wenn Sie auf die Liste Berechtigungen in Ihrem wollen Verzeichnisse verwenden -R (rekursiv) Option.

ls -Rl / path / to / list

Die erste Spalte zeigt die Berechtigungen (Lesen (r), Schreiben (w), Ausführen (x)) und einige spezielle Berechtigungen (Verzeichnisse (d), - (reguläre Datei)) und die dritte und vierte Spalte zeigt Ihnen die Datei / das Verzeichnis Eigentümer bzw. Gruppe.

Dastergon
quelle
2
Ich glaube nicht, dass danach gefragt wird. Es sieht so aus, als würde der Fragesteller nach einer Liste von Berechtigungen für Verzeichnisse suchen, die zu einer Datei führen.
Mat