GNU/Linux >> Tutoriales Linux >  >> Linux

¿El propósito del comando hash?

Si ejecuta hash muestra la ruta de todos los comandos ejecutados desde que se restableció el hash por última vez (hash -r )

[[email protected] ~]# hash
hash: hash table empty

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   1    /usr/bin/whoami

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   2    /usr/bin/whoami

De acuerdo con las páginas del manual, el propósito del hash es:

La utilidad /usr/bin/hash afecta la forma en que el entorno shell
actual recuerda las ubicaciones de las utilidades encontradas.
Dependiendo de los argumentos especificados, agrega ubicaciones de utilidades
a su lista de ubicaciones recordadas o purga los
contenidos de la lista. Cuando no se especifican argumentos,
informa sobre el contenido de la lista. El -r hace que
el shell olvide todas las ubicaciones recordadas.

Las utilidades proporcionadas como funciones integradas en el shell no son
reportadas por hash.

Aparte de ver cuántas veces ingresé un comando, no puedo ver la utilidad de hash .

Incluso apareció en los 15 comandos útiles principales de thegeekstuff.com

¿De qué manera es hash útil?

Respuesta aceptada:

hash es un comando integrado de bash. La tabla hash es una característica de bash que evita que tenga que buscar $PATH cada vez que escribe un comando almacenando en caché los resultados en la memoria. La tabla se borra en eventos que obviamente invalidan los resultados (como modificar $PATH )

El hash El comando es solo cómo interactúas con ese sistema (por cualquier razón que sientas que lo necesitas).

Algunos casos de uso:

  • Como vio, imprime cuántas veces presiona qué comandos si lo escribe sin argumentos. Esto podría decirle qué comandos usa con más frecuencia.

  • También puede usarlo para recordar archivos ejecutables en ubicaciones no estándar.

Ejemplo:

[[email protected] ~]# hash -p /lol-wut/whoami whoami
[[email protected] ~]# whoami
Not what you're thinking
[[email protected] ~]# which whoami
/usr/bin/whoami
[[email protected] ~]# /usr/bin/whoami
root
[[email protected] ~]#

Lo que podría ser útil si solo tiene un único ejecutable en un directorio fuera de $PATH que desea ejecutar simplemente escriba el nombre en lugar de incluir todo en ese directorio (que sería el efecto si lo agregara a $PATH ).

Sin embargo, un alias generalmente también puede hacer esto, y dado que está modificando el comportamiento del shell actual, no está asignado en los programas que inicia. Un enlace simbólico al ejecutable solitario es probablemente la opción preferible aquí. hash es una forma de hacerlo.

  • Puede usarlo para no recordar las rutas de los archivos. Esto es útil si aparece un nuevo ejecutable en un PATH anterior directorio u obtiene mv se dirigió a otro lugar y quiere obligar a bash a salir y encontrarlo de nuevo en lugar del último lugar donde recuerda haberlo encontrado.
Relacionado:Linux:¿sysrq no se reiniciará con una pulsación de tecla, pero lo hará con echo "b"> /proc/sysrq-trigger?

Ejemplo:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# cp /bin/ls /lol-wut
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /bin/ls
[[email protected] ~]# hash -d ls
[[email protected] ~]# ls
default.ldif  newDIT.ldif  notes.txt  users.ldif
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /lol-wut/ls
[[email protected] ~]#

El cp comando provocó una nueva versión de ls ejecutable para que aparezca antes en mi $PATH pero no desencadenó una purga de la tabla hash. Usé hash -d para purgar selectivamente la entrada para ls de la tabla hash. Luego, Bash se vio obligado a revisar $PATH de nuevo y cuando lo hizo, lo encontró en la ubicación más nueva (más temprano en $PATH de lo que se estaba ejecutando antes).

Puede invocar selectivamente este "buscar nueva ubicación del ejecutable desde $PATH ” comportamiento, sin embargo:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits    command
   0    /lol-wut/ls
[[email protected] ~]#

En su mayoría, solo querrá hacer esto si quisiera algo fuera de la tabla hash y no estuviera 100% seguro de poder cerrar sesión y luego volver a ingresar con éxito, o si desea conservar algunas modificaciones que ha realizado en su shell.

Para deshacerse de las asignaciones obsoletas, también puede hacer hash -r (o export PATH=$PATH ) que efectivamente solo purga toda la tabla hash de bash.

Hay muchas pequeñas situaciones como esa. No sé si lo llamaría uno de los comandos "más útiles", pero tiene algunos casos de uso.


Linux
  1. Domina el comando ls de Linux

  2. Introducción al comando de alternativas en Linux

  3. Una introducción al comando diff

  4. Una vista práctica del comando xargs

  5. ¿Cómo usar el comando basename?

Guía de Ansible:el comando ad-hoc

Explicación del comando tar de Linux

Domina la línea de comandos de Linux

El comando elegir en Linux

El comando del temporizador en Linux

Ejemplos esenciales del comando ps en Linux