jueves, 19 de junio de 2014

Mantenimiento y optimización de Manjaro, operaciones manuales








Éste es el tercer post dedicado a mantenimiento y optimización de Manjaro. Puedes leer los artículos anteriores aquí: http://felinfo.blogspot.com.es/2014/06/mantenimiento-y-optimizacion-de-manjaro.html y http://felinfo.blogspot.com.es/2014/06/mantenimiento-y-optimizacion-de-manjaro_19.html . En este caso vamos a ver cómo realizar algunas tareas que no se pueden automatizar y que nos servirán para listar algunos paquetes innecesarios y que pueden borrarse. Finalmente se verá cómo listar algunos archivos de configuración, a los que deberíamos hacerle copia de seguridad.




Identificar archivos que no pertenecen a ningún paquete

Se trata de identificar los archivos que están fuera de la base de datos de pacman. Son los archivos de aplicaciones de terceros que suelen instalarse mediante ./configure && make && make install . Dichos archivos se pueden listar con el siguiente script:
 #!/bin/sh

tmp=${TMPDIR-/tmp}/pacman-disowned-$UID-$$
db=$tmp/db
fs=$tmp/fs

mkdir "$tmp"
trap 'rm -rf "$tmp"' EXIT

pacman -Qlq | sort -u > "$db"

find /etc /opt /usr ! -name lost+found \( -type d -printf '%p/\n' -o -print \) | sort > "$fs"

comm -23 "$fs" "$db"



Y podemos generar la lista así:

sh pacman-disowned > non-db.txt


NOTA IMPORTANTE: No se deben de borrar todos los archivos listados en non-db-txt, ya que ahí pueden aparecer archivos de configuración, logs, etc. Así que usa la lista con responsabilidad y en caso de duda en algún archivo, no lo elimines.



Listar los paquetes instalados que no pertenecen al sistema base

Se quieren mostrarán los paquetes que no pertenecen al sistema. Para ello habría que instalar expac:

sudo pacman -S expac 

Y posteriormente listar los paquetes con el siguiente comando:

expac -HM "%011m\t%-20n\t%10d" $( comm -23 <(pacman -Qqen|sort) <(pacman -Qqg base base-devel|sort) ) | sort -n




Listar los archivos de configuración modificados

Si quieres hacer una copia de seguridad de los archivos de configuración simplemente tienes que copiar el directorio /etc . Pero si sólo quieres copiar los archivos modificados, puedes conocer dichos archivos con el siguiente comando:

pacman -Qii | awk '/^MODIFIED/ {print $2}'



Como siempre, podéis utilizar los comentarios para formular cualquier pregunta.


Fuentes: 

https://wiki.archlinux.org/index.php/System_maintenance




Mantenimiento y optimización de Manjaro, el script








