miércoles, 19 de diciembre de 2012

Cómo saber si se está ejecutando un proceso (Linux)









 
Si queremos conocer todos los procesos que se están ejecutando en nuestro equipo, simplemente tenemos que teclear lo siguiente en consola:
ps -e


Si queremos saber si un proceso se está ejecutando y conocemos su nombre o parte de él, debemos usar el siguiente comando:
ps -e | grep nombre_proceso


Nos aparecerán todos los procesos que contengan esa cadena en su nombre. Si no nos develve ninguna línea será porque dicho proceso no se está ejecutando.  

Ejemplo:
ps -e | grep firefox




Nota: El símbolo " | " es una tubería o pipe. Sirve para aplicar la salida de un comando a la entrada de otro comando. Puedes encontrar más información aquí: 
http://dns.bdat.net/documentos/cursos/ar01s138.html




jueves, 13 de diciembre de 2012

Iniciar una aplicación siempre en un escritorio específico (Ubuntu / Linux Mint)









Como sabemos, en la mayoría de distribuciones linux podemos disponer de varios escritorios o workspaces que permiten tener en cada uno distintas aplicaciones. Hasta ahora, mi forma de funcionar era iniciar la aplicación y moverla al escritorio deseado. Pero ¿y si queremos que Firefox siempre se inicie en el escritorio 2?, ¿Podemos ahorrarnos la operación “arrastrar” la aplicación hasta otro escritorio?. La respuesta es sí, gracias a la aplicación Devil's Pie.

 

Instalación:

Lo instalamos mediante nuestro querido apt-get install:
sudo apt-get install devilspie

 
Y lo podemos ejecutar desde el terminal:

devilspie


Pero lo habitual y práctico es configurarlo para que se ejecute cada vez que iniciamos nuestro sistema operativo. En Ubuntu / Linux Mint:

Nos vamos a Sistema / Preferencias / Sesiones. Ahí pulsamos en la pestaña "Programas al inicio" y añadimos "devilspie".


Configuración:

Forma 1: Creando un archivo para cada aplicación. Estos archivos tendrán la extensión .ds y se guardarán en la carpeta ~/.devilspie . Ejemplo del archivo pidgin.ds :

(if
  (is (application_name) "Pidgin")
  (set_workspace 2)
)
Forma 2: Creando un único archivo para todas las aplicaciones. También tendrá la extensión .ds y se guardará en ~/.devilspie .
Ejemplo del archivo general.ds :


(begin
    (if
        (or
            (is (application_name) "Firefox") 
            (contains (application_name) "Search")
        )
        (set_workspace 1)
    )
    (if
        (is (application_name) "Pidgin")
        (set_workspace 2)
    )
    (if
      (contains (application_name) "Calibre")
      (set_workspace 3)
    )
)
 
Como vemos, he utilizado el operador “or” y también “contains” que comprueba si el nombre de la aplicación contiene la cadena que indicamos. Si queréis tener más información de operadores y demás artilugios para crear el archivo de configuración, podéis consutar el siguiente tutorial: http://www.foosel.org/linux/devilspie  

 
Truco: Para saber los nombres exactos de las aplicaciones podemos crear un archivo que se llame por ejemplo debug.ds y que contenga ésto:
(debug)

Cuando iniciemos devilspie desde consola, nos aparecerán los nombres de las aplicaciones que se están ejecutando en ese momento, junto con otro tipo de información de las mismas.

 

Fuentes:

http://www.foosel.org/linux/devilspie 
http://forums.linuxmint.com/viewtopic.php?f=205&t=91606




domingo, 21 de octubre de 2012

Asignar la salida de un comando a una variable (Bash Script)



 






En algunos casos puede que queramos guardar la salida de un comando o instrucción en una variable, para su posterior uso en el script. La sintaxis sería la siguiente:

variable = `comando`  



A continuación vemos un ejemplo para entenderlo mejor.


Crear un directorio que tenga como nombre la fecha actual


