linux-terminal

El comando hash de Linux proporciona información sobre los comandos en su sistema o los que ha ejecutado recientemente, pero lo que ve depende del shell que esté usando.

Cuando escribe "hash" en un sistema Linux, puede obtener una de dos respuestas muy diferentes según el shell que esté utilizando.

Si está usando bash o un shell relacionado como ksh , debería ver una lista de los comandos que ha usado desde que comenzó su sesión de terminal, a veces con un recuento de cuántas veces se usó cada comando. Esto puede ser más útil que usar el comando de historial si solo desea ver su actividad de comando muy reciente, pero el comando hash no es un solo ejecutable. En cambio, se basa en su caparazón.

hash en bash

Aquí hay un ejemplo del comando hash ejecutado en bash :

$ hash
comando de golpes
1 /usr/bin/quién
1 /usr/bin/vi
1 /usr/bin/hombre
2 /usr/bin/ls
1 /usr/bin/borrar
3 /usr/bin/gato
3 /usr/bin/ps

Para bash , el comando hash está incorporado. No es un ejecutable separado, sino un comando integrado en el shell. Algunos comandos, como pwd y echo , no se capturan en la salida hash . Obtendrás el mismo resultado con este comando:

$ hash integrado “$@”
comando de golpes
1 /usr/bin/quién
1 /usr/bin/vi
1 /usr/bin/hombre
2 /usr/bin/ls
1 /usr/bin/borrar
3 /usr/bin/gato
3 /usr/bin/ps

Encontré el comando que se muestra arriba en el script /usr/bin/hash en mi sistema Fedora. Es un script /usr/bin/sh que se ve así:

$ gato /usr/bin/hash
#!/usr/bin/sh
hash integrado “$@”

Si ejecuto este script, no obtengo ningún resultado:

$ /usr/bin/hash
$ <== sin salida

¿Por qué? Porque el script inicia un nuevo shell y no se han ejecutado comandos en ese shell, por lo que el comando hash no tiene nada que informar. Obtenga la secuencia de comandos usando ".", por otro lado, y obtendrá una respuesta muy diferente.

PS /usr/bin/hash

Golpea el comando

 1 /usr/bin/quién
1 /usr/bin/vi
1 /usr/bin/hombre
2 /usr/bin/ls
1 /usr/bin/borrar
3 /usr/bin/gato
3 /usr/bin/ps
hash en ksh

Para ksh , escribir "hash" también mostrará una lista de los comandos que ha ejecutado en la sesión actual, pero sin la columna "Accesos". En su lugar, muestra los comandos utilizados y los ejecutables en un formato de nombre=ruta . Esto ayuda a aclarar la razón por la cual los proyectiles recopilan esta información en primer lugar. Si el shell tiene que buscar en su ruta de búsqueda para encontrar los ejecutables de todos los comandos que usa, es útil "recordar" dónde se encuentran esos ejecutables para que no tenga que buscar su ruta cada vez que use los comandos.

$ hash
bash=/usr/bin/bash
gato=/usr/bin/gato
columna=/usr/bin/columna
fecha=/usr/bin/fecha
ls=/usr/bin/ls
hombre=/usr/bin/hombre
ps=/usr/bin/ps

Para ksh , hash parece ser un alias:

$ alias | hash grep
hash='alias -t —'

Ejecutar el comando asociado con el alias debería producir el mismo resultado:

$ alias -t —
bash=/usr/bin/bash
gato=/usr/bin/gato
columna=/usr/bin/columna
fecha=/usr/bin/fecha
ls=/usr/bin/ls
hombre=/usr/bin/hombre
ps=/usr/bin/ps
hash en zsh

El comando hash en algunos otros shells, como zsh , proporcionará una respuesta muy diferente. En lugar de informar sobre el historial de comandos del shell actual, le mostrará una larga lista de comandos y sus ubicaciones en el sistema de archivos. Para ver cuánto dura la lista de ubicaciones recordadas, use un comando como este:

shs@libélula ~ % hash | wc-l
2753

Para ver la lista, probablemente querrá canalizar la salida del comando al comando more .

shs@libélula ~ % hash | más
.keepme=/home/linuxbrew/.linuxbrew/bin/.keepme
7z=/usr/bin/7z
7za=/usr/bin/7za
AtomicParsley=/usr/bin/AtomicParsley
BoD_meeting=/home/shs/bin/BoD_meeting
EZscript=/home/shs/bin/EZscript
Correo=/usr/bin/Correo
ModemManager=/usr/sbin/ModemManager
NetworkManager=/usr/sbin/NetworkManager
VBoxClient=/usr/bin/VBoxClient
VBoxClient-todos=/usr/bin/VBoxClient-todos
VBoxControl=/usr/bin/VBoxControl

En este caso, los comandos incluidos en la salida no se limitan a los que haya ejecutado.

Tenga en cuenta que el shell no solo realiza un seguimiento de los comandos del sistema, sino que también registra las ubicaciones de los scripts que ha agregado en su directorio de inicio. Cuando ejecuta un nuevo script, se agregará a su salida hash y estará visible la próxima vez que inicie su shell.

shs@libélula ~ % hash | grep sh | cabeza -10
BoD_meeting=/home/shs/bin/BoD_meeting
EZscript=/home/shs/bin/EZscript
acerca de=/inicio/shs/bin/acerca de
agregar=/home/shs/bin/agregar
copias de seguridad.log=/home/shs/bin/backups.log
bash.pg=/home/shs/bin/bash.pg
archivogrande=/home/shs/bin/archivogrande
archivogrande2=/home/shs/bin/archivogrande2
calcPower=/home/shs/bin/calcPower
nuevoguion=/home/shs/bin/nuevoguion

Envolver

La respuesta del comando hash depende del shell que esté usando y de cómo mantiene sus referencias a los comandos que ejecuta y los ejecutables en su sistema. El objetivo principal de realizar un seguimiento de los comandos es acelerar el tiempo de respuesta al reducir el tiempo necesario para localizarlos.

 

Fuente: networkworld | somoslibres

¿Quién está en línea?

Hay 8944 invitados y ningún miembro en línea