¿Cómo puedo saber si una carpeta es realmente un enlace simbólico y cómo puedo solucionarlo si está roto?

28

¿Cómo puedo saber si tengo un enlace simbólico, un acceso directo de algún tipo o una carpeta en Linux? Por favor, vea la siguiente captura de pantalla.

enlace simbólico en shell de linux

Como puede ver, el lscomando enumera los objetos donde algunos están coloreados en azul oscuro, mientras que otros son de color azul claro (cian). ¿Qué son estos objetos de color cian? ¿Son estos enlaces simbólicos reales?

Como puede ver, no puedo cdal que se llama HDD.

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

Creo que tiene que redirigir /media/hddy he notado que falta la carpeta del disco duro.

¿Hay alguna manera de arreglar esto?

Actualización: Aquí están los resultados del ls -alcomando.

enlace simbólico en linux shell 2

Como puede ver, dice hdd -> /media/hddy está coloreado en rojo. ¿Significa esto que está roto o que está montado automáticamente, es decir, cuando se conecta un disco duro físico?

Actualización: Aquí está el resultado del grep media /etc/auto*comando.

enlace simbólico en linux shell 3

¿Qué hacen estos /etc/auto.master:/media/nety /etc/auto.networkentradas?

Aquí están los resultados del ls -Fal /mediacomando.

enlace simbólico en linux shell 4

¿Esto es de alguna ayuda? ...

Aquí están los resultados staty los filecomandos, así como las listas de / usr y / bin.

enlace simbólico en linux shell 5

¿Esto me ayuda de alguna manera? ... ¿Te ayuda a ayudarme? ...

Por otro lado, lo que debes saber es que este es un STB basado en Linux con BusyBox, es un sistema integrado. Por lo tanto, no todos los comandos pueden ser compatibles.

Actualización: última captura de pantalla, que muestra los archivos y los comandos compatibles en / sbin y / usr / sbin.

enlace simbólico en linux shell 6

Actualización: Nuevo recurso compartido agregado ...

Ahora he eliminado ese recurso compartido anterior y recreé uno con el mismo nombre que antes y también agregué un segundo recurso compartido ahora. Entonces ahora tengo dos de ellos.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

Las grabaciones se colocan en / media / net / dream1 / movie.

Además, para el recurso compartido dream2, he elegido no montarlo como un reemplazo de HDD en Mount Manager, ya que sospecho que no es posible tener más de un acto como HDD. ¿Dónde grabaría? A ambos lugares? ¿Con el doble de velocidad de datos? ... No creo que sea posible.

Por esta razón, no hay una subcarpeta llamada película para el recurso compartido dream2. Solo los que se especifican como reemplazo de HDD cuando se crean obtienen la subcarpeta de la película.

Si hago cdun disco duro desde la raíz, va a /media/net/dream1. Si yo cda ..(padre) vuelve a root (/).

En la raíz ls -alda hdd -> media/hdd. ls -al hddda hdd -> media/hdd. ls -al mediada /media/net/dream1.

Además, si cda /mediahay otro hddenlace simbólico. No lo he notado antes. Creo que esto se crea automáticamente cuando se monta un recurso compartido. Y si cda este disco duro va a/media/net/dream1 .

¿Un enlace simbólico hdd(/ hdd) que apunta a otro hddenlace simbólico (/ media / hdd), que a su vez apunta a la carpeta compartida (/ media / net / dream1)? ... Me estoy mareando ...

No era así antes de la versión 3.2.3 o al menos 3.2.0 de la imagen Enigma2.

Editar: Al configurar el segundo recurso compartido para que actúe como un reemplazo del disco duro, se convierte en el recurso compartido activo para la grabación. Al mismo tiempo, el recurso compartido que se configuró previamente para actuar como reemplazo de HDD ya no está activo, incluso si todavía está configurado como "sí" (actuar como reemplazo de HDD).