Utilizando lo visto anteiormente, se crea una carpeta en la que su nombre es la fecha actual con el formato yyyy-mm-dd:

#!/bin/bash
fecha=`date +"%Y-%m-%d"`
mkdir fecha
 


El nombre de la carpeta tendía la siguiente estructura: 2012-10-17 .

Como siempre, podéis utilizar los comentarios para exponer vuestras dudas.



 




sábado, 20 de octubre de 2012

Uso básico del comando awk (Linux)










El comando awk es un método muy potente que permite procesar o analizar archivos de texto que están organizados por líneas (filas) y columnas. El formato básico del comando awk es el siguiente:

awk 'condición {acción}' archivo-entrada > archivo-salida




Mostrar el contenido de un archivo

awk '{ print }' /etc/passwd  



Mostrar el valor de un campo
 
Indicamos el carácter separador (en este caso ":") y la posición del campo que queremos obtener (en este caso es el primero):

awk -F':' '{ print $1 }' /etc/passwd


 
También podemos ordenar la salida:

awk -F':' '{ print $1 }' /etc/passwd | sort



Mostrar todas las líneas con más de 80 caracteres


 awk 'length($0) > 80' /etc/passwd


Se pueden utilizar los operadores == != < > <= >=


 
Mostrar las líneas que contengan alguna palabra de las indicadas

awk '/maria|juan|antonio/' /etc/passwd



Mostrar tus comandos más utilizados:

history | awk '{print $2}' | sort | uniq -c | sort -rn | head



Mostrar la primera línea del archivo

awk "NR==1{print;exit}" /etc/passwd




Podemos hacernos una idea de que las posibilidades que ofrece awk son infinitas, a la hora de trabajar con archivos de texto. Espero que haya servido para comprenderlo y como guía básica de uso.


Fuentes 




lunes, 1 de octubre de 2012

CSS: Esquinas redondeadas y sin imágenes (todos los navegadores)











Ésta es una cuestión muy hablada y discutida en foros y blogs. Existen infinidad de formas de poner bordes redondeados a elementos como las capas, aunque algunas no funcionan en todos los navegadores (no son Cross-browser) o no son óptimas (utilizan imágenes o demasiados div). Por eso quiero mostrar la que me ha parecido la más conveniente de todas las que habitan en la web.

Lo que tenemos que hacer es añadir el estilo siguiente a nuestra hoja CSS. Como vemos, en él se llama a varias propiedades, propias de cada navegador para conseguir que funcione en todos:

.redondeado {
behavior: url("border-radius.htc");
-moz-border-radius: 20px; /* Firefox */
-webkit-border-radius: 20px; /* Safari y Chrome */
-khtml-border-radius: 20px; /* Konkeror, ... */
border-radius: 20px; /* Opera 10.50, IE y CSS3 */
}


Además, se referencia a un script llamado border-radius.htc , que da soporte a los navegadores IE, en sus versiones 6, 7 y 8. Debemos descargarlo de http://code.google.com/p/curved-corner/downloads/detail?name=border-radius.htc y guardardo en la misma ruta donde están nuestras páginas (no donde está el archivo CSS).


Bonus Track

También podemos añadir sombra al elemento y que funcione en todos los navegadores de esta forma:

  -moz-box-shadow: rgba(0,0,0,0.2) 0px 4px 2px;
  -webkit-box-shadow: rgba(0,0,0,0.2) 0px 4px 2px;
  -khtml-box-shadow: rgba(0,0,0,0.2) 0px 4px 2px;
  box-shadow: rgba(0,0,0,0.2) 1px 4px 10px;



Las propiedades por orden son: color, posición horizontal de la sombra, posición vertical de la sombra, distancia de desenfoque. Más información aquí: http://www.w3schools.com/cssref/css3_pr_box-shadow.aspf






 

Fuentes



Espero que os sirva.




viernes, 14 de septiembre de 2012

Descomprimir un archivo .rar en Ubuntu (p7zip)










Siempre he utilizado File Roller para comprimir y descomprimir archivos .rar en Ubuntu. Pero encontré problemas al aplicarlo a ciertos archivos, así que busqué una alternativa que funcionase en todos los casos. Encontré p7zip y se acabaron los problemas.


Instalación:

Se instala mediante el típico apt-get:

sudo apt-get install p7zip-rar



Descomprimir:

Mediante este comando sencillo y fácil de recorda:

7z x archivo.rar



Aparte, me he creado un script muy simple para descomprimir todos los archivos rar de un directorio (descomprimir.sh):

#!/bin/sh

for param in "$@"
  do
    7z x "$param" 
  done



y luego lo llamamos así:

sh descomprimir.sh *.rar





Fuentes:


http://ubuntuforums.org/showthread.php?t=1846601



Espero que os sea tan útil como a mí y si tenéis alguna duda, ponedlo en los comentarios.

 




jueves, 13 de septiembre de 2012

Organizar / mover archivos a distintas carpetas según su extensión (Bash Script)











Hoy quiero mostrar un script indicado para aplicarlo a todos esos archivos que descargamos de Internet y que nos da pereza organizar en carpetas. Por ejemplo, nos bajamos un montón de imágenes, de archivos html de páginas web que nos han gustado, también mp3s de nuestros artistas favoritos y luego hay que ir seleccionando y moviendo a su carpeta correspondiente. Con este script nos olvidamos de esa tarea monótona y pesada. Lo único que tenemos que hacer es indicar las carpetas destino según el tipo de archivo. Además, si dicha carpeta no existe, la crea. La ruta carpeta origen corresponde con la ruta donde encuentra el script, así que si por ejemplo los archivos a organizar están en /home/usuario/Descargas, pues guardaremos el script en esa carpeta.

Pasemos a ver el código para entenderlo mejor:


#!/bin/bash

dirwebs="/home/usuario/web"
dirimg="/home/usuario/img"
 

# archivos jpg

ls -1 *.jpg | while read archivo
do
   echo "ARCHIVOS COPIADOS: ""$archivo"
   mkdir -p "$dirimg"
   mv "$archivo" "$dirimg"
done 


# archivos html y carpetas

ls -1 -d */ *.html *.htm | while read archivo
do
   echo "ARCHIVOS COPIADOS: ""$archivo"
   mkdir -p "$dirwebs"
   mv "$archivo" "$dirwebs"
done

 

Ni que decir tiene que éste se trata de un ejemplo y que podemos modificarlo y añadirle todas las condiciones que queramos para dejarlo a nuestro gusto y poder mover cualquier tipo de archivo a la carpeta deseada. 

Para cualquier duda podéis utilizar los comentarios.





viernes, 6 de julio de 2012

Crear copia de un archivo añadiendo la fecha en el nombre (bash script).










Todo el que ha programado o administrado un SO ha hecho copia de seguridad de su código o archivo de configuración antes de modificarlo, "por si las moscas". Es una práctica muy útil y recomendable, ya que en caso de que metamos la pata, podremos volver atrás. Existen aplicaciones de control de versiones como Git y Subversion, pero nosotros nos quedaremos en un ejemplo sencillo en el que copiaremos un archivo que nos sirva de respaldo. Al nombre del archivo copiado le añadiremos la fecha actual, todo ello mediante un script. Finalmente indicaremos cómo programar esta tarea para que se ejecute periódicamente usando Crontab


Creando un archivo. 

En este primer ejemplo lo que se hace es formatear la fecha actual y guardarla en la variable "_hoy". Luego se guarda la ruta y el nombre del nuevo archivo en la variable "_archivo" y se le concatena la fecha a esa variable. Finalmente se crea el archivo. Aquí el script: 

#!/bin/bash 
_hoy=$(date +"%m_%d_%Y") 
_archivo="/tmp/miPrueba.txt$_hoy" 
echo prueba > "$_archivo" 

 

Copiando un archivo 

 Lo mismo que el anterior, solo cambiamos la última línea, en la que se copia el archivo miPrueba.txt y en mi caso se crea miPrueba.txt06_19_2012 . 

#!/bin/bash 
_hoy=$(date +"%m_%d_%Y") 
_archivo="/tmp/prueba.txt$_hoy" 
cp prueba.txt "$_archivo" 

 

 

Programando la tarea de ejecución del script 

Puede ser interesante programar las copias para que se hagan diariamente, por ejemplo. Ésto se puede hacer mediante Crontab, cómo ya vimos en el artículo Crontab: ejecución de tareas automáticas en segundo plano . Para ello, editaremos el archivo crontab: 

crontab -e 


Y añadiremos al final ésto: 

15 0 * * * sh copia.sh 


Con ésto se lanzaría el script todos los días a las 0h 15m (si el equipo está encendido), con lo que obtendríamos una copia diaria del archivo.

Espero que haya sido de ayuda. Para cualquier duda u observación, podéis utilizar los comentarios.




viernes, 8 de junio de 2012

Concatenar cadenas de caracteres en bash script (Linux)










Una de las operaciones más comunes que podemos necesitar cuando estemos programando un script para bash es la concatenación de cadenas de caracteres o texto. La sintaxis es muy sencilla y la mejor forma de verlo es con un ejemplo. He creado un script con el nombre concat.sh y su contenido es el siguiente:

#!/bin/bash

CADENA1=hola

CADENA2="que tal"

CADENAFINAL=$CADENA1" "$CADENA2

echo $CADENAFINAL

La salida a este script es:

hola que tal

Recordemos que para lanzar el script se puede utilizar la siguiente orden:

sh concat.sh

Como veis, es muy sencillo y espero que os sirva para crear script más complejos.




jueves, 17 de mayo de 2012

Reproducir un archivo MP3 mediante HTML5




El ejemplo que vamos a tratar es la reproducción de un archivo MP3 mediante etiquetas HTML5. Con ello comprobaremos la potencia y la simplicidad de HTML5. Sí quiero dejar bien claro que los navegadores aún no soportan todos los tags o etiquetas HTML5 y el tag audio que utilizaremos, es un ejemplo de ello. Por ejemplo, está soportado por Chrome 18 e Internet Explorer 9, pero no por Firefox 12. En la página http://html5test.com/ podemos comprobar qué etiquetas están soportadas por el navegador que estamos utilizando. Dicho esto, pasemos a ver la parte práctica.


El código simplificado


Sólo con este código podemos mostrar en el navegador los controles necesarios para reproducir, pausar, ajustar el volumen y avanzar o retroceder la reproducción hasta un punto deseado.


<code><pre>

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Reproductor MP3</title>
</head>
<body>
 
<audio id="audio" controls="controls">
<source src="samplemusic.mp3" type="audio/mp3" />
</audio>
 
</body>
</html>

</code></pre>


El código ampliado


Aquí podemos ver cómo añadir unos botones "play" y "pause" que controlarán la reproducción. Para ello haremos uso de un script Javascript y de las funciones play() y pause() del tag audio.


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Reproductor MP3</title>
</head>
<body>
 
<p>
<button id="play">PLAY</button>
<button id="pause">PAUSE</button>
</p>
<audio id="audio" controls="controls">
<source src="samplemusic.mp3" type="audio/mp3" />
</audio>
 
 
<script>
 
var myAudio = document.getElementById("audio");
var btnPlay = document.getElementById("play");
var btnPause = document.getElementById("pause");
 
btnPlay.addEventListener("click", function(){myAudio.play();}, false);
btnPause.addEventListener("click", function(){myAudio.pause();}, false);
 
</script>
 
</body>
</html>



Las funciones del tag audio

