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 obtienemv
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.
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.