Después de haber visto los comandos (http://felinfo.blogspot.com.es/2014/06/mantenimiento-y-optimizacion-de-manjaro.html), vamos a utilizarlos para crear un script y automatizar las tareas de mantenimiento y optimización de Manjaro. He de decir que aunque me he basado en el artículo https://wiki.archlinux.org/index.php/System_maintenance , este script es personal y adaptado a mis propias necesidades. Lo pongo aquí por si a alguien le sirve de guía, no debe ser una norma a seguir. Por tanto, os recomiendo que cada uno lo analice y lo modifique para que haga exactamente lo que quiere. Debéis utilizarlo bajo vuestra propia responsabilidad. Si tienes alguna duda, puedes preguntarme.

#!/bin/bash

echo "--------------- Actualizando el sistema (1/5) ---------------"
read -r -p "Quieres actualizar tu sistema (incluyendo incluyendo Aur)? [S/n] " response
if ! [[ $response =~ ^([nN][oO]|[nN])$ ]]
then
# sudo pacman -Syu
yaourt -Syua
fi
echo "--------------- Actualizado el sistema (1/5) ---------------"

echo "--------------- Eliminando los paquetes huerfanos (2/5) ---------------"
  if [[ ! -n $(pacman -Qdt) ]]; then
    echo "No orphans to remove."
  else
    sudo pacman -Rns $(pacman -Qdtq)
  fi
echo "--------------- Eliminados los paquetes huerfanos (2/5) ---------------"

echo "--------------- Optimizando la base de datos (3/5) ---------------"
read -r -p "Se va a optimizar la base de datos. Si además quiere borrar la caché de las aplicaciones instaladas pulse i. Para borrar toda la caché pulse t. Para no borrar nada pulse N (recomendado). Pulse [i/t/N].
" response
if [[ $response =~ ^([iI])$ ]]
then
sudo pacman -Sc && sudo pacman-optimize 
elif [[ $response =~ ^([tT])$ ]]
then
sudo pacman -Scc && sudo pacman-optimize
else 
sudo pacman-optimize && sync
fi
echo "--------------- Optimizada la base de datos(3/5) ---------------"

echo "--------------- Actualizando los repositorios (4/5) ---------------"
# ¿Desea actualizar sus repositorios?
read -r -p "Quieres actualizar tus repositorios? [s/N] " response
if [[ $response =~ ^([sS][iI]|[sS])$ ]]
then
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
sudo pacman-mirrors -g
pacman -Syy
fi
echo "--------------- Actualizados los repositorios (4/5) ---------------"

echo "--------------- Vaciando las papeleras (5/5) ---------------"
read -r -p "¿Quieres vaciar las papeleras de reciclaje de todos los usuarios (incluido root)? [S/n] " response
if ! [[ $response =~ ^([nN][oO]|[nN])$ ]]
then
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
sudo rm -rf /root/.local/share/Trash/*/** &> /dev/null
fi

read -r -p "¿Quieres vaciar la carpeta Descargas [S/n] " response
if ! [[ $response =~ ^([nN][oO]|[nN])$ ]]
then
sudo rm -rf ~/Descargas/* &> /dev/null
fi
echo "--------------- Vaciadas las papeleras (5/5) ---------------"



Si tenéis alguna sugerencia, duda ó corrección, podéis utilizar los comentarios.
 

Fuentes:

https://wiki.archlinux.org/index.php/System_maintenance




Mantenimiento y optimización de Manjaro, los comandos








Después de llevar algunos meses utilizando Manjaro, me he decidido a hacer un post donde se explique cómo realizar el mantenimiento y optimización de esta excelente distribución. Me he basado en el artículo "System maintenance" de la Wiki de Arch Linux (https://wiki.archlinux.org/index.php/System_maintenance). Sin más, pasamos a enumerar y explicar los comandos.



Actualizar el sistema

Podemos actualizar los paquetes del repositorio oficial:
sudo pacman -Syu

O bien actualizar los paquetes del repositorio oficial y de AUR (Arch User Repository):
yaourt -Syua



Eliminar los paquetes huérfanos

Se van a eliminar los paquetes que no dependen de ninguna aplicación. Para listar dichos paquetes usamos:
pacman -Qdt

Si hay paquetes huérfanos los eliminamos así:
sudo pacman -Rns $(pacman -Qdtq)



Borrar la caché de los paquetes

Ésto solo lo haremos en caso de que estemos seguros de que los paquetes instalados son estables. Borrará las versiones anteriores de la carpeta de caché y por tanto no podremos hacer downgrade:
sudo pacman -Sc

El comando siguiente es aun más agresivo, ya que borra completamente la carpeta de caché. No debemos usarlo a no ser que desesperadamente queramos obtener espacio en disco:
sudo pacman -Scc



Optimizar el acceso a la base de datos

Con el siguiente comando se mejora la velocidad de acceso a la base de datos y por tanto también el tiempo necesario para las operaciones sobre ésta:
sudo pacman-optimize && sync 

 

 

Actualizar los repositorios

Se va a rehacer el archivo mirrorlist, de foma que ordene los servidores disponibles dependiendo de su tiempo de acceso (previamente deberemos hacer una copia de seguridad del archivo mirrorlist, como se muestra a continuación):

cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup

sudo pacman-mirrors -g

pacman -Syy

 

 

Vaciar las papeleras de reciclaje y otras carpetas

Este paso es opcional y no aparece en el artículo "System maintenance" que mencioné al principio. Cada uno debe pensar si es conveniente llevarlo a cabo o no. Se vaciarán las papeleras de reciclaje de todos los usuarios del sistema, incluida la de root:

rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
sudo rm -rf /root/.local/share/Trash/*/** &> /dev/null

Personalmente también borro la carpeta de Descargas, ya que ahí siempre quedan archivos que no voy a volver a necesitar:
sudo rm -rf ~/Descargas/* &> /dev/null



Si te ha parecido interesante, puedes pasar al post Mantenimiento y optimización de Manjaro, el script, donde se explica como automatizar todas estas tareas usando un script.

Fuentes:

https://wiki.archlinux.org/index.php/System_maintenance




jueves, 22 de mayo de 2014

Mostrar Barra de Progreso al Copiar Archivos desde el Terminal (Linux)











Quizás alguna vez nos toque copiar archivos de gran tamaño y por comodidad o constumbre queramos utilizar el terminal de Linux. Como sabemos, se puede hacer facilmente con la instrucción cp, pero tiene un inconveniente: no da ningún tipo de información de cuanto llevamos copiado, de la estimación de tiempo restante, de qué archivos se han copiado y de cuales se están copiando ... Es decir, nos faltaría toda esa información que nos da una barra de progreso cuando utilizamos un gestor de archivos con interfaz gráfica. ¿Como podemos obtenerla cuando estamos utilizando el terminal?. A continuación lo explico.

En vez de utilizar el comando "cp" vamos a utilizar "rsync --progress". No nos muestra una barra de progreso tal y como la entendemos, pero sí nos aporta la misma información. Veamos unos ejemplos y una captura de pantalla:


  • Copiar un archivo:
rsync --progress  /home/usuario/videos/concierto.mp4 /media/datos/videos


  • Copiar un directorio:
rsync --progress -r /home/usuario/videos /media/datos/


A continuación muestro una captura de pantalla:




Como vemos, nos da información individual de cada archivo, indicando la cantidad de información copiada, el porcentaje, la tasa y el tiempo estimado para la finalización. Ahora sí tendremos una idea más precisa de qué está pasando.

Pero la funcionalidad de rsync es mucho más amplia, así que recomiendo visitar su web oficial donde encontraréis documentación, ejemplos y demás: 
http://rsync.samba.org. Además, en caso de que en tu distribución no venga instalada esta utilidad (y tampoco la encontréis en los repositorios), en esa misma página podréis descargarla.

Espero que haya sido útil. Para cualquier duda podéis utilizar los comentarios. 


Fuentes:

http://everythinglinux.org/rsync/
http://apple.stackexchange.com/questions/19121/will-terminal-show-a-progress-bar-when-i-copy-with-cp




lunes, 7 de abril de 2014

Manejar Truecryp desde Línea de Comandos


 









Truecryp es una fantástica aplicación de encriptación que además es gratuita y open source. Aunque dispone de interfaz gráfica, también puede manejarse desde la consola de Linux, lo cual permite que incluyamos algunos comandos de Truecrypt en nuestros scripts.

Para obtener la lista completa de comandos disponibles podéis ejecutar truecrypt –h desde la consola. A continuación voy a mostrar algunos ejemplos:

 

Montar un volumen o unidad

Debemos de crear primero el volumen, utilizando la aplicación gráfica (aunque también se puede hacer desde consola). Es muy sencillo, ya que dispone de un asistente que te guía en el proceso (si no lo tenéis claro podéis seguir este tutorial: http://www.truecrypt.org/docs/tutorial#Y0). Luego hay que crear la carpeta donde se va a montar (en este caso mkdir /media/truecrypt1). Una vez hecho ésto, cada vez que queramos montar el volumen sólo tendremos que ejecutar lo siguiente:

truecrypt /home/usuario/truecrypt/fotos.tcryp /media/truecrypt1

Donde /home/usuario/truecrypt/fotos.tcryp es la ruta y el nombre del archivo del volumen a montar. Y donde /media/truecrypt1 es la carpeta donde se va a montar el volumen.
Como dijimos antes, ésto da mucho juego y podemos crearnos nuestros propios scripts. Ejemplo:

#!/bin/bash         
truecrypt /home/usuario/truecrypt/fotos.tcryp /media/truecrypt1
sleep 2
thunar /media/truecrypt1 &

Con ésto montamos el volumen y lo abrimos con el gestor de archivos. En mi caso he usado Thunar, pero también podría ser Nautilus, Nemo, ...


Desmontar todos los volúmenes

Si queremos desmontar todos los volúmenes de una forma fácil y rápida no tenemos más que ejecutar lo siguiente:

truecrypt -d



Ésta ha sido una breve introducción de cómo controlar esta gran aplicación desde la consola o scripts. Se pueden hacer muchas más cosas, valiéndonos de la ayuda de su página web y de la colección de comandos (truecrypt -h). Si tenéis dudas o si queréis hacer algo en concreto y no sabéis cómo, podéis preguntarme usando los comentarios.



Fuente:

http://www.truecrypt.org/docs/command-line-usage




Mosaico Vertical de Ventanas en XFCE (teclas rápidas)



Siempre me ha gustado trabajar con dos ventanas verticales, colocadas de forma que ocupen la mitad de la pantalla. Hace unas semanas empecé a utilizar el escritorio XFCE y de las primeras cosas que hice fue configurar las teclas rápidas (hotkeys) para colocar rápidamente de ese modo las ventanas. A continuación voy a describir el proceso:
  1. Pulsar en Inicio, posteriormente en Configuración y finalmente en Gestor de Ventanas.
  2. Pulsar en la pestaña Teclado.
  3. Configurar las teclas rápidas de la siguiente forma:



Tendremos que pulsar en “Mosaico de ventanas en la parte izquierda” y a continuación nos pedirá que pulsemos la combinación de teclas que le queremos asignar a esa acción. Luego haremos lo mismo con “Mosaico de ventanas en la parte derecha”. Cada uno deberá asignar la combinación de teclas que le resulte más cómoda.

Nota: La tecla Super es la tecla Windows de la mayoría de los teclados.

Como podéis ver, siguiendo este mismo procedimiento podemos configurar las teclas rápidas que ejecutarán muchas otras acciones y que nos facilitará y agilizará el uso diario de nuestro escritorio.


Fuente:

https://forum.xfce.org/viewtopic.php?id=7613




martes, 11 de marzo de 2014

Consulta SQL sobre MySQL desde Java







Vamos a detallar los pasos a seguir para hacer una consulta SQL desde nuestra aplicación Java.

 

Importar el driver JDBC

Tenemos que descargar el driver oficial JDBC para MySQL desde aquí: http://dev.mysql.com/downloads/connector/j/3.1.html . Posteriormente lo importaremos a nuestro IDE. Si estamos utilizando Eclipse lo haremos de la siguiente forma: pulsando con el botón derecho sobre la carpeta del proyecto; pulsamos en Propiedades; opción "Java Build Path"; pestaña Librerías; finalmente pulsamos en "Add External JAR" y seleccionamos el archivo mysql-connector-java-3.1.14-bin.jar (el nombre puede variar dependiendo de la versión que hayamos bajado).


El código

Queremos hacer una consulta sobre una base de datos MySQL, que en mi caso se encuentra en mi equipo local. A continuación se muestra el código.

import java.sql.*;

public class Consulta {

    public static void main(String[] args) throws SQLException,
            ClassNotFoundException {

        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/bd", "usuario", "contraseña");

            Statement stmt = conn.createStatement();

            String query = "SELECT * FROM producto;";
            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()) {
                String marca = rs.getString("MARCA");
                System.out.println(marca);
                String descripcion = rs.getString("DESCRIPCION");
                System.out.println(descripcion);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}


Es muy importante configurar la conexión jdbc correctamente. Me estoy refiriendo a la siguiente línea:

Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/bd", "usuario", "contraseña");

Como mi base de datos se encontraba en mi equipo local he puesto localhost, pero de no ser así, habría que poner el nombre del equipo (host) donde se encuentra.


En bd hay que poner el nombre de la base de datos, y a continuación en "usuario" y "contraseña" pondremos el usuario y contraseña de la base de datos.

He hecho un SELECT de una tabla llamada producto, la cual tiene dos columnas (MARCA y DESCRIPCION). Para guardar los registros resultantes de la consulta utilizo un Resultset. Finalmente recorro el Resultset y voy mostrando en pantalla su contenido.


Espero que os sirva. Como siempre, podéis utilizar los comentarios para exponer vuestras dudas.




lunes, 10 de marzo de 2014

Comparar dos directorios rápidamente en Linux









En Linux se pueden comparar dos directorios o carpetas mediante el comando diff. Por ejemplo, si ejecutamos lo siguiente:
diff directorio1 directorio2

Ésto nos indicará qué archivos están en un directorio y no en otro. En caso de que haya dos archivos con el mismo nombre y su contenido sea distinto, también se indicará.

El comando anterior tiene un inconveniente, y es que puede ser demasiado lento. Si los directorios contienen muchos archivos o si la unidad de almacenamiento es algo lenta, el proceso puede eternizarse.  Pero el siguiente comando solucionará ésto de un plumazo:

diff <(cd dir1 && find | sort) <(cd dir2 && find | sort)


Como vemos, se sigue usando el comando diff, pero en vez de comparar los archivos, compara el listado ordenado del directorio.

Si lo probáis veréis lo potente que puede llegar a ser. Podéis utilizar los comentarios si os surge alguna pregunta.




Fuentes:




viernes, 17 de enero de 2014

Crear Ventanas Emergentes con JQuery (Javascript)










En este artículo vamos a aprender a crear ventanas emergentes o popups mediante Javascript. Para ello utilizaremos la famosa librería jQuery y un plugin específico para popups llamado bPopup. Lo primero que tenemos que hacer es descargarnos jQuery (http://jquery.com/download/) y bPopup (http://dinbror.dk/bpopup/), e importarlo en nuestro html:

< script src="jquery-x.x.x.min.js">< /script>
< script src="jquery.bpopup-x.x.x.min.js">< /script>


Hay que sustituir las x.x.x por la versión de las librerías que os hayáis bajado.

A continuación muestro el código completo de un ejemplo muy sencillo:



< !DOCTYPE html>
< html>
< head>
< title>Ventana Emergente< /title>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
< script src="jquery-2.0.3.min.js">< /script>
< script src="jquery.bpopup-0.9.0.min.js">< /script>

< script type="text/javascript">
    ;(function($) {
         // Cuando la página esté cargada
        $(function() {
            // Evento click
            $('#boton').on('click', function(e) {
                // Prevenir la acción por defecto
                e.preventDefault();
                // Se lanza el método bPopup 
                $('#elemento_a_mostrar').bPopup();
            });
        });
    })(jQuery);
 < /script>
< /head>

< body>
     < !-- Botón -->
            < button id="boton">Mostrar mensaje< /button>
            < !-- Contenido a mostrar -->
            < div id="elemento_a_mostrar">El plugin bPopup funciona correctamente< /div>
< /body>
< /html>


 
Nota: Para que el blog me interprete el código como texto y no como html he tenido que añadir un espacio después de cada “<”. Cuando vayáis a probar el código, simplemente debéis quitar ese espacio.

Como vemos, simplemente tenemos un botón y un div que contiene el elemento a mostrar (en este caso un mensaje). Al pulsar en el botón se llama al método bPopup(), que se lanza sobre el elemento #elemento_a_mostrar. La línea e.preventDefault(); sirve para evitar la acción por defecto del evento. Por ejemplo, evitar que al pulsar sobre un hipervículo el navegador nos lleve a la dirección del hipervículo.

Utilizando este plugin y unas pocas líneas de código podemos conseguir un gran número de distintos estilos, efectos y tipologías de ventanas emergentes. Recomiendo que probéis los distintos ejemplos que muestra el autor del plugin en su página http://dinbror.dk/bpopup. Es sorprendente cómo con tan poco se puede hacer tanto. Como dice el lema de jQuery: "write less, do more".

 

 

Fuentes:

http://dinbror.dk/bpopup
http://dinbror.dk/blog/bPopup
http://gespadas.com/return-false-preventdefault




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

TOPO