Todos amamos a los one liners. Son cómodos, copados, te ahorran tiempo... cómo es posible no amarlos?
La página commandlinefu.com es el lugar donde se guardan esas gemas que vale la pena no olvidar. El contenido es submitido por la gente y se puede votar a favor y en contra de ellos.
Acá están algunos de los que me parecieron interesantes:
sudo !!
Corre el último comando como root.
Útil cuando te olvidás de agregarle el sudo al principio. !! referencia al último comando corrido.
:w !sudo tee %
Guarda un archivo que editaste en vim sin los permisos correspondientes.
Muy útil cuando te olvidaste de escribir el sudo antes del vim y obtenes el famoso ""E212: Can't open file for writing"". Usá este comando para ahorrarte guardar el archivo en un dir temporal y copiarlo a su lugar original.
cd -
Movete al directorio anterior al actual
^foo^bar
Reemplaza en el comando anterior foo por bar.
Muy útil cuando tenés un error en el comando anterior. También podés usarlo para sacar una letra que pusiste de más, si sin querer usaste
echo "sin errzores"
podrás arreglarlo haciendo
^z
mtr google.com
Mtr, mejor que traceroute y ping combinados.
Al iniciarlo, mtr investiga la conexión de red entre el host donde corre y HOSTNAME (en este caso, google.com), mandando, adrede, paquetes con TTL bajo. Continúa mandando paquetes con la misma característica, para observar el tiempo de respuesta de los routers participantes. Esto le permite imprimir porcentajes de respuesta del ruteo a hostname. Una suba de packetloss o de tiempos de respuestas suele indicar un router que está malo o tiene sobrecarga.
ctrl-x e
Invocar rapidamente un editor para escribir un comando largo o complicado.
La próxima vez que estés usando un shell, tratá de tipear ctrl-x e (eso es, mientras apretás la tecla ctrl, apretá la x y después la e). El shell va a tomar lo que escribiste en la línea de comando y lo va a pegar en el editor especificado en $EDITOR. Así podrás editarlo usando los comandos de nano, vi, emacs, etc.
<space>command
Ejecuta un comando sin salvarlo en el history.
Agregar uno o más espacios al principio del comando hará que éste no se salve en el history. Útil para encontrar pr0n, o para passwords. Probado en BASH.
$ssh-copy-id user@host
Copia las keys ssh a user@host para permitir ssh logins sin password.
Para generar las keys, usen el comando ssh-keygen.
> file.txt
Vaciar un archivo
Para cuando querés borrar el contenido de un archivo sin eliminarlo.
reset
Salva una terminal arruinada.
Si tu terminal se te arruina (bork) mandando data a stdout o algo por el estilo, podes recuperar tu terminal usando este comando en vez de reiniciar la sesión.
mount | column -t
Ver las particiones montadas prolijamente.
Particularmente útil si montas diferentes discos, este comando te permitirá ver los filesystems actualmente montados en tu computadora con sus respectivos atributos con el beneficio de un buen formato,
ssh -N -L2001:localhost:80 somemachine
Crear un tunel desde el puerto 80 de somemachine al puerto local 2001.
Ahora podés ver la página hosteada en somemachine yendo a http://localhost:2001/
echo "ls -l" | at midnight
Ejecutar un comando en el moment especificado.
Es una alternativa al cron que permite schedulear tareas que se ejecutan una sola vez en un tiempo determinado.
netstat -tlnp
Lista todos los puertos que están escuchando con el pid del proceso asociado.
El PID aparecerá sólo si sos root o tenés permisos similares.
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
Usá tu micrófono para hablar en una computadora remota.
La calidad es bastante mala, vas a escuchar un montón de interferencia, pero hey, lo que digas en tu micrófono va a sonar en la computadora de otro!
curl -u user:pass -d status="Tweeting from the shell" http://twitter.com/statuses/update.xml
Twiteá algo usando la línea de comando.
!!:gs/foo/bar
Corre el último comando usado reemplazando globalmente foo por bar.
Muy útil para correr de nuevo un comando largo cambiando argumentos globalmente (cada vez que aparecen), a diferencia de ^foo^bar, que sólo reemplaza la primer ocurrencia de foo.
mount -t tmpfs tmpfs /mnt -o size=1024m
Montar una partición ram temporaria.
Útil si necesitás un espacio temporario en el que se pueda leer y escribir con rápido acceso.
Atención: Nada de lo que salves en esta partición sobrevivirá a un reboot.
man ascii
Rápido acceso a la tabla de caracteres ascii.
sshfs name@server:/path/to/folder /path/to/mount/point
Montar dir/filesystem a traves de ssh.
SSHFS puede bajarse en http://fuse.sourceforge.net/sshfs.html
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
Compara un archivo remoto con un archivo local.
Cuentenme, cuáles son sus favoritos?
Yo hago uso y abuso del for:
for i in $(cat lista); do cp $i $i.$(date +%Y%m%d); done
^ Hace un backup de todos los archivos que voy a modificar con la fecha de hoy.
Y si el cambio me sale mal:
for i in $(cat lista); do mv $i.20121024 $i; done
O si manejás servidores:
for i in $(listaservers.txt); do scp $i:/var/log/syslog ./$i_syslog; done
^ copiar todos los archivos syslog de mis servers en un directorio local.
Mi forma preferida de editar archivos en masa:
sed -i "s/foo/bar/" a.txt b.txt
Para montar un .iso:
mount -o loop disk1.iso /mnt/
Y acá paro porque sino sigo y sigo y sigo... Espero sus one liners!