¿Cómo cambiar la fecha y la hora desde la consola?

Hoy mismo he tenido un problema que en absoluto es baladí. Me han avisado de que una aplicación de creación propia no funcionaba por un tema de fechas y horas, en concreto, no dejaba reservar un recurso común porque decía que la hora de reserva era anterior a la actual. El problema era que el servidor sobre el que ejecuta dicha aplicación, tenía mal la hora (está virtualizado con Xen y lleva sólo un par de días en marcha).

La solución es utilizar un servidor NTP pero mientras lo configuras y abres la conexión en el cortafuegos corporativo, lo más básico es poder modificar la fecha y hora a mano desde la terminal. read more

Leer más » 6 Comentarios

10 buenos hábitos para manejar la consola (2/2)

Si el otro día os comentábamos los primeros 5 buenos hábitos para manejar la consola, hoy os traemos los siguientes 5 con lo que terminamos esta serie, que como es digo, es una traducción adaptada del original de la librería técnica de IBM.

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 es1).

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 $ read more

Leer más » 10 Comentarios

10 buenos hábitos para manejar la consola (1/2)

Esta serie de buenos hábitos al manejar la consola son una traducción adaptada aoriginal titulado: UNIX tips: Learn 10 good UNIX usage habits, aparecido en la parte de desarrolladores del portal de IBM.

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 read more

Leer más » 8 Comentarios

[Resultados] La encuesta de la semana #10. ¿Cuánto usas el terminal?

Resultados de la encuesta #10

Los resultados de La encuesta de la semana #10. ¿Cuánto usas el terminal? me han gustado bastante, parece que la mayoría de nuestros lectores tienen una forma de entender el uso de la consola similar a la mía. Personalmente prefiero usar la consola cuando puedo, no hago un uso extremo pero para p.e. lanzar comandos de búsqueda, matar procesos, ver actividad del pc, instalar aplicaciones, etc. me resulta bastante completa. ¿Es este tu caso o para algo más?

PD: Siento no haber podido publicar los resultados este viernes (como todas las semanas). read more

Leer más » 2 Comentarios

La encuesta de la semana #10. ¿Cuánto usas el terminal?

LEDLS

A mi personalmente me gusta usar la consola a menudo. Pienso que si algo se puede hacer mediante comando siempre será más rápido y más controlado que mediante una interfaz gráfica (GUI), pero no todos piensan así, ¿cuál es tu caso?

Leer más » 4 Comentarios

Conocer el comando PS de Linux.

comando_PS

El comando es mucho más potente de lo que pensamos, y este poder viene de su versatilidad absoluta. El comando significa “process status” (Estado de los procesos), y nos muestra todo lo relacionado con los procesos de nuestra máquina; en cierto modo hay que pensar en el como el administrador de tareas de los más frikis (geeks).

Existen muchas formas para utilizar , la más común es PS AUX, que nos devuelve una lista por consola de los procesos que están ejecutanddo. Otro de los más conocidos es PS AUX| GREP PID, para acceder a un proceso en concreto, retonándonos información sobre el mismo. Normalmente podemos usarlo en conjunto del comando KILL, con la idea de terminar un proceso conociendo su nombre. Así mismo nos gustaría conocer que otro uso le das al comando … ¿Mostrando los procesos de un usuario en concreto? ¿Los que cumplen cierta condición? read more

Leer más » 1 Comentario