Ir al contenido principal

10 buenos hábitos para manejar la consola




10 buenos hábitos para manejar la consola



Traducción del original en inglés escrito en un blog de los desarrolladores de IBM en el que se explican 10 malos hábitos y cómo corregirlos para ser más eficaz y tener más posibilidades en el uso de consoltas para sistemas con Bash, como Linux o Mac OS X.


1. Crea árboles de directorios de un sólo golpe



En vez de hacer:


~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $


Podemos hacer directamente:


~ $ mkdir -p tmp/a/b/c


E incluso podemos hacer árboles definiendo más de una rama por nivel, con las llaves definimos más de un hijo por nivel:


~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}




2. Descomprime indicando la ruta, no muevas primero el fichero y luego lo descomprimas



Imaginad que queremos descomprimir el fichero newarc.tar.gz en el directorio tmp/a/b/c pero tenemos dicho fichero en un directorio que no es ése. La solución más típica es mover el fichero y luego descomprimirlo. Esto supone una carga extra que en el caso de ficheros muy grandes supone un problema. Con el parámetro “-C” de tar le podemos indicar la ruta de descompresión:


~ $ tar xvf -C tmp/a/b/c newarc.tar.gz




3. Combina tus comandos con operadores de control


En una misma línea podemos utilizar más de un comando. La forma más simple de hacerlo es con el punto y coma “;”. El problema deriva cuando los comandos que ejecutas dependen el uno del otro, si el primero falla, afecta a los siguientes.

Veamos cómo solucionarlo.

Ejecuta el comando sólo si el anterior ha devuelto un cero (se ha ejecutado de forma exitosa)
Para este caso tenemos el operador &&:



~ $ cd tmp/a/b/c && tar xvf ~/archive.tar


Caso contrario

Si queremos controlar el caso en que el primer comando falle tenemos el operador ||:


~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c


Tenemos la opción de controlar ambos casos de una vez:


~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar




4. Utiliza las comillas cuando trabajes con variables



Si utilizas variables, al asignarles valores alfanuméricos, texto; deberías utilizar siempre comillas dobles (a no ser que tengas razones para no hacerlo). También puedes poner el nombre de la variable entre llaves para asegurarte que se ejecutan bien las llamadas.

Veamos una serie de ejemplos y casos diferentes, con sus respectivas salidas:



~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa

~ $ echo "$VARa"

~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a




5. Utiliza secuencias de escape para manejar entradas muy largas


Imagínate que estamos manejando varios comandos que dependen entre sí (como hemos visto en el punto anterior). Probablemente estemos tratando con unas cadenas verdaderamente largas. Será complicado poder ver todo el código de forma entendible, lo ideal sería tabularlo y ponerlos en varias líneas.

¿Podemos? Claro que sí, para esa labor tenemos la barra tipo Windows: , que nos permitirá justo eso:


~ $ cd tmp/a/b/c
> ||
> mkdir -p tmp/a/b/c
> &&
> tar xvf -C tmp/a/b/c ~/archive.tar




6. Agrupa tus comandos en una lista


Muchas shells nos proporciona métodos para agrupar conjuntos de comandos juntos en una lista de forma que podamos pasar el total de la suma de sus salidas a través de pipelines o redirigir todos los flujos hacia el mismo lugar. Veamos dos formas de hacerlo.

Ejecutar una lista de comandos en una shell secundaria

Se usan paréntesis para encerrar una lista de comandos en un grupo simple. Haciéndolo de esta forma, los comandos se ejecutan en una nueva shell secundaria y te permite redirigir o si no, recoger la salida del conjunto, como en el siguiente ejemplo.


~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c &&
> VAR=$PWD; cd ~; tar xvf -C $VAR archivo.tar )
> | mailx admin -S "Archivo"

En este ejemplo, el contenido del archivo es extraído en el directorio tmp/a/b/c mientras que la salida de los comandos agrupados es enviada por correo al administrador.

Ejecuta una lista de comandos en la shell actual

Utiliza las llaves para marcar la lista de comandos que deben ejecutar en la shell actual. Estate seguro que incluyes espacios entre las llaves y los comandos (sino puedes tener problemas de interpretación). También, debes tener cuidado poniendo un punto y coma al final de la lista. Veamos un ejemplo para este caso:



~ $ { cp ${VAR}a . && chown -R guest.guest a &&
> tar cvf newarchive.tar a; } | mailx admin -S "Nuevo archivo"




7. Utiliza xargs además de find


Utiliza xargs como filtro para hacer un mejor uso de la salida de la orden find. De esta forma, podemos hacer algo con la salida de find. La estructura básica es la siguiente:

~ $ find criterio-búsqueda-archivos ruta |
> xargs acción-a-realizar-con-salida

Podríamos usarlo por ejemplo para borrar todos los ficheros MP3 de un directorio en particular:


find /tmp -maxdepth 1 -name '*.mp3' -maxdepth 1 | xargs rm

Por ejemplo, los del directorio temporal sin mirar en subdirectorios (maxdepth es 1).



8. Aprende a conocer cuando grep debería hacer la cuenta


Aunque con el parámetro -c le indicamos a grep que nos devuelva la cantidad de ocurrencias, no siempre funciona de forma correcta porque devuelve una salida por cada fichero, que a su vez muestra en diferentes líneas.

Para ello usamos:



~ $ grep -o and ruta | wc -l
3402


Siendo 3402, para este ejemplo, el número de ocurrencias.



9. Compara algunos campos en la salida, no sólo las líneas al completo


Para búsquedas en las que queremos definir que sólo haga comparaciones para ciertos campos, deberemos utilizar awk en lugar de grep. Veamos un ejemplo muy claro: estamos buscando ficheros cuya última modificación fue en diciembre. Sin embargo, tenemos un fichero de nombre “December”, aunque la modificación no sea en diciembre sí aparecería en el resultado usando grep.



~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
~/tmp $

Sin embargo, ese no es el resultado que buscamos. Para conseguirlo utilizamos awk y le indicamos que queremos que nos busque en la columna sexta, la que aparecen los meses:

~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
~/tmp $


Como podéis apreciar la flexibilidad de awk es enorme.



10. No uses más cat cuando busques con grep

Un error muy común al usar grep es utilizarlo conjuntamente con cat para buscar el contenido de un sólo fichero. Esto no es necesario, porque grep toma el nombre de los ficheros directamente como argumentos. Es decir, no hace falta usar cat.

Los siguientes dos ejemplos hacen lo mismo, pero el segundo ahorra texto en el comando y tiempo de ejecución:


~ $ time cat tmp/a/longfile.txt | grep and
2811

real 0m0.015s
user 0m0.003s
sys 0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real 0m0.010s
user 0m0.006s
sys 0m0.004s
~ $



Así veremos todo mucho más claro.

Entradas populares de este blog

Fallo al obtener la lista de compartición del servidor

 - Ubuntu Karmic Koala El problema. El detalle es que a veces tengo que revisar archivos que están en otras computadoras que utilizan windows. Al momento de darle en el menú Lugares - Red - Red de Windows y al elegir el grupo de trabajo en el que están mis equipos me aparece el siguiente error. No se puede montar el lugar. Fallo al obtener la lista de compartición del servidor. La solución . La encontré en este articulo de los Foros de Ubuntu, lo voy a copiar tal cual, espero que no le moleste al autor y solo a manera de respaldo. # — Aquí inicia el articulo de los foros de Ubuntu – 1- En principio es necesario que estén instalados: samba samba-common smbclient winbind   2- Luego editar el archivo /etc/samba/smb.conf sudo gedit /etc/samba/smb.conf   A los cambios necesarios para adaptar el sistema, según los tutoriales de samba es necesario tener presente que: a- Donde dice workgroup = WORKGROUP, reemplazar WORKGROUP por el nombre de grupo de ...

Rootear en Ubuntu un teléfono Android

Tengo un teléfono con Android, concretamente un Motorola Defy, y resulta que en Android, basado en Linux, eres un simple usuario y solo puedes realizar algunas tareas. Otras te están vetadas. Conseguir los permisos de superusuario, se llama entre los entendidos rootear el móvil. En principio es una operación que no entraña riesgos, pero en esta vida todo puede fallar. Así que debe quedar claro que si decides rootear el teléfono, lo haces bajo tu propia responsabilidad. También debes entender, que si rooteas el teléfono, los SAT aprovechan para lavarse las manos de cualquier problema y anular la garantía. Y por último, debes saber que es posible que ya no recibas las actualizaciones automáticas de Android. Para rootear teléfonos se utiliza una aplicación llamada Superoneclick . En mi caso, esta parece ser la única solución. Pero este es un programa para Windows, por lo que.... Afortunadamente, esta escrito en .NET, por lo que vamos a poder ejecutarlo con MONO en nuestro ...

Descargar Packet Tracer 5.2 [Windows y Linux]

Packet Tracer 5.2 [Windows y Linux] Packet Tracer es la herramienta de aprendizaje y simulación de redes interactiva para los instructores y alumnos de Cisco CCNA. Esta herramienta les permite a los usuarios crear topologías de red, configurar dispositivos, insertar paquetes y simular una red con múltiples representaciones visuales. Packet Tracer se enfoca en apoyar mejor los protocolos de redes que se enseñan en el currículum de CCNA. Este producto tiene el propósito de ser usado como un producto educativo que brinda exposición a la interfaz comando – línea de los dispositivos de Cisco para practicar y aprender por descubrimiento. Packet Tracer 5.2 es la última versión del simulador de redes de Cisco Systems, herramienta fundamental si el alumno está cursando el CCNA o se dedica al networking. En este programa se crea la topología física de la red simplemente arrastrando los dispositivos a la pantalla. Luego clickando en ellos se puede ingresar ...