bash – ¿Cuál es el propósito del comando hash?

Pregunta:

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

[root@c04c ~]# hash
hash: hash table empty

[root@c04c ~]# whoami
root

[root@c04c ~]# hash
hits    command
   1    /usr/bin/whoami

[root@c04c ~]# whoami
root

[root@c04c ~]# hash
hits    command
   2    /usr/bin/whoami

Según las páginas de manual, el propósito del hash es:

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

Las utilidades proporcionadas como integradas en el shell no se informan mediante hash.

Aparte de ver cuántas veces he ingresado un comando, no puedo ver la utilidad del hash .

Incluso apareció en los 15 comandos más útiles de thegeekstuff.com

¿De qué forma es útil el hash ?

Respuesta:

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 comando hash es la forma en que interactúa con ese sistema (por cualquier motivo que sienta que lo necesita).

Algunos casos de uso:

  • Como lo vio, imprime cuántas veces presiona qué comandos si lo escribe sin argumentos. Esto podría indicarle 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 cual podría ser útil si solo tiene un solo 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 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 aparece un nuevo ejecutable en un directorio PATH anterior o lleva mv 'd 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 comando cp provocó que una nueva versión del ejecutable ls apareciera antes en mi $PATH pero no desencadenó una purga de la tabla hash. hash -d para purgar selectivamente la entrada de ls de la tabla hash. Luego, Bash se vio obligado a mirar a través de $PATH nuevamente y cuando lo hizo, lo encontró en la ubicación más nueva (antes en $ PATH de lo que se estaba ejecutando antes).

Sin embargo, puede invocar de forma selectiva este comportamiento de "buscar nueva ubicación del ejecutable desde $PATH ":

[root@policyServer ~]# hash
hits    command
   1    /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits    command
   0    /lol-wut/ls
[root@policyServer ~]#

La mayoría de las veces solo querría hacer esto si quisiera algo fuera de la tabla hash y no fuera al 100% que pudiera cerrar la 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 purga toda la tabla hash de bash.

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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım