GNU/Linux >> Tutoriels Linux >  >> Linux

`ls -l` pour tous les répertoires parents

Cette question a déjà reçu une réponse dans superuser.com (je ne sais pas si je peux marquer une question d'un site comme doublon d'un autre). La solution est aussi simple que d'écrire (en supposant que je suis dans le même répertoire que le nom de fichier cible) :

$ namei -l $(pwd)/somefile   ## or `namei -l $(realpath -s somefile)`

A cause de -l , il répertorie les autorisations de base au format long pour chaque répertoire parent.

Je dois utiliser pwd /realpath parce que namei ne résout pas les chemins relatifs. Si je ne suis pas dans le répertoire cible, écrivez simplement le chemin complet.


J'ai fait ce petit script qui fait ça. J'utilise cd "$1"; pwd pour obtenir le répertoire courant afin que les chemins ne soient pas canonisés (par exemple, si vous essayez magic-ls . et votre répertoire actuel est /var/lib/postgres, mais c'est un lien symbolique vers /mnt/postgres, vous obtiendrez /var , /var/lib et /var/lib/postgres , tout en utilisant realpath vous obtiendriez /mnt et /mnt/postgres )

magic-ls() {
    local current=$(cd "$1"; pwd)

    while [[ $current != '/' ]]; do
        ls -ld "$current"
        current=$(dirname "$current")
    done
}

Voici un exemple de sortie :

[[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

Au fait, cela fonctionnera également sans argument depuis cd "" ne change pas votre répertoire.

Édit :supprimé realpath de la vérification while, car cela pourrait conduire à des résultats inattendus s'il y avait un lien vers / dans le chemin, et était inutile.


En utilisant simplement l'expansion des paramètres :

#!/usr/bin/env bash
path="$1"
while test -n "$path"; do
    ls -lLd "$path"
    path="${path%/*}"
done

méthode d'appel :

bash test.sh /var/lib/program/subfolder/somefile

donner

-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

J'ai écrit un script bash pour vous. Il y aura quelques bogues, si vous avez de l'espace dans les noms. Si cela vous dérange, je suis heureux de changer les recommandations dans les commentaires.

#!/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

Avec realpath -s vous pouvez saisir le chemin absolu, mais vous ne suivrez pas le lien. Si aucun argument n'est donné, nous utiliserons pwd comme fichier/répertoire à lister.

Nous ajoutons chaque chemin à une liste. Cela nous donne l'avantage d'une meilleure mise en page au final, de sorte que nous obtenons une belle table car nous exécutons ls une seule fois.

Sortie :

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. Espace réservé pour la racine sur un système de fichiers - Pourquoi ?

  2. Supprimer tous les fichiers/répertoires sauf un fichier ?

  3. Le @reboot de Crontab ne fonctionne que pour Root ?

  4. Comment créer une partition Ext4 pour tous les utilisateurs ?

  5. Station – Une station de travail intelligente pour toutes vos applications

11 exemples de commandes Split utiles pour les systèmes Linux

Commande Linux rmdir pour les débutants (avec exemples)

Comment lister tous les utilisateurs sous Linux

Mettre en minuscules tous les répertoires sous un répertoire ?

Où est .bashrc pour root ?

Activer le mot de passe simple pour l'utilisateur root sur CentOS