Si dream1 se usó por primera vez como reemplazo de HDD ("sí" para actuar como reemplazo) y luego dream2 está configurado para actuar como reemplazo de HDD, se convierte en el nuevo recurso compartido para la grabación. Todavía puedo ver y ver archivos de video almacenados en dream1 pero ya no puedo grabarlos. Si quiero volver a usar dream1 para la grabación, primero tengo que configurar dream2 en "no" (dejar de actuar como reemplazo de HDD) y luego restablecer dream1 a "yes".

Entonces no, no puede grabar en dos acciones al mismo tiempo. Uno de ellos se tiene que ir. Entonces es sueño1 o sueño2, no ambos. Aunque debo mencionar que es posible grabar más de un servicio (canal de televisión) si ambos están en el mismo transpondedor, si no recibe el mensaje "sin sintonizador libre". Este es un STB con un solo sintonizador.

Samir
fuente
3
por favor no pegue capturas de pantalla para el texto. copie y pegue el texto en su lugar, y use las etiquetas de código previo o retroactivas para conservar la sangría / formateo. y edite el texto al mínimo requerido para mostrar lo que sea que esté tratando de mostrar. Por cierto, un problema con las capturas de pantalla es que las fuentes diminutas se vuelven aún más pequeñas, hasta el punto de no poder leerse, cuando se ven en pantallas de mayor resolución (por ejemplo, 1920x1200 o 2566x1440) ... los píxeles son fijos, el texto se puede escalar.
cas
@CraigSanders Sanders ¡Eres alto ... en resolución! ;) ¡Con curiosidad, te escucho hombre! Realmente no pensé en ese aspecto. Gracias por el consejo. Intentaré usar un bloque de código la próxima vez.
Samir
Lo que ls -alrealmente hace es mostrar todos los archivos (-a) en una larga lista (-l). Sí, esto me da más información, pero ¿me ayuda a identificar un enlace simbólico? Si tiene una flecha a la derecha, ¿es así como sé si es un enlace simbólico? El otro identificador es obviamente el código de color, pero algunos de ustedes sugieren que no se puede confiar en el color.
Samir
Esto ya no es un problema. Monté un recurso compartido CIFS de Windows a través del complemento Mount Manager (Dreambox, Enigma 2, versión 3.2.3) y decidí usarlo como reemplazo de HDD. Después de hacer esto, el ls -alcomando mostró hdd -> media/hdd. Y ahora es posible cdhdd y el enlace funciona. Pero lo interesante es que se ls -al mediamuestra hdd -> /media/net/mydreamy esto es, de hecho, a dónde va cuando hago cdun disco duro. El "mydream" es el nombre de la acción. ¿Por qué obtengo resultados diferentes?
Samir
Supongo que hay algún mecanismo (posiblemente una regla udev) para asegurarse de que el enlace simbólico / hdd se actualice para apuntar a cualquier dispositivo o recurso compartido, de modo que otros programas y scripts puedan usar / hdd (después de probar que el directorio apunta a un fs montado). solo por curiosidad, ¿qué sucede si monta un segundo disco o comparte? ¿Hace un enlace simbólico / hde? ¿o dreambox está limitado a un directorio de grabación?
cas

Respuestas:

29

Puedes usar file, stat o ls.

archivo:

El comando de archivo se utiliza para clasificar archivos en función de su tipo (enlace simbólico, directorio, dispositivo) o contenido (texto, gzip, imagen, tar, ..., independientemente de su extensión):

$ archivo / dev / stdout
/ dev / stdout: enlace simbólico a `/ proc / self / fd / 1 '
$ archivo / proc / self / fd / 1
/ proc / self / fd / 1: enlace simbólico a `/ dev / pts / 0 '
$ archivo / dev / pts / 0
/ dev / pts / 0: carácter especial (136/0)
$ archivo / etc / passwd
/ etc / passwd: texto ASCII

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1 root root 15 27 de enero 07:55 / dev / stdout -> / proc / self / fd / 1

stat:

el comando stat imprime los metadatos del archivo como permisos, tamaño, número de bloques, etc.

$ stat / dev / stdout
  Archivo: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Tamaño: 15 bloques: 0 bloque IO: 4096 enlace simbólico
