Contempo: Simples comandos productivos

Simples comandos productivos

Estos son los comandos productivos más simples que uso. La mayoría se puede usar en Linux o OS X.

ssh


Permite conectarse remotamente a otros equipos por conexión segura/encriptada SSH (si tienes router debes habilitar el puerto 22 de tu equipo). La IP_DESTINO es la IP publica del destino que se puede ver en What Is My IP (o terminal: curl icanhazip.com). El destino debe tener un servidor SSH instalado, como OpenSSH-Server. Solo pedirá la contraseña del destino:
ssh usuario@IP_DESTINO

rsync


Respalda archivos o directorios, monitoreando la transferencia de cada uno de los archivos que está copiando. Si el archivo ya existe y es idéntico entonces no lo reemplaza. (si carpeta termina en carpeta/, entonces respaldará solo el contenido de la carpeta y no la carpeta en si):
rsync -Pahv carpeta archivo /destino

También permite transferir archivos a otros equipos por conexión segura:
rsync -Pahv -e ssh archivo usuario@IP_DESTINO:/directorio_destino

gpg


Encripta archivos con protección de contraseña (creará un nuevo archivo.gpg). Y desencripta archivos (te pedirá la contraseña del archivo):
gpg -c --cipher-algo AES256 archivo
gpg archivo.gpg

lancat


Mandar archivos a través de la Red de Área Local (LAN), fácil y automáticamente. Alguien que mande el archivo (-s). Y alguien que reciba el archivo (-r). (Instalar y usar lancat):
lancat -s < archivo 
lancat -r > archivo

wget


Descarga directo un archivo. O descarga el código HTML del sitio y edita con nano:
wget www.web.com/archivo 
wget www.web.com ; nano *.html

Descarga un sitio completo recursivamente (-r). O descarga un sitio aislado con todos sus elementos (-p):
wget -r www.web.com 
wget -p www.web.com/sitio-aislado.html

Descarga todos los enlaces de archivos dentro de un directorio web:
wget -m -np www.web.com/archivos

Descarga masivamente archivos con números en secuencia con { }, o con letras:
wget www.web.com/archivo{01..50}.jpg 
wget www.web.com/archivo{a..z}.jpg

curl


Se puede subir cualquier tipo de archivo a transfer.sh, un sitio que almacena por 2 semanas archivos de hasta 5GB (la URL de descarga aparecerá automáticamente):
curl -T archivo https://transfer.sh

Bajar archivos con curl. O descarga el código HTML de un sitio:
curl -O www.web.com/archivo 
curl www.web.com > sitio.html

Descargar masivamente con números en secuencia también se puede con [ ], incluso con letras:
curl -O www.web.com/archivo[01-50].jpg 
curl -O www.web.com/archivo[a-z].jpg

Recomiendo ver: curl vs wget, y la tabla comparativa con otras herramientas que descargan archivos.

pastebinit, scrot, recordmydesktop


Sube archivos de texto directo a Pastebin (la URL de descarga aparecerá automáticamente):
pastebinit -i archivo

Capturar pantalla en PNG con retardo de 5 segundos (-d). O seleccionar áreas de la pantalla con puntero (-s). Y capturar ventana en uso con retardo de 5 segundos (-s -b -d):
scrot -d 5 
scrot -s 
scrot -s -b -d 5

Con recordmydesktop se puede capturar el escritorio con codec de video Theora (Detener: Ctrl + C):
recordmydesktop

foremost


Muy útil para recuperar datos que ya fueron borrados. Puede recuperar diferentes formatos de imagen, video, o documentos (solo coloca el formato que quieres recuperar y la partición):
sudo foremost -t jpg,mp4 -i /dev/sda1

dd, mkfs


Lo uso para grabar imágenes ISO al pendrive rápidamente (ve donde se encuentra el dispositvo con lsblk):
sudo dd if=imagen.iso of=/dev/sdb bs=4M

Para formatear el pendrive en el sistema de archivos Ext4 (Linux), o NTFS (Windows + Compatibilidad con otros), o FAT32 que es compatible con Macs:
sudo mkfs.ext4 /dev/sdb 
sudo mkfs.ntfs /dev/sdb
sudo mkfs.vfat -F 32 /dev/sdb

ffmpeg, lame, mediainfo


FFmpeg encodea cualquier tipo de video/audio (guía extensa). O capturar video streaming:
ffmpeg -i entrada.mkv -c:v libx264 -crf 18 -c:a flac salida.mkv 
ffmpeg -i http://url-streaming -c:v copy -c:a copy video.mkv

Grabar el escritorio en video de alta calidad (salir: Q):
ffmpeg -f x11grab -s 1440x900 -framerate 30 -i :0.0 -c:v libx264 -qp 0 -preset ultrafast salida.mkv

Grabar audio desde el micrófono del notebook. O grabar video+audio desde la cámara del notebook (salir: Ctrl + C). Vean en alsamixer si tienen el micrófono en captura al 100 (Cambiar a captura alsamixer: TAB):
ffmpeg -f alsa -i pulse salida.wav 
ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i pulse salida.mkv

Encodea cualquier audio a MP3 con VBR de alta calidad (guía extensa de encodear audio):
lame audio.wav -V 0 audio.mp3

Para ver toda la información de un archivo de medios imagen/video/audio:
mediainfo video.mkv

youtube-dl, cclive, mpv


Descargar videos de Youtube/Vimeo/Dailymotion con youtube-dl (instala python-pip, y luego: sudo pip install youtube_dl). O con cclive (solo Youtube):
youtube-dl http://youtube.com/asdf 
cclive http://youtube.com/asdf

Y ver videos desde Youtube/Vimeo/Dailymotion. O video y audio en web con el reproductor mpv (porqué usar mpv). También si quisiéramos escuchar solo la música de un video:
mpv http://youtube.com/asdf 
mpv http://web.com/video.mp4 
mpv --no-video http://youtube.com/asdf

Descargar video en linea con mpv. O ver la cámara del notebook:
mpv --stream-dump=video.mkv http://web.com/video-en-linea 
mpv tv://

mkvextract, mkvmerge


Para extraer las pistas de video, audio, subtitulo de un MKV (incluido con mkvtoolnix, para ver número de pista: mkvmerge -i video.mkv). Y volver a unir con mkvmerge:
mkvextract tracks video-audio.mkv 0:video-solo.mkv 1:audio.dts
mkvmerge video-solo.mkv audio.dts -o unido.mkv

feh, convert


Ver imagen en web. Ver varias imágenes secuenciales en web (cambiar imagen: flechas derecha/izquierda. Pantalla completa: V). O abrir todas las imágenes del directorio actual con la imagen ajustada a la pantalla (-.):
feh http://web.com/imagen.jpg
feh http://web.com/imagen{01..50}.jpg
feh -.

Redimensiona el ancho de una imagen respetando la relación de aspecto (convert viene incluido con imagemagick):
convert -sample 640x imagen.jpg nueva.jpg

ctorrent, aria2c, transmission-cli, peerflix


Descargar torrents o enlaces magnéticos de manera rápida (salir: Ctrl + C):
ctorrent archivo.torrent 
aria2c "magnet:enlace"

Si quisieran limitar velocidades de descarga (-d) o subida (-u) en KB/s:
transmission-cli -d 800 -u 30 archivo.torrent

Para video streaming de torrents (instalar y usar Peerflix):
peerflix archivo.torrent --mpv

touch, mkdir, file


Para crear varios archivos a la vez:
touch archivo01.txt archivo02.txt
touch archivo{01..10}.txt
touch archivo{01,02,03}.txt

Y crear varias carpetas:
mkdir carpeta01 carpeta02
mkdir carpeta{01..10}

Ver descripción de todos los tipos de archivos en un directorio:
file *

7z, zip, unzip


Para comprimir, y descomprimir cualquier compresor de archivo:
7z a comprimir.rar archivos 
7z x descomprimir.rar

Y si solo usas Zip, también se puede esto:
zip comprimir.zip archivos 
unzip descomprimir.zip

grep


Localiza palabra dentro de un archivo. O localizar frases dentro de un archivo. También localizar palabra al interior de todos los archivos del actual directorio:
grep palabra archivo 
grep 'frase larga' archivo 
grep palabra *

Localiza dos o más palabras dentro de un archivo (-e). También buscar palabras incluidas con mayúsculas (-i). O mostrar las filas de texto bajo palabra, por ejemplo 5 filas (-A). O mostrar las 3 filas arriba de palabra (-B):
grep -e palabra1 -e palabra2 archivo 
grep -i palabra archivo 
grep palabra -A 5 archivo
grep palabra -B 3 archivo

Localiza recursivamente palabra en carpeta con archivos (-r). O localiza palabra de otro comando:
grep -r palabra /carpeta 
history | grep palabra

sed


Reemplazar palabra o carácter en un archivo de texto, y el resultado en archivo2. O reemplazar varias palabras a la vez:
sed 's/vieja/nueva/g' archivo > archivo2
sed 's/vieja/nueva/g ; s/vieja2/nueva2/g' archivo > archivo2

Si el texto tuviera barras diagonales "/", se pueden usar barras verticales o diagonales invertidas "| \" como reemplazo, por ejemplo para borrar todas las cursivas "<i> y </i>" dentro de un subtitulo. Y usando diagonales invertidas:
sed 's|<i>||g ; s|</i>||g' sub.srt > sub2.srt
sed 's\vieja\nueva\g' archivo > archivo2

Útil para eliminar lineas, por ejemplo borrar las 4 primeras lineas (1,4d). Borrar las lineas que contengan palabra (/d). O dejar las lineas que contengan palabra (/!d). Y borrar la última linea ($d):
sed '1,4d' archivo > archivo2 
sed '/palabra/d' archivo > archivo2 
sed '/palabra/!d' archivo > archivo2 
sed '$d' archivo > archivo2

O también mostrar una linea completa junto con cat, por ejemplo la 4ta linea (-n 4p). Mostrar lineas por separado, lineas 2 y 6 (2p ; 6p). Si quisiéramos cambiar palabra solo en la 3ra linea (3s). También agregar una linea en la 5ta linea y empujar las demás hacia abajo (5i). O reemplazar todo el texto de la 6ta linea (6c). Y agregar una nueva linea después la 7ma linea, creando una nueva 8va linea (7a):
cat archivo | sed -n '4p'
sed -n '2p ; 6p' archivo > archivo 2
sed '3s/vieja/nueva/g' archivo > archivo2
sed '5i\Linea agregada' archivo > archivo2
sed '6c\Linea reemplazada' archivo > archivo2
sed '7a\Linea agregada después' archivo > archivo2

Para sobreescribir el mismo archivo sin crear otro archivo usen -i. Y si quieren sumar diferentes ordenes usen -e:
sed -i '1d' archivo
sed -e '1c\Linea reemplazada' -e '2i\Linea agregada' archivo > archivo2

Pegar la 1ra linea con la 2da linea, y así consecutivamente en par, la 3ra con la 4ta, la 5ta con la 6ta, etc. Agregar palabra al inicio de cada linea (s/^). O agregar palabra al final de cada linea (s/$). Agregar una linea al final, la cola del archivo ($a). Y dar saltos de linea (creando una nueva linea) cada vez que se tope con el carácter de doble comillas " (también puede ser otro carácter):
sed 'N;s/\n/ /' archivo > archivo2
sed 's/^/palabra/' archivo > archivo2
sed 's/$/palabra/' archivo > archivo2
sed '$a\Linea al final' archivo > archivo2
sed 's/"/\n/g' archivo > archivo2

cut


Para seleccionar cantidad de caracteres a mostrar, por ejemplo que muestre solo desde el carácter 5 al 10 en todas las lineas del archivo (5-10). También que muestre desde el carácter 5 en adelante en cada línea (5-). Que muestre solo los primeros 3 caracteres (-3). O sumar dos sentencias, la primera hasta el carácter 5 y la segunda desde el carácter 20 (-5,20-):
cut -c 5-10 archivo
cut -c 5- archivo 
cut -c -3 archivo
cut -c -5,20-

