hash
es un comando incorporado bash. La tabla hash es una característica 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
comando es solo cómo interactúa con ese sistema (por cualquier razón que sienta que necesita).
Algunos casos de uso:
Como viste, imprime cuántas veces tocas qué comandos si lo escribes sin argumentos. Esto podría decirle qué comandos usa con más frecuencia.
También puede usarlo para recordar ejecutables en ubicaciones no estándar.
Ejemplo:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
Lo que podría ser útil si solo tiene un único ejecutable en un directorio fuera del $PATH
que desea ejecutar simplemente escriba el nombre en lugar de incluir todo en ese directorio (lo que sería el efecto si lo agregara $PATH
).
Sin embargo, un alias generalmente también puede hacer esto, y dado que está modificando el comportamiento del shell actual, no está mapeado 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 rutas de archivos. Esto es útil si un nuevo ejecutable aparece en un
PATH
directorio anterior o llega mv
a otro lugar y desea forzar a bash a salir y encontrarlo nuevamente en lugar del último lugar donde recuerda haberlo encontrado.
Ejemplo:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
El cp
comando provocó que una nueva versión del ls
ejecutable apareciera antes en mi $PATH
pero no activó una purga de la tabla hash. Solía hash -d
purgar selectivamente la entrada ls
de la tabla hash. Bash se vio obligado a mirar de $PATH
nuevo y, cuando lo hizo, lo encontró en la ubicación más nueva (antes en $ PATH que antes).
Sin $PATH
embargo, puede invocar selectivamente este comportamiento "buscar nueva ubicación del ejecutable desde ":
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
En su mayoría, solo querría hacer esto si deseaba algo fuera de la tabla hash y no era 100% posible que pudiera 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
) lo que efectivamente 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.