Dispositivo: 5h / 5d Inode: 1212 Enlaces: 1
Acceso: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Acceso: 2014-01-27 11: 22: 47.971187828 -0200
Modificar: 2014-01-27 07: 55: 13.996981285 -0200
Cambio: 2014-01-27 07: 55: 13.996981285 -0200
 Nacimiento:
filipenf
fuente
¿A qué se file hddrefiere? No lo entiendo ...
Samir
El stat hddme da -sh: stat: not found.
Samir
Creo que no tienes el comando stat (o no está en tu $ PATH). De todos modos, el comando de archivo puede darle una oportunidad ...
filipenf
Para bash en el terminal Mac, el comando de archivo sigue los enlaces simbólicos de forma predeterminada. Si quieres ver si es un enlace simbólico, agrega el comando -h. Que no sigue enlaces simbólicos.
ClintM
7

golpetazo:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi
Glenn Jackman
fuente
3

La forma más fácil de ver qué tipo de entidad es un archivo dado sería usar el filecomando. Tiene una salida clara y sensata sin requerirle que recuerde cuáles lsson las marcas del clasificador, ni depender de una salida de color que puede variar de un usuario a otro y de una máquina a otra. Por ejemplo:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Si te encuentras en un sistema sin filepuedes usar el statcomando que te dirá qué tipo de entrada de archivo es y dónde apunta. Para saber si un enlace está roto, deberá ejecutar stat -Lenlaces de desreferenciación, lo que generará un error si el enlace está roto.

En cuanto a la segunda parte de su pregunta, el mediadirectorio a menudo es administrado por montadores automáticos de algún tipo. Su sistema /media/hddpuede usar la entrada para dispositivos de almacenamiento masivo USB o incluso puede estar esperando el tipo de disco duro correcto (dispositivo de bloque ATA vs SCSI vs Xen). Los enlaces rotos no dañarán nada a menos que un programa intente usarlos, y los enlaces de medios son realmente para su conveniencia. Puede dejar el /hddenlace de forma segura o eliminarlo como desee.

joruffin
fuente
Tienes razón, parece que el archivo no es un comando aquí, dice -sh: file: not foundcuándo lo hago filey entro.
Samir
Suena como si tu $ PATH estuviera un poco restringido. Intente ejecutarlo directamente en su lugar:/usr/bin/file
joruffin
Veo por tu otro comentario que estás en un decodificador. Es posible que eso no tenga nada más que Busybox instalado, y Busybox no emula el filecomando, pero tiene soporte para el statcomando si se compiló. Todavía puede estar fuera de su $ PATH, o vivir en un lugar oscuro como / sbin / stat o / usr / sbin / stat.
joruffin
No parece que tenga soporte para ninguno fileo stat. Revisé las rutas que mencionas (mira la captura de pantalla anterior). De todos modos ... lo que estás diciendo es que en un sistema Linux ideal, el filecomando, seguido de la ruta de búsqueda del archivo o carpeta de destino me revelaría qué tipo de entidad es.
Samir
2
En cuanto a los comandos admitidos en Busybox, puede ejecutarlos /usr/bin/busyboxy le mostrará todos los comandos para los que es compatible, incluso si los comandos no están instalados. Para usar un comando busybox puede ejecutar /usr/bin/busybox <command> <parameters>. Entonces, si dice que admite el comando stat, puede ejecutarlo /usr/bin/busybox stat /hdd. Para facilitar su uso, puede crear enlaces simbólicos para Busybox con el nombre del comando a invocar. Si es compatible con el comando stat, podría facilitar su ejecución ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Sí, los cian son enlaces simbólicos
  2. Para ver hacia dónde apuntan: ls -Fal
  3. Salida ls -Fal /media

Este es probablemente un punto de montaje automático de algún tipo.

grep media /etc/auto* podría producir un golpe.

Nils
fuente
¿Qué es un punto de montaje automático? ¿Quieres decir que ... cuando conecto una unidad de disco SATA física se monta en este punto? ... se trata de un STB de Linux y no tiene un HDD incorporado, pero sí cuenta con un puerto eSATA en la parte posterior. Esto podría estar dedicado para este propósito.
Samir
@Sammy Sí /mediaes el punto de montaje estándar para dispositivos PnP.
Nils