GNU/Linux >> Linux Esercitazione >  >> Linux

`ls -l` per tutte le directory padre

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

Linux
  1. Spazio riservato per il root su un filesystem:perché?

  2. Come creare una partizione Ext4 per tutti gli utenti?

  3. Qual è la password di root predefinita per MySQL 5.7

  4. Come elencare le dimensioni della directory di tutte le directory figlio?

  5. Dov'è .bashrc per root?

Come creare una directory condivisa per tutti gli utenti in Linux

11 utili esempi di comandi divisi per sistemi Linux

Comando Linux rmdir per principianti (con esempi)

Come elencare tutti gli utenti in Linux

@reboot di Crontab funziona solo per il root?

Station:una workstation intelligente per tutte le tue app