Buscar un archivo creado entre dos fechas en al shell de Linux

Te acuerdas que creaste un archivo entre el 15 de Septiembre de 2010 y el 30 de Septiembre de ese mismo año. ¿Cómo lo puedes buscar en Linux? Fácil, usando el comando find y estos truquitos:

Primera forma para versiones antiguas del comando find (< =2.4)

$ touch -d "15 sep 2010" /tmp/begin
$ touch -d "30 sep 2010" /tmp/end
$ find . -newer /tmp/begin -a \! -newer /tmp/end

Segunda forma (Para versiones nuevas de find (>=2.4), te lo puedes hacer con un solo comando mediante la opción ‘-newerXY’)

$ find . -newermt “15 sep 2010″ \! -newermt “30 sep 2010″)

Lo he necesitado varias veces y nunca me acordaba de la receta, así que la dejo aquí compartida para todos. ¡Que os aproveche!

Script para optimizar las tablas fragmentadas en MySQL

Bueno otro buen script a la huchaca… esta escrito en bash aparte de ser utilisisimo porque chequea las tablas fragmentadas y tambien chequea todas las bbdds en busca de tablas MyISAM o INNODB y las optimiza.

#!/bin/bash

VERSION="0.7.2"
log="$PWD/mysql_error_log.txt"

echo "MySQL fragmentation finder (and fixer) v$VERSION, written by Phil Dufault ( http://www.dufault.info/ )"

showHelp() {
echo -e "\tThis script only repairs MyISAM and InnoDB tables"
echo -e "\t--help or -h\t\tthis menu"
echo -e "\t--user username\tspecify mysql username to use\n\t\t\tusing this flag means the script will ask for a password during runtime, unless you supply..."
echo -e "\t--password \"yourpassword\""
echo -e "\t--host hostname\tspecify mysql hostname to use, be it local (default) or remote"
}

#s parse arguments
while [[ $1 == -* ]]; do
case "$1" in
--help|-h) showHelp; exit 0;;
--user) mysqlUser="$2"; shift 2;;
--password) mysqlPass="$2"; shift 2;;
--host) mysqlHost="$2"; shift 2;;
--) shift; break;;
esac
done

# prevent overwriting the commandline args with the ones in .my.cnf, and check that .my.cnf exists
if [[ ! $mysqlUser && -f "$HOME/.my.cnf" ]]; then
if grep "user=" "$HOME/.my.cnf" >/dev/null 2>&1; then
if grep "pass=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlUser=$(grep user= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); mysqlPass=$(grep pass= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); if grep "host=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlHost=$(grep host= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); fi else echo "Found no pass line in your .my.cnf,, fix this or specify with --password" fi else echo "Found no user line in your .my.cnf, fix this or specify with --user" exit 1; fi fi # set localhost if no host is set anywhere else if [[ ! $mysqlHost ]]; then mysqlHost="127.0.0.1" fi # error out if [[ ! $mysqlUser ]]; then echo "Authentication information not found as arguments, nor in $HOME/.my.cnf" echo showHelp exit 1 fi if [[ ! $mysqlPass ]]; then echo -n "Enter your MySQL password: " read -s mysqlPass fi # Test connecting to the database: mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show status" >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information.";
exit 1;
fi

# Retrieve the listing of databases:
databases=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show databases;" 2>"$log") );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi

echo -e "Found ${#databases[@]} databases";
for i in ${databases[@]}; do
# get a list of all of the tables, grep for MyISAM or InnoDB, and then sort out the fragmented tables with awk
fragmented=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "SHOW TABLE STATUS FROM $i;" 2>"$log" | awk '{print $1,$2,$10}' | egrep "MyISAM|InnoDB" | awk '$3 > 0' | awk '{print $1}') );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
tput sc
echo -n "Checking $i ... ";
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 1 ]]; then
echo "found ${#fragmented[@]} fragmented tables."
else
echo "found ${#fragmented[@]} fragmented table."
fi
fi
for table in ${fragmented[@]}; do
let fraggedTables=$fraggedTables+1;
echo -ne "\tOptimizing $table ... ";
mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" -D "$i" --skip-column-names --batch -e "optimize table $table" 2>"$log" >/dev/null
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
echo done
done
else
tput rc
tput el
fi
unset fragmented
done

# footer message
if [[ ! $fraggedTables -gt 0 ]]; then
echo "No tables were fragmented, so no optimizing was done.";
else
if [[ $fraggedTables -gt 1 ]]; then
echo "$fraggedTables tables were fragmented, and were optimized.";
else
echo "$fraggedTables table was fragmented, and was optimized.";
fi
fi

if [[ ! -s $log ]]; then
rm -f "$log"
fi

unset fraggedTables

Link | http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/

Script en bash para cambiar el puerto de Apache en todos los dominios en Plesk

Si quereis cambiar el puerto en todos los vhost`s en Plesk, tendreis que cambiar el numero 80 (puerto Apache default de Plesk) dentro del archivo httpd.include de cada vhosts, y si teneis muchos vhosts en el servidor o servidores… como no tengais este pequeño script en bash, os podeis morir en el intento

#!/bin/bash
MY_FILEPATH="/var/www/vhosts"
MY_FILE="httpd.include"
MY_REPLACE=":81"
find $MY_FILEPATH  -name $MY_FILE -exec perl -p -i -e "s[:80][$MY_REPLACE]g" {} \;
service httpd restart"

Problema con la libreta de direcciones en Horde al actualizar a Plesk a la versión 9.5.1

El problema que os comento me ha pasado con Horde (webmail por defecto en Plesk) por actualizar Plesk de la versión 9.3.0 a 9.5.1.

El problema estaba bien claro, al intentar acceder a la libreta de direcciones que Horde guarda, Horde daba el siguiente error:

DBError: field

y el log de Horde daba el siguiente error:

error log : Apr 20 18:05:16 HORDE [error] [kronolith] DB Error: no such  field:
SELECT event_id, event_uid, event_description, event_location,  event_private, event_status,
event_attendees, event_keywords,  event_title, event_category, event_recurcount, event_recurtype,
 event_recurenddate, event_recurinterval, event_recurdays, event_start,  event_end, event_alarm,
event_modified, event_exceptions,  event_creator_id FROM kronolith_events WHERE calendar_id =  'email@domain.com'
AND event_alarm > 0 AND ((event_end >=  '2010-04-20 00:00:00') OR (event_recurenddate >=
'2010-04-20  00:00:00' AND event_recurtype <> 0))
[nativecode=1054 ** Unknown  column 'event_private' in 'field list'] [pid 26294 on line 323 of  "/usr/share/psa-horde/kronolith/lib/Driver/sql.php"]
 Apr 20 18:05:16 HORDE [error] [turba] DB Error: no such field: SELECT  object_id, owner_id,
 object_type, object_members, object_uid,  object_firstname, object_lastname, object_middlenames,
 object_nameprefix, object_namesuffix, object_alias, object_bday,  object_homestreet,
object_homepob, object_homecity, object_homeprovince,  object_homepostalcode, object_homecountry,
 object_workstreet,  object_workpob, object_workcity, object_workprovince,  object_workpostalcode,
object_workcountry, object_tz, object_email,  object_homephone, object_workphone, object_cellphone,
object_fax,  object_pager, object_title, object_role, object_company,  object_category, object_notes,
object_url, object_freebusyurl,  object_pgppublickey, object_smimepublickey FROM turba_objects WHERE
 (object_type = 'Group' AND owner_id = 'email@domain.com')  [nativecode=1054 ** Unknown column
'object_firstname' in 'field list']  [pid 26294 on line 173 of  "/usr/share/psa-horde/turba/lib/Driver/sql.php"]

Vale pues despues de tantos errores aqui os digo la solución que mas o menos daban en los foros de parallels y que yo le aplique al dichoso error.

El error es debido a que Plesk al actualizar a la versión 9.5.1 instala la versión de psa-turba 2.3.3 que es la que crea el complemento de la libreta de direcciones en Horde, pues desinstalamos ese rpm que Plesk instalo:

rpm -e –nodeps psa-turba-2.3.3

Ahora nos vamos a bajar el anterior paquete rpm de la versión de psa-turba que es el 2.1.7 y posteriormente lo instalamos y listo.

wget http://autoinstall.plesk.com/PSA_9.3.0/dist-rpm-CentOS-5-x86_64/opt/horde/psa-turba-2.1.7-cos5.build93091230.06.noarch.rpm

rpm -i psa-turba-2.1.7-cos5.build93091230.06.noarch.rpm

Y listo¡¡¡ ya tenemos la libreta de direcciones que guarda Horde y no hemos perdido ningún contacto porque no hemos tocado la base de datos ni las tablas que usa Horde.

Script para después de instalar Ubuntu Lucid Lynx 10.04

Una vez instalado Ubuntu 10.04 Lucid Lynx, con la ejecución del siguiente script, podréis poner al día vuestro sistema de una forma automática, ahorrando el proceso de consola ( aunque tampoco es que hacer el tipico copy&paste, que todos hacemos es que sea mucho trabajo, pero lo cierto es que con el script las siguientes tareas descritas se realizaran de forma automática:

  • Agrega repositorios (Medibuntu, getdeb, etc).
  • Descarga e instala las últimas actualizaciones.
  • Instala Ubuntu Tweak.
  • Instala codecs, plugins del navegador web (Java, Flash), un apoyo adicional para los archivos (RAR, 7-Zip) y fuentes adicionales, instala el más reciente reproductor de Flash para Ubuntu 10,04 Lucid Lynx 64 del sitio de Adobe.
  • Ajustes GConf: mueve los botones de nuevo a la derecha, desactiva el sonido de entrada GDM, se fija el comportamiento del gestor de actualización para mostrar siempre las actualizaciones y permite los iconos de los menús y botones.
  • Instala GIMP (que se ha eliminado de Ubuntu 10,04).
  • Instala VLC.
  • Instala el cliente de correo electrónico Thunderbird.
  • Instale el navegador web Chromium.
  • Instala Google Chrome – la última versión dev (se descarga la versión de 32 bits o 64 de forma automática – dependiendo de la arquitectura de su sistema).
  • Instala WINE.
  • Instala MPlayer.
  • Establece la codificación de caracteres de MPlayer y Totem  a Central / Europa del Este (Windows-1250), pueden desactivar esto quitando líneas: 64 y 69,70,71,72,73,74,75, o desde la configuración manual en el menú del script.
  • Instala el cliente de mensajería instantánea Pidgin.
  • Tiene con una interfaz gráfica de usuario – bueno, casi, lo único que tienen que hacer es marcar algunas cajas de verificación y la secuencia de comandos hará el resto.
  • Se añadió la instalación de Dropbox (incluyendo el repositorio de Dropbox que es paraKarmic  por ahora, pero funciona en Lucid también – los desarroladores prometen que usará el repositorio para Lucid cuando Dropbox lo de a conocer).
  • Instala las herramientas de desarrollo (de build-essential a Subversion y GIT).
  • Añadido gnome-do.
  • Elimina iconos de unidad del escritorio.
  • Arregla el problema de lentitud del repositorio de Google Chrome para el comando “apt-get update”.
  • Permite desactivar en la pantalla de entrada GDM la lista de usuarios.
  • Añade repositorios: Ubuntu Restricted Extras, Medibuntu, getdeb, Dropbox (sólo si se selecciona para instalar Dropbox)
  • Se instala desde los repositorios: The GIMP, Pidgin, el vino, navegador de cromo, Gnome Do, Guake, VLC media player, Mplayer, SMPlayer, Thunderbird, Dropbox, codecs (multimedia, java, flash), el apoyo archivos adicionales, soporte para DVD y las fuentes, Ubuntu Tweak, Deluge Torrent, CompizConfig Administrador de configuración, herramientas de desarrollo.
  • Descarga e instala los siguientes: navegador de Google Chrome (se descarga la construcción de 32 o 64 bits, dependiendo de su versión de Ubuntu), los emoticones oficiales de Pidgin (para todos los protocolos), la más reciente de Flash Player para 64 bits a través de la web de Adobe, Skype (32 o 64 bits, dependiendo de su versión de Ubuntu).
  • Tweaks:

Mueve los botones de ventana a la derecha (estilo Karmic).
Cambia el comportamiento del Administrador de actualizaciones.
Quita los iconos de las unidades montadas en el escritorio.
Deshabilita el sonido entrada GDM.
Habilita los iconos de los menús y botones.
Deshabilita en el inicio de sesión GDM la lista de usuarios.
Quita el paquete ubuntu-docs (libera 252MB).
Cambia en Gnome Calendar el primer día de la semana de domingo a lunes.
Descarga (o instala) y configura fuentes.
Arregla el “apt-get update” para evitar demoras en el repositorio de Google
Automáticamente monta unidades NTFS en el arranque.

  • Automáticamente acepta la licencia de JAVA.
  • La nueva versión también corrige un montón de errores de la versión anterior.

Tener en cuenta que, antes de ejecutar el script estén corriendo el script como root; que ni Synaptic ni apt-get ni dpkg ni centro de software está en ejecución; comprueben la conexión a Internet para asegurarse de que realmente se pueden instalar los paquetes, etc.

Para ejecutarlo deben pegar las siguientes líneas en la consola:

sudo apt-get install zenity

wget http://launchpad.net/ubuntustart/trunk/0.4.2/+download/ubuntu-10.04-script

chmod +x ubuntu-10.04-script

sudo ./ubuntu-10.04-script

También lo pueden bajar desde aquí: https://launchpad.net/ubuntustart/+download

Espero que les sirva. Yo lo probé y me dio buenos resultados este script para Ubuntu 10.04 .

Y tu, ¿ te animas a crear o mejorar un script mejor que este ?, si lo haces espero lo compartas con nosotros, y lo publiques en tu blog para difundirlo.
Bueno gente, espero que les sea útil, que no tengan problemas para instalarlo y que mejor sustancialmente su experiencia en Ubuntu 10.04.