hashes un comando incorporado bash. La tabla hash es una característica bash que evita que tenga que buscar $PATHcada 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 hashcomando 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 $PATHque 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í. hashEs una forma de hacerlo.
- Puede usarlo para no recordar rutas de archivos. Esto es útil si un nuevo ejecutable aparece en un
PATHdirectorio anterior o llega mva 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 cpcomando provocó que una nueva versión del lsejecutable apareciera antes en mi $PATHpero no activó una purga de la tabla hash. Solía hash -dpurgar selectivamente la entrada lsde la tabla hash. Bash se vio obligado a mirar de $PATHnuevo y, cuando lo hizo, lo encontró en la ubicación más nueva (antes en $ PATH que antes).
Sin $PATHembargo, 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.