Ver permiso / propietario del árbol de directorios completo


27

Recuerdo haber hecho algo como "XXX / home / user / dir / child / file" y me devolvió el propietario y / o el permiso de:

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

Pero no recuerdo cuál era este comando. Alguien alguna idea?


Al no ver nada que alumbra desde apropos modeo apropos permissionsen OS X y Debian. ¿Sabes qué plataforma / distribución estabas usando? ¿Podría haber sido un comando local del sitio? Podrías crear una secuencia de comandos de esta herramienta usando dirnamey stat.
mrb

Usando Arch Linux, y una instalación bastante sencilla, por lo que no hay demasiadas herramientas adicionales instaladas. Tenga en cuenta que se trataba de permisos AND / OR, no estoy seguro en este momento. Cualquiera de los dos sería útil.
favor,

Respuestas:


31

El comando podría haber sido:

namei -m /home/user/dir/child/file

66
namei -moes genial, que también te da el dueño.
earthmeLon

2
CUIDADO: namei no mostrará las ACL de Linux o las MAC de SELinux. Me di cuenta de que una ACL estaba bloqueando nginx al verificar manualmente consudo su nginx -s/bin/bash
Ray Foss

28

Creo que podrías estar pensando en el treecomando. Por ejemplo:

$ 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
...
...

Los interruptores anteriores hacen lo siguiente:

  • -p - permisos
  • -u - nombre de usuario / ID de usuario
  • -f - ruta completa
  • -i - no imprimir líneas de sangría
  • -d - imprimir directorios solamente

Referencias


3
Creo que se le pidió que mostrara los antepasados ​​de /home/user/dir/child/fileno los niños.
Raphael Ahrens

@RaphaelAhrens: sí, me doy cuenta de que no hay un comando que conozca que haga exactamente eso, sin embargo, existe el comando de árbol que hace lo que mostré y es sospechosamente similar a lo que estaba pensando el OP.
slm

¿Es -urealmente necesario? Parece que es el valor predeterminado aquí (Tree ver. 1.6.0 bajo GNU bash 4.2.45). ¿Existe una opción para silenciar el "nombre de usuario / ID de usuario"?
Nikos Alexandris

1
@NikosAlexandris: si suelto ese interruptor, no obtengo el nombre de usuario. Mi ver: árbol v1.6.0. Estoy en Fedora 19, GNU bash, versión 4.2.45 (1) -release (x86_64-redhat-linux-gnu).
slm

¿Diferentes "valores predeterminados" entre las versiones de bash? Gracias por informarme.
Nikos Alexandris

3

Después de darle un poco, se me ocurrió esto

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

La salida se ve así

-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

Espero que esté bien que esté en orden inverso.

Según los comentarios, aquí hay una forma de enumerar desde la raíz hacia abajo:

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

1
Puede revertir con | tacsi lo tiene, o | sed '1!G;h;$!d'si no.
mrb

2
Esto se romperá para los caminos relativos. Hazlo en su [ "$l_path" != / -a "$l_path" != . ]lugar.

El nombre de directorio de @Evan Teitelman debería dar el camino completo
Raphael Ahrens

1
@RaphaelAhrens no, al final devolverá un punto para la ruta relativa.
prisa el

1
Además, stat -lprobablemente debería ser stato ls -ld.

0

En el directorio del que desea conocer los permisos y propietarios del antepasado:

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

Tenga en cuenta que después de eso, estará en /:) si desea volver a donde estaba, ajuste el comando dentro

HERE=$(pwd)
...
cd ${HERE}

-1

El comando que está buscando para enumerar permisos y propietarios / grupos es ls -l .

La opción -l se usa para el formato de listado largo.

ls -l / ruta / a / lista

Además, si desea enumerar y los archivos ocultos , agregue la opción -a (todos) .

ls -al / ruta / a / lista

Además, si desea enumerar los permisos en sus subdirectorios, use la opción -R (recursiva) .

ls -Rl / ruta / a / lista

La primera columna muestra los permisos (lectura (r), escritura (w), ejecución (x)) y algunos permisos especiales (directorios (d), - (archivo normal)) y la tercera y cuarta columna muestra el archivo / directorio propietario y grupo respectivamente.


2
No creo que eso sea lo que se pide. Parece que el autor de la pregunta busca una lista de permisos de directorios que conducen a un archivo.
Mat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.