Es útil usando grep si hay demasiado texto y solo queremos pocas lineas:
grep palabra archivo | cut -c 5-10 

Se pueden usar delimitadores, por ejemplo hasta la coma ',' (también se pueden otros / | # @, etc). Mostrar solo la 4ta oración después de la coma (-f 4). O mostrar solo la 4ta y 6ta oración después de la coma (-f 4,6). O mostrar la 4ta oración e incluir todo lo que aparezca entre medio con la 6ta oración (-f 4-6):
cut -d ',' -f 4 archivo
cut -d ',' -f 4,6 archivo
cut -d ',' -f 4-6 archivo

head, tail


Con head se pueden ver las primeras lineas de un texto, digamos las 3 primeras lineas (-n 3). Con tail se pueden ver las últimas lineas, digamos las 2 últimas lineas (-n 2). O simplemente mostrar las últimas lineas (10 por defecto) de otro comando:
head -n 3 archivo 
tail -n 2 archivo
history | tail

find, locate


Encuentra archivos y carpetas en cualquier directorio recursivamente (/ruta -name). O buscar un tipo de archivo determinado en el directorio actual recursivamente (. -name):
find /ruta -name palabra
find . -name *.jpg

Busca archivos por el sistema mostrando todas sus rutas:
locate palabra

nano, echo, cat, alias


El editor de texto fácil y entendible, solo para crear un archivo y ponerse a escribir (Guardar: Ctrl + O. Salir: Ctrl + X). O lee y edita el código HTML de un sitio:
nano archivo 
nano *.html `wget www.web.com`

Para crear y agregar más texto a una nota/archivo (para reemplazar todo lo escrito solo usa una flecha: >). Y cat para mostrar texto de archivos directo en la terminal. O también enumerar las lineas de un texto (-n):
echo "Texto" >> notas
cat archivo
cat -n archivo

Útil para dar un nombre corto a comandos muy largos, y ser usado después (pueden guardar manualmente sus alias creando el archivo ~/.bash_aliases):
alias comando="comandos con ordenes muy largas"

iconv


Permite cambiar la codificación de caracteres de un archivo de texto, por ejemplo cambiar un subtitulo UTF-8 a un ISO-8859-15 para compatibilidad occidental de caracteres en español:
iconv -f UTF-8 -t ISO-8859-15 sub1.srt > sub2.srt

rm, trash-cli


Para eliminar definitivamente varios archivos que terminen o empiecen con la misma palabra. O borrar todos los archivos en el directorio actual (sin tocar las carpetas):
rm *rchivo archiv* 
rm *

Para eliminar una carpeta hay que hacerlo recursivamente (-r). También eliminar todas las carpetas y archivos sueltos sin indicar nombres en el directorio actual (-r *):
rm -r carpeta 
rm -r *

Mandar archivos a la papelera (trash). Ver lo que hay en la papelera (trash-list). Y eliminar definitivamente lo que hay en la papelera (trash-empty):
trash archivo 
trash-list 
trash-empty

cp, gcp


Copia archivos rápidamente dentro del sistema o otros dispositivos (cp es más rápido que rsync, pero sin información de transferencias y copia archivos aunque existan en destino). También copia recursivamente carpetas (-r). Y copiar todo el contenido del actual directorio:
cp archivo /destino 
cp -r carpeta /destino
cp -r * /destino

Acá tenemos a gcp que se comporta igual que cp, pero con información de transferencias. Y copia recursivamente:
gcp archivo /destino 
gcp -r carpeta /destino

pv, bar


Con pv y bar se puede ver información de transferencia (aunque no están hechos para copiar, se usa casi igual), pero hay que poner el nombre del destinatario, no solo la ruta:
pv archivo > /destino/archivo
bar archivo > /destino/archivo

mv, mmv


Para renombrar un archivo. O mover archivos de lugar:
mv viejo nuevo 
mv origen /destino

Renombrar archivos masivamente (conservando extensión). Renombrar extensión masivamente (de .jpg a .png). Poner extensión a archivos sin extensión (a .txt):
mmv "viejos*" "nuevos#1"
mmv "*.jpg" "#1.png"
mmv "archivos*" "archivos#1.txt"

pycp, pymv


Lo mismo que cp (aunque es más lento que cp) y mv, pero con una barra de progreso e información de transferencia (instala python-pip, y luego: sudo pip install pycp):
pycp archivo /destino 
pymv archivo /destino

Si están transfiriendo una carpeta con muchos archivos usen -g para que aparezca una sola barra y no múltiples (no necesita opción de recursiva):
pycp -g carpeta /destino

ls, du, sort, wc


Para ver el tamaño de los archivos (-sh). Ver los permisos/dueños (-l). Y ver todos los archivos ocultos (-a) (se pueden combinar):
ls -sh 
ls -l 
ls -a

Localizar archivo que comience con una palabra. O mostrar solo con extensión .jpg. También que muestre solo con algunas extensiones:
ls archiv* 
ls *.jpg 
ls *.{jpg,gif,png}

Con du se puede ver el peso de todos los directorios (-sh *). O el peso total del directorio actual (-sh):
du -sh * 
du -sh

Con sort se puede listar el peso de menor a mayor (al revés: -hr):
du -sh * | sort -h

Combinando ls + wc se puede contar la cantidad de archivos y carpetas de un directorio. Y que también sume los archivos ocultos (-A) recursivamente en las demás carpetas (-R):
ls | wc -l 
ls -AR | wc -l

tree


Permite ver el árbol de los directorios que se encuentran dentro. Y mostrar un tipo de archivo predeterminado (-P):
tree -d directorio
tree -P *.jpg directorio

chmod, chown


Modificar permisos de un archivo (u: usuario, g: grupo, o: otros, a: todos - w: leer, w: escribir, x: ejecutar) (guía extensa). Y cambiar al dueño de un archivo:
chmod ugoa+rwx archivo
chown usuario:usuario archivo

apt


El poderoso APT que desde la versión 1.0 puede usar también 'apt orden'. Para sistemas basados en Debian, como Ubuntu 14.04 LTS y elementary OS Freya. Para actualizar la lista de software (update). Y actualizar sistema (upgrade):
sudo apt update 
sudo apt upgrade

Instalar software (install). Y remover software (remove):
sudo apt install nombre 
sudo apt remove nombre

Buscar software (search). Y ver información de un paquete/app (show):
apt search nombre 
apt show nombre

brew


Homebrew es usado solo en OS X. Puedes instalar, remover y mantener actualizadas tus apps CLI, y apps de interfaz que encuentres en sus repositorios.
brew install nombre
brew-cask install nombre (apps gráficas)

Y mantener actualizado:
brew update
brew upgrade

nmap, arp-scan


Para ver a todos los que están conectados a tu Red de Área Local (LAN), incluidos los con Wi-Fi (aparece la IP, MAC y el fabricante):
sudo nmap -sP 192.168.1.0/24

Con arp-scan se puede automatizar el proceso, mostrará las IPs y dirección de hardware de todos los demás conectados a la Red de Área Local. Y si estás en un notebook usa el Wi-Fi (wlan0):
sudo arp-scan -l 
sudo arp-scan -l -I wlan0

nmcli, iwlist


Ver la lista de señales Wi-Fi cercanas:
nmcli -p dev wifi list

Para ver las señales Wi-Fi cercanas con información detallada:
sudo iwlist wlan0 scan

ifconfig, iwconfig, wavemon


Para ver cuantos datos has descargado (RX) y subido (TX) a Internet desde que iniciaste la sesión actual. Por Ethernet (eth0) y Wi-Fi (wlan0):
ifconfig eth0 | grep Bytes 
ifconfig wlan0 | grep Bytes

Para ver la calidad de señal Wi-Fi actual (70 máx), y el nivel de señal dBm (prueben acercándose y alejándose para ver como afecta):
iwconfig wlan0 | grep Quality

Con wavemon se puede monitorear la intensidad de la señal Wi-Fi y otros datos en pantalla completa:
wavemon

htop, iotop, pydf


Con htop se puede monitorear el uso de procesos que están corriendo, también uso de CPURAM y Swap (los que utilizan más procesamiento aparecen en la cabecera). Y con iotop puedes ver que procesos están escribiendo y leyendo en tu disco:
htop
sudo iotop

Muy practico para estar al tanto de cuanto espacio estás ocupando o te queda en tus discos duros, particiones, pendrives o discos duros móviles:
pydf

lm-sensors, hddtemp, acpi


Para ver la temperatura del procesador (Core son las CPU) (luego de instalar: sudo sensors-detect ; sudo service kmod start). Con hddtemp se monitorea la temperatura del disco duro:
sensors
sudo hddtemp /dev/sda

Y para monitorear cuanta batería queda o se está cargando en el notebook:
acpi -i

netstat, free, ps


Ver los puertos abiertos (escuchando) que está ocupando cada app:
sudo netstat -plunt

Ver la RAM real en uso y que está libre:
free -h | grep -e usado -e cache

Con ps se puede ver la lista de todos los procesos que están corriendo y el usuario que los usa:
ps -aux

Para información en un-solo-lugar de uso de cpu, ram, swap, red, procesos, instala Glances.

lsblk, mount, umount


Parecido a pydf, pero muestra la jerarquía de las particiones, y puede ver los dispositivos conectados aunque no estén montados:
lsblk

Con mount se puede montar el dispositivo (pendrive, disco duro portátil) al ver donde está con lsblk, y con umount se puede desmontar para desconectar:
sudo mount /dev/sdb1 /media/usuario/ 
sudo umount /media/usuario/

lspci, lshw


Para ver el tipo de GPU (gráficos) que usa el equipo, y fabricante del modelo Wi-Fi:
lspci | grep -e VGA -e Wireless

Ver cada parte de todo el hardware, su fabricante y modelos en detalle. También ver solo información del procesador:
sudo lshw
sudo lshw | grep CPU -A 12

speedometer, speedtest-cli


Para monitorear la velocidad en la conexión, en descarga (-r) y subida (-t), en un gráfico (Wi-Fi: wlan0):
speedometer -r eth0
speedometer -t eth0

Con speedtest-cli se realizan test de velocidad de descarga y subida (instala python-pip, y luego: sudo pip install speedtest-cli):
speedtest-cli

ping


Ver si hay perdida de paquetes en una conexión inestable, y cuanto se demoran los paquetes en milisegundos para ir y volver (salir: Ctrl + C). O transmitir una cantidad de paquetes predeterminada (-c):
ping www.google.com 
ping -c 5 www.google.com

tcpdump, whois, host


Para monitorear todo lo que pasa por el puerto 80 TCP (usado en HTTP) (Salir: Ctrl + C):
sudo tcpdump tcp port 80

Para ver información de dueño del dominio, servidores, y creación del dominio. Y host puede ver la IP del dominio:
whois web.com 
host web.com

sleep, notify-send, date


Ejecutar una orden en el tiempo dado (sleep), además con notificación (notify-send), hora (date), y música de fondo (mpv). Como un despertador:
sleep 1h 30m 10s ; notify-send -u critical ¡Despierta! "$(date)" ; mpv audio.mp3

watch, alsamixer


Refresca un comando cada 2 segundos para observar cambios (1 segundo: -n 1). Por ejemplo si estuviéramos monitoreando el peso de los archivos que se están transfiriendo o bajando:
watch ls -sh

Con alsamixer se pueden controlar los niveles de audio de los altavoces, micrófono en captura (para cambiar a captura: TAB), y las entradas de audio en linea:
alsamixer

xkill, killall


Las dos formas rápidas de matar o cerrar a la fuerza apps/procesos, con xkill se apunta con el cursor a la ventana y la mata. Con killall hay que escribir el nombre de la app:
xkill
killall nombre

Pueden seguir viendo algunas recomendaciones en Reddit y visitar /r/commandline, ver un indice de comandos útiles, leer sus manuales o de otros manuales de Ubuntu, o ir aprendiendo más detalladamente. También pueden empezar creando shell scripts básicos y ver comandos más complejos en Commandlinefu. O leer en linea el libro Conquering the Command Line. También una Introducción a Unix, y 100 comandos útiles.