Bueno lo que necesito es de un archivo muy pero muy grande, quiero obtener el renglón en donde aparece una determinada expresión, y los n renglones que están después.
Esto lo logramos con grep en Linux, y el comando es el siguiente.
grep -A 10 -e expresión archivo.txt > resultado.txt
con este comando vamos a analizar el archivo llamado archivo.txt y la expresión que queremos encontrar es expresión y todo esto lo guardamos en el archivo resultado.txt. Lo que guardamos es el renglón donde aparece expresión y los próximos 10 renglones.
Esto lo he sacado de http://man.cx/grep(1)/es que van a encontrar los que les mencione y muchas cosas mas.
Intentare mostrarles todas las cosas que me pasan día a día en mis pruebas, en mi trabajo, etc.
domingo, 16 de noviembre de 2008
Obtener texto de un archivo que concuerde con una expresión
domingo, 9 de noviembre de 2008
Respaldo de mysql solamente inserts
Tengo una base mysql y quiero hacer un respaldo, es decir un .sql solo con los inserts de la base de dato, también quiero que no me haba ni el create ni los drop de las tablas, y otra cosa extra que quiero hacer es que no haba lock de las tablas.
El comando seria el siguiente
mysqldump -u root -ppass --lock-tables=false --skip-add-locks -c -e -t -n base > archrespaldo.sql
Contar archivos linux
Necesito contar cuantos archivos hay en una carpeta Linux.
ls /home/* | wc -l
esto me dice los archivos de la carpeta /home.
Borrar archivos (Argument list too long)
Tengo una carpeta en Linux la cual se guardan archivos temporales, pero no se borran, entonces cada tanto tengo que borrarlos a mano.
Cuando paso varios días sin hacerlo estos son tantos, que al intentar hacer rm *, me sale el mensaje Argument list too long.
Buscando un copo encontré como hacer para borrarlos.
for i in ls /home/temp/*; do rm -v $i -f; done
Ejecutando este comando desde el prompt y cambiando solamente la ruta y la búsqueda (es decir modificar el /home/temp/* por lo que queremos borrar, por ejemplo /home/pepe.tx* o lo que sea) se van a borra todos los archivos.
martes, 4 de noviembre de 2008
Consulta que esta corriendo mysql
Si tenemos un servidor en el que esta corriendo mysql (yo las pruebas fueron sobre un Linux pero supongo que no hay problema si se hacen en uno bajo windows por ejemplo) y se están corriendo proceso que no sabemos bien cual es la consulta que esta haciendo, con el siguiente comando la podemos detectar.
show full processlist;
para esto tenemos que loguearnos por consola de mysql, y luego ejecutar la consulta.
Esto lo que nos tira es la consulta que se esta haciendo ejemplo
"Select ... from ... where ... order by ..." o lo que sea que se este ejecutando en ese instante.
Yo lo utilizo para detectar las consultas que hace genexus, no se si todos saben lo que es genexus, pero sirve para desarrollar aplicaciones, sin tener que estar pensando tanto en la base de datos (ya se que es un muy mal ejemplo de que es genexus, y se que gx es mucho mas que eso, pero sirve para entender la idea), es decir el solo te arma las consultas sql cuando accedes a cualquier base de datos.
Como entre a investigar esto, bueno teníamos una tabla en la que había mas de 100 millones de registros y hacíamos una consulta por un índice que tenia un dato, el ultimo, la clave primaria de la tabla, mientras que tenia 2 campos antes que si mysql filtraba por esos 2 debería de devolver unos pocos registros, menos de 500 seguro, y la consulta demoraba mucho, mas de 20 minutos, analizando lo que pasa es que mysql si tiene en algún índice en el que tenga por casualidad la clave de la tabla, mysql se recorre toda la tabla.
Un ejemplo para que quede mas claro
tabla facturas
código,.....,estado,...,dueño,....,
los puntos dicen que ahí hay muchos mas campos.
índice por el cual debería de recorre, estado,dueño,código
la clave primaria, solo código.
Si filtramos los datos de la tabla por estado, dueño, no trae 500 registros.
select * from facturas where estado = 'pendiente' and dueño = 'pepe' esto anda muy rápido, pero si se pone order by estado,dueño,código, demora mucho mucho.
Pero si sacamos el ultimo campo, es decir order by estado,dueño, esto es casi instantáneo.
Luego de googlear mucho detectamos este (digamoslo asi) bug de mysql.
Entonces, no pongan índices en sus aplicaciones que tengan entre sus integrantes la clave primaria.
sábado, 1 de noviembre de 2008
Scp en linux
La situación es la siguiente, tengo 2 servidores los cuales puedo acceder solo por ssh, y hay un archivo (pueden ser varios) que esta en uno de ellos que tengo que pasarlo al otro. Los dos equipos son Linux, esto es una ventaja o puede no serlo, lo que si es interesante es que ambos equipos se pueden ver, es decir que del equipo 1 al equipo 2 puedo acceder, ya sea por ssh o cualquier otra protocolo.
Bueno lo que utilice para copiar de un lugar al otro es scp, pongamos un ejemplo para entenderlo
los equipos: equipo1, equipo2
usuario: root en ambos equipos (pero puede ser otro y pueden ser distintos usuario en uno y otro)
el archivo: pepe.tar.gz, se encuentra en equipo1
entonces quiero pasar del equipo1 el archivo pepe.tar.gz al equipo2, el comando a digitar es el siguiente. Cabe aclarar que debo de estar logueado en el equipo 1 con algún usuario que tenga acceso al archivo.
scp pepe.tar.gz root@equipo2:/root
esto copia el archivo pepe.tar.gz del equipo 1 al /root del equipo2
Ahora el segundo ejemplo es si quiero copiar un archivo del equipo2 al 1 estando parado en el equipo1.
scp root@equipo2:/root/pepe.tar.gz /root
esto copia estando en el equipo1 el archivo pepe.tar.gz que esta en /root del equipo2, al /root del equipo1.
Espero que se entienda, pero realmente es muy útil.