bash :: distinguir visualmente enlaces físicos en ls

bash :: distinguir visualmente enlaces físicos en ls

estoy usandointentoshell en Ubuntu preciso.

soy parcial aenlaces simbólicosenintentoincluso cuando unenlace durotendría más sentido porque se pueden identificar más fácilmente con unes. En cambio, paraenlaces durosTengo que comparar visualmenteinodonúmeros. Esto es más engorroso en comparación con la producción deesen un enlace suave que muestra el objetivo con "-->" y puede tener aplicado un esquema de color diferente. ¿Hay alguna manera de teneres¿Diferenciar visualmente los enlaces físicos de los "archivos normales"? Por ejemplo, ¿quizás coloreando de forma diferente archivos con un recuento de referencias superior a 1?

Entiendo que la pregunta no está formulada correctamente ya que conceptualmente un enlace físico es solo otro nombre para el inodo y, por lo tanto, no se puede distinguir de un "archivo normal" y que no existe el concepto de destino como en los enlaces simbólicos, pero entiendes mi caso de uso.

Respuesta1

ls -lEl resultado muestra la cantidad de enlaces físicos a una entrada del sistema de archivos entre los permisos y el propietario:

$ mkdir foo
$ ls -ld foo
drwxr-xr-x  2 danielbeck  staff  68 15 Aug 18:49 foo

Es 2por defecto para directorios vacíos foo/.y foo. Cada subdirectorio agrega uno para su ... A menos que esté en OS X y tenga una cordura cuestionable, ese será el único directorio de enlaces físicos que obtendrá.

Los archivos, por supuesto, solo muestran enlaces físicos "reales", por lo que cualquier cosa menos 1indica que hay un vínculo físico en alguna parte:

$ touch bar
$ ln bar baz
$ ls -l bar baz
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 bar
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 baz

Mi (BSD/OS X) lsno tiene opciones relacionadas con enlaces físicos, pero puede escribir su propia función de shell, como la siguiente, que imprime solo el recuento de enlaces físicos y, de lo contrario, es ls -F1(si ls -les demasiado engorroso):

function lss {
    OLDIFS="$IFS"
    IFS=$'\n'
    for line in $( ls -d1 $@ )
        do stat -f '%N%T (%l)' "$line"
    done
    IFS="$OLDIFS"
}

Salida para los dos enlaces duros y un archivo no relacionado qux:

$ lss bar baz qux
bar (2)
baz (2)
qux (1)

información relacionada