¿Detectar todos los enlaces que existen que apuntan a /tmp?

¿Detectar todos los enlaces que existen que apuntan a /tmp?

Quiero saber qué enlaces de archivos existen que apuntan a mi /tmpcarpeta en Ubuntu.

Fondo:
Tuve un problema: /tmppor algún accidente, los privilegios de mi carpeta se cambiaron a 755. El sistema ya no funcionaba correctamente como usuario que no fuera root.

Tal vez haya un enlace a /tmpalgún lugar y el comando

chmod 755 . -Rf 

llamado allí en esa carpeta estaba afectando la /tmpcarpeta principal.

Tuve que repararlo con:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

Sólo tengo un sistema de archivos, así que no debería haber ningún problema con eso.

Respuesta1

prueba esto:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

Salida de muestra:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied

Respuesta2

Hasta donde yo sé, no existe una manera fácil de enumerar todos los enlaces simbólicos que apuntan a un inodo. Por lo tanto, recomendaría usar el estándar.encontrarutilidad con el-ly-mismo archivointerruptores:

  • -mismo archivose comparará según el inodo de su archivo de destino,
  • -lIncluirá enlaces simbólicos en la búsqueda, que es lo que estás buscando.

Aquí hay un ejemplo con /bin/dash en /bin:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

En este resultado, puede ver tanto con el número de inodo (primera columna) como con la flecha (última) que /bin/sh en un enlace simbólico a /bin/dash. Si fueran enlaces duros, el número de inodo sería el mismo para diferentes archivos y no habría ninguna flecha en la última columna.

Finalmente, si tuviera la necesidad de buscar estos enlaces en un sistema de archivos completo, excluiría algunos directorios como/desarrollador,/procesoy/sistemade la búsqueda. Esto se haría con el-caminoy-ciruela pasaswicthes (puedes agregar tantos como quieras con-ocambiar significadoo),2>/dev/nuloestá aquí para enmascarar posibles errores:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

Como buscar en un sistema de archivos completo puede llevar mucho tiempo (principalmente dependiendo de su tamaño), consideraré esta opción como último recurso. Es como buscar una aguja en un pajar: no es imposible pero requiere mucho esfuerzo...

Respuesta3

Encontré la respuesta gracias a esta pregunta:Linux: ¿Encontrar todos los enlaces simbólicos de un archivo 'original' determinado? ('enlace de lectura' inverso)

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/

información relacionada