Artículo original de linuxito.com
Una forma rápida de vaciar un archivo es redirigir una salida nula:
> archivo
No confundir con ir al directorio padre cd ... Funciona como la flecha izquierda de los navegadores:
cd -
cd
tail -f /var/log/syslog
netstat -tulpn
netstat -xlpn
Práctico cuando necesitamos incluir una contraseña como parte de un comando, para no divulgarla en el historial. Sólo es necesario dejar un espacio en blanco delante del comando:
COMANDO
apt-get update && apt-get upgrade
Sólo se deben utilizar dos guiones del medio. Por ejemplo quiero buscar dos guiones del medio consecutivos en cierto contenido utilizando grep:
root@debian:~# history | grep '--'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Aunque utilice comillas, grep interpreta el guión del medio como delimitador de una opción. La forma correcta es:
root@debian:~# history | grep -- --
167 git commit --amend --reset-author
508 history | grep '--'
En el primer comando, grep interpreta los guiones como opciones, a pesar de que se utilicen comillas, comillas dobles o escapes. En el segundo ejemplo, primero se indica a grep que deje de interpretar opciones y luego se pasa el parámetro sin inconvenientes.
Utilizar al opción -p de mkdir:
mkdir -p /ruta/a/un/directorio/anidado
cat > archivo
Para finalizar, presionar Ctrl+D (atajo de teclado para EOF, End Of File).
Una forma rápida para saber qué archivos de log están siendo utilizados por demonios o servicios:
lsof | grep "\.log"
En el artículo Tip: cómo ocultar el proceso grep en la salida de ps compartí este ingenioso truco.
root@hal9000:/usr/home/emi # ps x | grep "ntpd"
1620 - Ss 0:00.07 /usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift
1682 2 S+ 0:00.00 grep ntpd
Simplemente se debe encerrar cualquier letra del patrón de búsqueda entre corchetes:
root@hal9000:/usr/home/emi # ps x | grep "[n]tpd"
1620 - Ss 0:00.07 /usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift
Otro interesante comando que compartí previamente en el artículo Listar los archivos modificados en las últimas 24 horas:
find . -type f -mtime -1 -exec ls -gGh --full-time '{}' \; | cut -d ' ' -f 4,5,7
netstat -tupn | grep EST
Información útil que provee netstat:
netstat -tupnee
netstat -s
El utilitario basename remueve el directorio y sufijo en un nombre de archivo. Muy útil al momento de crear scripts:
root@linuxito:/usr/local/nginx# pwd
/usr/local/nginx
root@linuxito:/usr/local/nginx# basename $(pwd)
nginx
Si hemos lanzado un proceso largo en primer plano, y deseamos que continúe ejecutando en segundo plano (como si lo hubiésemos lanzado con &), sólo es necesario presionar Ctrl+Z para suspenderlo y luego bg para que continúe en background.
emi@hal9000:~ % ping 8.8.8.8 >/dev/null
^Z
Suspended
emi@hal9000:~ % jobs
[1] + Suspended ping 8.8.8.8 > /dev/null
emi@hal9000:~ % bg 1
[1] ping 8.8.8.8 > /dev/null &
emi@hal9000:~ % jobs
[1] Running ping 8.8.8.8 > /dev/null
fg 1
Donde 1 es el número de tarea en background que nos aparecía entre corchetes al pulsar Ctrl+Z
Si hemos lanzado un proceso en segundo plano y deseamos terminarlo abruptamente (kill), no es necesario conocer su PID. Es posible matarlo indicando su número de trabajo:
emi@hal9000:~ % jobs
[1] Running ping 8.8.8.8 > /dev/null
emi@hal9000:~ % kill %1
emi@hal9000:~ % jobs
[1] Terminated ping 8.8.8.8 > /dev/null
En Bash, la variable $ expande al PID de la sesión actual (instancia de Bash en ejecución):
echo $$
Algo como lo que haría un administrador de bases de datos al usar COUNT(*) en conjunto con GROUP BY. Contar la cantidad de repeticiones de una misma fila utilizando sort y uniq:
[COMANDO] | sort | uniq -c | sort -nr
Una vez más grep al rescate, por lejos mi comando favorito:
grep -r 'ssl' /etc/apache2/*
Este comando busca recursivamente la palabra "ssl" dentro del contenido de todos los archivos dentro del directorio /etc/apache2/.
Con la opción -iname se ignoran mayúsculas/minúsculas (case) en los nombres de archivo. Utilizar asteriscos para buscar patrones:
find /etc/apache2/ -iname "*.conf"
Pasar el nombre de dispositivo como parámetro a file:
root@devuan:~# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=bed6a1f2-ec59-4913-9af6-0e2f66ac2954, volume name "ROOT" (needs journal recovery) (extents) (large files) (huge files)
El comando tac es cat pero concatena e imprime en orden reverso:
tac ARCHIVO
root@devuan:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
root@devuan:~# tac /etc/shells
/bin/rbash
/bin/bash
/bin/dash
/bin/sh
# /etc/shells: valid login shells
El comando rev permite invertir un string (transformar "hola" en "aloh"). Opera sobre cada línea de un archivo de manera individual:
root@devuan:~# rev /etc/shells
sllehs nigol dilav :sllehs/cte/ #
hs/nib/
hsad/nib/
hsab/nib/
hsabr/nib/
Para buscar ayuda en páginas de manual (por ejemplo, si no conocemos la página de manual que debemos consultar) recurrir a apropos:
apropos PALABRA_CLAVE
Hay varias formas de hacerlo:
tree
ps -ejH
ps axjf
hexdump -C ARCHIVO
Trivial:
yes | COMANDO
Yes imprime el caracter 'y' forever, no como el pájaro de Homero.
La herramienta bc se puede utilizar como calculadora de línea de comandos:
emi@hal9000:~ % echo "1024*1024" | bc
1048576
Y de todos los grupos a los que pertenecemos:
emi@hal9000:~ % id
uid=1001(emi) gid=0(wheel) groups=0(wheel),44(video),920(vboxusers)
Matar o enviar cualquier señal por nombre de ejecutable en vez de PID:
pkill PROGRAMA
Si necesitamos conectar tanto la salida estandar (stdout) como la salida de errores (stderr) de un proceso, a la entrada estandar (stdin) de otro, debemos agregar ampersand luego del pipe:
COMANDO1 |& COMANDO2