Herramientas de usuario

Herramientas del sitio


informatica:software:cli:snippets

¡Esta es una revisión vieja del documento!


Snippets CLI

Recetas útiles para la línea de comandos.

Ejecuta el último comando como root:

sudo !!

Sistema

Mostrar los 5 ficheros que más ocupan:

du -hs * | sort -rh | head -5
  • du -hs: muestra un total (s) del espacio ocupado por los directorios en formato humano (h)
  • sort -rh: ordena líneas de forma decreciente (r) de forma numérica (h)
  • head -5: muestra solo las 5 primeras líneas de resultado.

Mostrar sistemas de ficheros montados en columnas:

mount | column -t

Obtener dirección IP pública:

curl ifconfig.co
curl ifconfig.me

Cerrar la shell manteniendo sus procesos en funcionamiento:

^z; bg; disown

Lo que hacemos es suspender la ejecución del proceso actual (Ctrl + z), luego lo pasamos a segundo plano (bg) y finalmente eliminamos su asociación con la shell actual (disown)

Si sabemos de antemano que vamos a querer cerrar la shell tras ejecutar algún comando, deberíamos lanzarlo de alguna de las siguientes maneras:

comando &
disown

El ampersand (&) hace que el comando se ejecute en segundo plano y disown lo desvincula de la shell actual (lo quita de su lista de trabajos).

La otra opción:

nohup comando

nohup separa directamente el proceso de la terminal por lo que al cerrar la terminal, no enviará una señal de detención a sus procesos.

Copiar los permisos de un fichero a otro:

chmod --reference fichero1 fichero2

La opción --reference también se puede usar con los comandos chgrp y chown

Conectarse a un servidor SSH a través de un intermediario:

ssh -t hostA ssh hostB

Esto es útil si por ejemplo no tenemos acceso directo a hostB, pero sí a través de hostA. Hacemos todo en un único paso. Aunque se pudiese lograr lo mismo estableciendo un túnel, eso implicaría usar otros puertos (un puerto diferente por túnel)

Mostrar el tamaño de las particiones de disco:

lsblk --json | jq -c '.blockdevices[]|[.name,.size]'

Otra opción un poco más rápida y sin usar jq:

lsblk | grep -v part | awk '{print $1 "\t" $4}'

Mostrar la distribución Linux instalada:

cat /etc/*release

Alternativa básica:

cat /etc/issue

Si instalamos el programa lsb-release también podríamos verlo con:

lsb_release -a

Obtener la fecha de ayer

Día de ayer usando el comando date y con la salida formato AAAA-MM-DD:

date -d "yesterday 13:00" '+%Y-%m-%d'

Mostrar fecha de inicio de los procesos y duración

ps -eo pid,lstart,etime,args

Otros

Cronómetro:

time read

Cuando detengamos el proceso con Ctrl + D, se mostrará el tiempo que duró el proceso:

real    0m9.688s
user    0m0.004s
sys     0m0.000s

Mostrar un reloj en la esquina del terminal:

while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &

Como se ejecuta como un proceso en segundo plano, para “matarlo” tendremos que saber su PID o trar el proceso a primer plano (fg) y detenerlo con Ctrl + c

Lista de comandos que más se han usado:

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Información del tiempo:

curl wttr.in/madrid

Ejecutar un comando un tiempo determinado:

timeout 5s ping www.google.es

El anterior comando ejecutará ping www.google.es durante 5 segundos y finalizará el proceso.

Otra opción podría ser usando sleep:

Si queremos que el comando se finalice correctamente (SIGINT), le pasaremos la opción -s: timeout -s 2 5s <COMANDO>. Para ver el listado de señales que le podemos pasar a -s, kill -l.

timeout pertenece a las coreutils.

Listado de todos los atajos de Bash:

bind -P

Si queremos mostrarlo de una forma más “agradable”:

bind -P | grep -v "is not" | sed -e 's/can be found on/:/' | column -s: -t

Simular que estás trabajando:

Que aparezca una ventana de progreso de una instalación falsa:

for i in {0..600}; do echo $i; sleep 1; done | dialog --gauge "Install..." 6 40

Para que funcione el comando anterior es necesario instalar dialog

Hacer que se muestre información hexadecimal desplazándose por la pantalla:

while [ true ]; do head -n 100 /dev/urandom; sleep .1; done | hexdump -C | grep "ca fe"

Enviar notificaciones al escritorio:

notify-send "Mensaje"

Podríamos hacer cosas como que nos avisase del fin de una descarga por wget:

wget https://www.debian.org/example.iso; notify-send "Descarga completada"

Otra opción usando zenity:

zenity --info --text="Mensaje"

Compartir un fichero por el puerto 80:

nc -v -l 80 < fichero.extension

Desde otro equipo que tenga acceso, abrir un navegador web y poner la IP del equipo que está compartiendo el fichero.

Necesita tener instalado netcat

Mostrar la jerarquí del sistema de ficheros Linux:

man hier

Muestra información sobre los directorios típicos de un sistema Linux (/, /bin, /home, /etc…), qué hay en ellos, para qué sirven…

Guardar la salida de un comando como imagen:

convert label:"$(ip a)" output.png

Abrir editor de texto para escribir un comando largo o complicado:

fc

Se abrirá el editor configurado en la variable $EDITOR, podremos escribir el comando que queramos y al guardar y salir, se ejecutará en la línea de comandos.

Podemos usar el siguiente atajo de teclado en bash para obtener lo mismo: Ctrl + x e (también es válido Ctrl + x Ctrl + e)

Ficheros

Convertir codificación de caracteres

Si queremos pasar un fichero en ISO-8859-1 a UTF-8 (Unicode):

iconv -f iso88591 -t utf8 fichero-iso88591 .txt > fichero-utf8 .txt 
  • -f: codificación de origen
  • -t: codificación de destino

Eliminar última línea

Para eliminar la última línea/fila de un fichero:

sed -i '$d' <fichero>

También podemos hacerlo con head y luego redirigir la salida a un nuevo fichero que ya no tendrá esa línea final:

head -n -1 <fichero> > <fichero_resultante>
  • -1: indicamos que la última línea no se muestre en la salida de head

Eliminar x caracteres de cada línea

Partiendo de un fichero con:

34616860801
34604079411
34638027751
34666055461
34604067131
34646424621
34687441571
34688784081
34666450101
34604091921

Si queremos quitar los dos primeros caracteres de cada línea:

less fichero.txt | cut -c3-

cut coge lo que haya desde la columna 3 (la primera columna es la 1) hasta el final

Recursos

informatica/software/cli/snippets.1697565145.txt.gz · Última modificación: por tempwin