GNU/Linux >> Tutoriales Linux >  >> Linux

`ls -l` para todos los directorios principales

Esta pregunta ya ha sido respondida en superuser.com (no sé si puedo marcar una pregunta de un sitio como duplicada de otro). La solución es tan simple como escribir (asumiendo que estoy en el mismo directorio que el nombre del archivo de destino):

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

Debido a -l , enumera los permisos básicos en formato largo para cada directorio principal.

Tengo que usar pwd /realpath porque namei no resuelve las rutas relativas. Si no estoy en el directorio de destino, simplemente escriba la ruta completa.


Hice este pequeño script que hace esto. yo uso cd "$1"; pwd para obtener el directorio actual para que las rutas no se canonicalicen (por ejemplo, si intenta magic-ls . y su directorio actual es /var/lib/postgres, pero ese es un enlace simbólico a /mnt/postgres, obtendrá /var , /var/lib y /var/lib/postgres , mientras usa realpath obtendrías /mnt y /mnt/postgres )

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

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

Aquí hay una salida de ejemplo:

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

Por cierto, también funcionará sin argumentos desde cd "" no cambia su directorio.

Editar:eliminado realpath de la comprobación while, ya que eso podría generar resultados inesperados si hubiera un enlace a / en el camino, y no era necesario.


Simplemente usando la expansión de parámetros:

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

método de llamada:

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

dando

-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

Escribí un script bash para ti. Tendrá algunos errores, si tiene espacio en los nombres. Si te molesta, estoy feliz por las recomendaciones de cambios en los comentarios.

#!/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 puede tomar la ruta absoluta, pero no seguirá el enlace. Si no se da ningún argumento, usaremos pwd como archivo/directorio para listar.

Agregamos cada ruta a una lista. Esto nos da la ventaja de un mejor diseño al final, de modo que obtenemos una buena tabla porque ejecutamos ls solo una vez.

Salida:

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. Espacio reservado para la raíz en un sistema de archivos:¿por qué?

  2. ¿Poner en minúsculas todos los directorios bajo un directorio?

  3. ¿El @reboot de Crontab solo funciona para root?

  4. Station:una estación de trabajo inteligente para todas sus aplicaciones

  5. ¿Cuál es la contraseña raíz predeterminada para MySQL 5.7?

Cómo crear un directorio compartido para todos los usuarios en Linux

11 ejemplos útiles de comandos divididos para sistemas Linux

Comando Linux rmdir para principiantes (con ejemplos)

Cómo enumerar todos los usuarios en Linux

Módulo IPTables ip_tables no encontrado para root

¿Cómo enumero a todos los usuarios con root?