A continuación se muestran algunas funciones el tag audio que son muy utilizadas:

    play() — reproduce el audio
    pause() — pausa el audio
    canPlayType() — Indica si el navegador puede reproducir audio. Ejemplo:
if (myAudio.canPlayType){...}
    buffered() — Atributo que especifica el principio y el fin del buffer. Ejemplo: video.buffered.end(video.buffered.length-1);

Para más información, puedes consultar el siguiente enlace:
http://www.w3schools.com/html5/html5_ref_av_dom.asp


Fuentes





jueves, 29 de marzo de 2012

Leer un archivo de texto línea por línea desde el Terminal de Linux






Me surgió el otro día la necesidad de leer el contenido de un archivo de texto desde el terminal de Linux. Quería que un comando linux tomara como argumentos o parámetros de entrada el contenido de ese archivo, de tal forma que cada argumento correspondería a una línea de ese archivo.

Para probar el script que veremos posteriormente tenemos que crear el archivo de texto a leer, que llamaremos lista.txt y que tendría el siguiente contenido:


Madrid
Barcelona
Valencia
Bilbao

Lo siguiente sería crear un script, el cual leyera línea por línea el archivo de texto. Para cada línea aplicara el comando deseado. Sería algo así:

#! / bin / bash        
FILENAME=nombre_archivo 
while read line        
do        
    COMANDO $line
done < $FILENAME



En mi caso, como es solo un ejemplo, he escogido el comando "echo", que mostrará los valores por pantalla, así que correspondería al siguiente código:


#! / bin / bash        
 
FILENAME=lista.txt
while read line        
do        
    echo $line
done < $FILENAME


Al ejecutarlo, se mostraría en el terminal el siguiente texto:

Madrid Barcelona Valencia Bilbao

Con ésto ya habríamos conseguido nuestro propósito.

Este script puede servirnos como base para crear otros más complejos, o para pasar muchos argumentos a un comando sin tener que escribirlos directamente en el terminal.




viernes, 3 de febrero de 2012

Qué estilo CSS está afectando a una etiqueta o elemento HTML: Firebug (extensión de Firefox).











Hay proyectos web que por su envergadura pueden ser bastante complicados de modificar o depurar. Esto también es así si hablamos de estilos, puesto que podemos encontrarnos con varios archivos CSS, herencia, etc.

Os voy a hablar de una herramienta que nos va a ayudar enormemente y que nos permitirá ahorrarnos bastante tiempo probando y buscando entre hojas de estilo. Esa herramienta realmente es una extensión para Mozilla Firefox que se llama Firebug y es muy conocida en el mundo de la programación web. Podéis encontrar información e instalarla en la siguiente URL:



Las funcionalidades de esta aplicación son muy amplias. Como se describe en dicha web, aparte de inspeccionar y modificar el estilo de una página web, nos permite depurar JavaScript, analizar por ejemplo el tamaño y tiempo de carga de distintos elementos como imánges, etc.

Pero quizás la más útil en general sea la inspección de estilos CSS. Veamos un ejemplo:

Primero abrimos la página en cuestión con Firefox (yo he escogido http://www.linuxfoundation.org/) y pulsamos en el icono siguiente:




A continuación seleccionamos el elemento a inspeccionar. Se mostrará un rectángulo azul indicando el elemento seleccionado:














Abajo nos aparecerán dos paneles. En el de la izquierda se mostrará el código html simplificado (mostrando solo las etiquetas sin el contenido) a excepción del elemento seleccionado, del que se mostrará todo su código.















En el panel de la derecha está lo que más nos interesa, que son los estilos aplicados al elemento seleccionado. Como vemos, nos indica claramente los atributos aplicados según el estilo y también los parámetros aplicados que son heredados.












Los parámetros tachados significan que están redefinidos en algún estilo hijo. A la derecha, en azul, aparece la hoja de estilo y la línea donde se encuentra cada estilo.

Como podréis comprobar, se trata de una herramienta que en cuanto la utilicemos un par de veces se convertirá en imprescindible.






Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO