.

Breaking News
recent

-

Herramientas para un sysadmin canchero I

Ser un sysadmin consiste, generalmente, en administrar varios servidores: instalar aplicaciones, cambiar configuraciones, parchar sistemas operativos, monitorear que las máquinas esten saludables, y bastantes etc. Admitamoslo, colegas, una vez que hemos realizado una tarea varias veces, vamos a encontrar la forma de automatizarlo, o simplificarlo. Cuando se puede, se escribe algún scripcito, otras veces la agrupacion de sysadmin pone a nuestra disposición algunas herramientas que nos hacen felices. Veamos algunas de ellas.

Herramientas para el servidor

SSH keys

Elemental, mi amigo sysadmin! Lo sé, lo sé, probablemente ya las tiene instaladas, pero dejeme dar una breve explicación para aquel que no las conoce.

Una key o llave ssh es un sistema de autentificación que nos permite saltear la parte de user/passwd. Sin keys, para entrar a un servidor voy a hacer:

law@pulpo ~ $ ssh law@myserver
law@myserver's password:
Last login: Mon Oct 22 11:10:35 2012 from pulpo
law@myserver:~ $



Luego de introducir mi password, el servidor me dará un shell.

En cambio, las ssh keys consisten de una parte pública y una privada. El servidor tiene la parte pública. Cuando me conecto a él, se fija que la parte privada, que está en mi computadora, coincida con la pública. En caso de que así sea, tengo acceso al server.

Las llaves son más seguras que user/password, y pueden ser configuradas con una passphrase para añadir más seguridad.



Cómo las configuro?

Vamos a crear keys para ir desde mi máquina, pulpo (linux mint), hacia una servidor, myserver (redhat).

1. Creamos un par de keys en pulpo:

law@pulpo ~ $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/law/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/law/.ssh/id_rsa.
Your public key has been saved in /home/law/.ssh/id_rsa.pub.
The key fingerprint is:
lalala law@pulpo
The key's randomart image is:
more lalala
law@pulpo ~ $



2. Podemos ver en el output que se creó una key pública, id_rsa.pub, y una privada, id_rsa. Ambas se almacenan en /home/user/.ssh. Confirmemoslo:

law@pulpo ~/.ssh $ ls -la
total 36
drwx------ 2 law law 4096 2012-10-24 15:53 .
drwxr-xr-x 41 law law 4096 2012-10-23 13:20 ..
-rw------- 1 law law 1679 2012-10-24 15:53 id_rsa
-rw-r--r-- 1 law law 391 2012-10-24 15:53 id_rsa.pub
-rw-r--r-- 1 law law 9994 2012-10-11 12:22 known_hosts



Perfecto. Notese que la carpeta .ssh debe tener permisos 700, la parte pública 644, y la privada 600. Todo con mi owner y mi grupo.

3. A poner la parte pública en el servidor.

Hagan un cat de id_rsa.pub. Van a ver algo como esto:

ssh-dss AAAAB3NzaC1kc3MAAACBAOxceX7OXeOtT YCEptKhw/uqsvHkhUnUUi1zydduxPhzIjQzOEXnBCJ3tzkf2oA+WxFi75D0SLDf0W5cqLLFTKqFhA7m/c8nwONdgeHelhQ47abZO1DKNppivrJZKCY3We2GFRB/e7/Eze8d7NGOQoGCtRQIYNAAAAFQCZUJ744hZOXfg952mFV63Wg9Oz6QAAAIAI+rl1gcvHyESy37nc+cOwqBgOum8DzpMs9cebAt3Wyeok1rWKAq7im4D9zcZ02Ho+lRBGzWlYPgkEoMRCah71oQWig2Pc0OsYnB8ncEolsTfiGkWJTpF26SFFaKaGs+tSa/lROAoSWkfr4nLyXS0waIlDh5ddfxRB80bgStOC3gAAAIEA3k0J5wleCv1qCStALrPBfmgLtrmn7cDjOjNtrrhm8ipdfmFlWxfqAJiqoAv2joIyasLdogm1XaJWD2HU6vYOY2xPDzg0MLJGnhiPww/ou4LxRBOpl50Z5E25NRrr39vgVmsXCbdp2sLDV7jw9i78ctsBgkMsgu86toryiyCYtoI= law@pulpo



Copiar.

Entramos a myserver (por última vez con user/password!). Vamos a /home/user/.ssh y buscamos el archivo authorized_keys (en algunos servers, authorized_keys2):

law@pulpo ~/.ssh $ ssh law@myserver
law@myserver's password:
Last login: Wed Oct 24 12:25:02 2012 from pulpo
law@myserver:~> ls -la
total 52
drwxr-xr-x 6 law techops 4096 Aug 21 20:53 .
drwxr-xr-x 13 root root 0 Oct 17 15:37 ..
-rw------- 1 law techops 10641 Oct 24 13:08 .bash_history
-rw-r--r-- 1 law techops 177 Jan 26 2011 .bash_profile
-rw-r--r-- 1 law techops 125 Jan 26 2011 .bashrc
drwx------ 2 law techops 4096 Jan 26 2011 .ssh
-rw------- 1 law techops 5413 Aug 21 20:53 .viminfo
law@myserver:~> cd .ssh/
law@myserver:~/.ssh> ls -la
total 20
drwx------ 2 law techops 4096 Jan 26 2011 .
drwxr-xr-x 6 law techops 4096 Aug 21 20:53 ..
-rw-r--r-- 1 law techops 1197 Feb 10 2012 authorized_keys
-rw-r--r-- 1 law techops 598 Jul 25 2011 authorized_keys2
-rw-r--r-- 1 law techops 3448 Apr 25 11:51 known_hosts
law@myserver:~/.ssh>



Si no existe, lo crean con 644. En authorized_keys es donde vamos a poner la key. Si, ese choclazo que está adentro de la public key. Editen authorized_keys y agreguenlo al final, o un simple...

echo "key" >> authorized_keys



alcanza.

4. Voilá! Salgan del servidor, vuelvan a entrar, y si hicieron todo bien, el server no les pedirá password, a lo sumo la passphrase:

law@pulpo ~/.ssh $ ssh law@myserver
Last login: Wed Oct 24 14:00:20 2012 from <mi ip>
law@myserver:~>



Si no funcionó, revisen permisos y owners!

PDSH - http://code.google.com/p/pdsh/

Resuuuulta queeee tengo 25 servidores, y necesito saber si el paquete postfix esta instalado y si está en la última versión. Si el paquete es viejo, tengo que actualizarlo.

Opción 1: Entro a la primer máquina, hago un rpm -qa | grep postfix o dpkg -l | grep postfix o blah. Encuentro la versión de postfix. Si necesita ser actualizada, yum install postfix o apt-get install postfix o blah. Entro a la segunda máquina. Repito los pasos. Repetir hasta que los 25 servidores hayan sido chequeados.

Opción 2: For i in lista_de_servers; do ssh $i; done. Una vez que estoy dentro del server, hago un rpm -qa, y si es necesario, instalo el paquete. Al salir del servidor el loop for me lleva al próximo sin q yo necesite hacer nada.

Opción 3: Usar pdsh.

PDSH es una herramienta que abre varias shells paralelamente, corre un comando que nosotros le indicamos, muestra el resultado en pantalla y sale.

En nuestro ejemplo, haríamos algo así:

[law@pulpo ~]# ssh root@master
Last login: Wed Oct 24 13:44:13 2012 from pulpo
root@master:~> cd /etc/dsh/group/
root@master:/etc/dsh/group> ls
backup devvm
root@master:/etc/dsh/group> head devvm
devvm01
devvm02
devvm03
devvm04
root@master:/etc/dsh/group> pdsh -g devvm "rpm -qa | grep postfix"
devvm10: postfix-2.3.3-2.3.el5_6
devvm01: postfix-2.3.3-2.3.el5_6
devvm09: postfix-2.3.3-2.3.el5_6
devvm07: postfix-2.3.3-2.3.el5_6
devvm11: postfix-2.3.3-2.3.el5_6
devvm02: postfix-2.3.3-2.3.el5_6
devvm03: postfix-2.3.3-2.3.el5_6
devvm06: postfix-2.3.3-2.3.el5_6
devvm14: postfix-2.3.3-2.3.el5_6
devvm13: postfix-2.3.3-2.3.el5_6
devvm08: postfix-2.3.3-2.3.el5_6
devvm04: postfix-2.3.3-2.3.el5_6
devvm15: postfix-2.3.3-2.3.el5_6
devvm12: postfix-2.3.3-2.3.el5_6
devvm05: postfix-2.3.3-2.3.el5_6



Hey, copado! Todas están en la versión que necesito! Pero si, por ejemplo, devvm05 y devvm22 no lo estuvieran pero las demás si, las puedo actualizar de la siguiente manera:

root@master:/etc/dsh/group> pdsh -w devvm05,devvm22 "yum install -y postfix"



También acepta regex:

root@master:/etc/dsh/group> pdsh -w devvm0[1-5] "date"
devvm03: Wed Oct 24 14:21:25 CDT 2012
devvm01: Wed Oct 24 14:21:25 CDT 2012
devvm04: Wed Oct 24 14:21:25 CDT 2012
devvm02: Wed Oct 24 14:21:25 CDT 2012
devvm05: Wed Oct 24 14:21:25 CDT 2012
root@master:/etc/dsh/group>



Incluidos con pdsh se incluye rpdcp, una herramienta que permite transferir archivos remote y paralelamente de server a server. Como scp en paralelo:


rpdcp -l root -w "devvm0[1-5]" /var/log/httpd/access_log .



Rsync - http://es.wikipedia.org/wiki/Rsync

Rsync es una aplicación utilizada para copiar archivos. Cuál es la ventaja sobre cp/scp? te estarás preguntando. Rsync funciona a través de comparaciones, al detectar una diferencia en el directorio de destino, hará el cambio necesario para que los archivos terminen siendo iguales. No solamente es más efectivo por ser más rápido, sino que también permite continuar desde el mismo punto si por alguna razón es interrumpido. Muy recomendado para hacer backups.

Haciendo rsync -h o yendo a la man page del comando encontrarán una lista de todas las opciones, y en el link a wikipedia tienen un tutorial.

Yo lo utilizo de esta manera:


rsync -aPi law@pulpo:/home/law/ law@server:/home/law/



De esa manera tendré en el server una copia de mi carpeta. Los argumentos:

a: archive mode. Lo mismo que hacer -rlptgoD (recursivo, copiar links, conservar permisos, conservar tiempos de modificación, conservar grupos, conservar owner, conservar permisos especiales).
P: conservar los archivos parcialmente transferidos y mostrar el progreso de los archivos.
i: mostrar un resumen de todos los items modificados.

Nótese que el rsync debe estar instalado en ambas máquinas para que funcione.

awk

Awk es un lenguaje de programación utilizado para manejar texto, como por ejemplo, encontrar patrones, descartar parte del texto, etc.


Receta Para Un Lenguaje De Programación

1 parte egrep 1 parte snobol
2 partes ed 3 partes C

Mezclar todas las partes usando lex y yacc. Documentar minimamente y lanzar.

8 años más tarde, agregar otra parte de egrep y dos partes más de C. Documentar muy bien y relanzar.



Al ser un lenguaje, hay muchisimo para aprender, así que vamos a limitarnos a los one liners (comandos mágicos que entran en una sola línea).

Cómo se usa?

cat $file | awk ' {<codigo>} '

Para manipular la información en $file.

Veamos esos one liners.

Mi archivo de prueba, una obra de arte:

$ cat test.txt
Line 1
Line 2
Line 3
Line 4



Agregar un extra enter despues de cada linea:


$ cat test.txt | awk '1;{print ""}'
Line 1

Line 2

Line 3

Line 4



Agregar dos extra enters:

$ cat test.txt | awk '1;{print "n"}'
Line 1


Line 2


Line 3


Line 4




Agregar número de línea a la izquierda:

$ cat test.txt | awk '{print FNR "t" $0}'
1 Line 1
2 Line 2
3 Line 3
4 Line 4



$ cat test.txt | awk '{printf("%5d : %sn", NR,$0)}'
1 : Line 1
2 : Line 2
3 : Line 3
4 : Line 4



Mostrar nro de línea sólo si la línea no está vacía:

$ cat test.txt | awk 'NF{$0=++a " : " $0};1'
1 : Line 1
2 : Line 2
3 : Line 3
4 : Line 4



Contar las líneas (lo mismo que wc -l):

$ cat test.txt | awk 'END{print NR}'
4



Agregamos una línea más:

$ echo "Ramanathan agrega una linea Lalalala" >> test.txt
$ cat test.txt
Line 1
Line 2
Line 3
Line 4
Ramanathan agrega una linea Lalalala



Imprimir la cantidad de líneas que contienen el campo (palabra) "Line":

$ cat test.txt | awk '/Line/{n++}; END {print n+0}'
4
$ cat test.txt | awk '/Ramanathan/{n++}; END {print n+0}'
1



Imprimir la cantidad de líneas en el archivo:


$ cat test.txt | awk '{ total = total + NF }; END {print total}'
13



Imprimir cantidad de campos (palabras) por línea:

$ cat test.txt | awk '{ print NF ": " $0 } '
2: Line 1
2: Line 2
2: Line 3
2: Line 4
5: Ramanathan agrega una linea Lalalala



Imprimir el último campo (palabra) de cada línea (uno de mis preferidos!):

$ cat test.txt | awk '{ print $NF }'
1
2
3
4
Lalalala



Imprimir el segundo campo (palabra) de cada línea:


$ cat test.txt | awk '{ print $2 }'
1
2
3
4
agrega



Imprimir el último campo (palabra) de la última línea:


$ cat test.txt | awk '{ field = $NF }; END{ print field }'
Lalalala



Imprimir las líneas con más de dos campos (palabras):


$ cat test.txt | awk 'NF > 2'
Ramanathan agrega una linea Lalalala



Usando el archivo numbers.txt:

$ cat numbers.txt
3
6
24
7



Mostrar las líneas cuyo ultimo campo sea mayor que 5:

$ cat numbers.txt | awk '$NF > 5'
6
24
7



Imprimir en pantalla la palabra "Lalala" 20 veces:

$ awk 'BEGIN{while (a++<20) s=s "Lalala "; print s}'
Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala Lalala



Eliminar todos los espacios blancos al final de una línea:

$ echo " Ramanathan " | awk '{sub(/[ t]+$/, ""};1'
Ramanathan



Eliminar todos los espacios blancos al principio de una línea:

$ echo " Ramanathan " | awk '{sub(/^[ t]+/, ""};1'
Ramanathan



Eliminar los espacios blancos al principio y al final de la línea:

$ echo " Ramanathan " | awk '{gsub(/^[ t]+|[ t]+$/,""};1'
Ramanathan



Agregar un corazón al principio de cada línea (owwwww):

$ cat test.txt | awk '{sub(/^/, "<3 "};1'
<3 Line 1
<3 Line 2
<3 Line 3
<3 Line 4
<3 Ramanathan agrega una linea Lalalala



Centrar el texto en líneas de 79 caracteres de ancho:

$ cat test.txt | awk '{l=length();s=int((79-l)/2); printf "%"(s+l)"sn",$0}'
Line 1
Line 2
Line 3
Line 4
Ramanathan agrega una linea Lalalala



Reeplazar solo la primer instancia de Line por Circle en cada linea:

$ cat test.txt | awk '{sub(/Line/,"Circle"}; 1'
Circle 1
Circle 2
Circle 3
Circle 4
Ramanathan agrega una linea Lalalala



Para todas las instancias de Line:

awk '{gsub(/foo/,"bar"}; 1'



Reemplazar la palabra Line por Circle sólo si la línea contiene el nro 2:


$ cat test.txt | awk '/2/{gsub(/Line/, "Circle"}; 1'
Line 1
Circle 2
Line 3
Line 4
Ramanathan agrega una linea Lalalala



Reemplazar la palabra Line por Circle para todas las líneas excepto la que contiene el nro 2:

$ cat test.txt | awk '!/2/{gsub(/Line/, "Circle"}; 1'
Circle 1
Line 2
Circle 3
Circle 4
Ramanathan agrega una linea Lalalala



Reemplazar la palabra Line o la palabra linea por Palabra:

$ cat test.txt | awk '{gsub(/Line|linea/, "Palabra"}; 1'
Palabra 1
Palabra 2
Palabra 3
Palabra 4
Ramanathan agrega una Palabra Lalalala



Invertir el orden del archivo (similar al comando tac):

$ cat test.txt | awk '{a[i++]=$0} END {for (j=i-1; j>=0 print a[j--] }'
Ramanathan agrega una linea Lalalala
Line 4
Line 3
Line 2
Line 1



Imprimir y ordenar el login de todos los users:

$ awk -F ":" '{print $1 | "sort" }' /etc/passwd
Guest
Law
Pato



Impriimir los primeros dos campos y mostrarlos en orden invertido:


$ cat test.txt | awk '{print $2, $1}'
1 Line
2 Line
3 Line
4 Line
agrega Ramanathan



Invertir el orden del primer y segundo campo en cada linea:

$ cat test.txt | awk '{teinbox= $1; $1 = $2; $2 = temp} 1'
1 Line
2 Line
3 Line
4 Line
agrega Ramanathan una linea Lalalala



Imprimir cada línea eliminando el primer campo:


$ cat test.txt | awk '{ $1 = ""; print }'
1
2
3
4
agrega una linea Lalalala



Invertir las palabras de cada línea:

$ cat test.txt | awk '{for (i=NF; i>0; i--) printf("%s ",$i);print ""}'
1 Line
2 Line
3 Line
4 Line
Lalalala linea una agrega Ramanathan



Concatenar cada 2 líneas, unir con punto y coma:

$ cat test.txt | awk 'ORS=NR%2?";":"n"'
Line 1;Line 2
Line 3;Line 4
Ramanathan agrega una linea Lalalala;



Imprimir las primeras dos líneas del archivo (similar a head -2):

$ cat test.txt | awk 'NR < 3'
Line 1
Line 2



Imprimir las dos últimas líneas del archivo (similar a tail -2):


$ cat test.txt | awk '{y=x "n" $0; x=$0};END{print y}'
Line 4
Ramanathan agrega una linea Lalalala



Imprimir la última línea:

$ cat test.txt | awk 'END{print}'
Ramanathan agrega una linea Lalalala



Imprimir las líneas que contengan Ramanathan (similar a grep):

$ cat test.txt | awk '/Ramanathan/'
Ramanathan agrega una linea Lalalala



Imprimir las líneas que NO contengan Ramanathan (similar a grep -v):

$ cat test.txt | awk '!/Ramanathan/'
Line 1
Line 2
Line 3
Line 4



Imprimir las líneas en las cuales el segundo campo sea "agrega":

$ cat test.txt | awk '$2 == "agrega"'
Ramanathan agrega una linea Lalalala
$ cat test.txt | awk '$2 == "lalala"'

$



Imprimir las líneas en las cuales el segundo campo no sea "agrega":

$ cat test.txt | awk '$2 != "agrega"'
Line 1
Line 2
Line 3
Line 4



Ese comando también imprimirá esas líneas que tengan menos de 2 campos.

Imprimir las líneas cuyo 2do campo cumplen una expresión regular (en este caso, que sea numérico):

$ cat test.txt | awk '$2 ~ /^[0-9]/'
Line 1
Line 2
Line 3
Line 4



Imprimir las líneas que contengan than, lala y linea, en cualquier orden:


$ cat test.txt | awk '/than/ && /lala/ && /linea/'
Ramanathan agrega una linea Lalalala



En el orden correcto:

$ cat test.txt | awk '/than.*lala.*linea/'
$ cat test.txt | awk '/than.*linea.*lala/'
Ramanathan agrega una linea Lalalala



Imprimir las líneas con más de 8 caracteres:

$ cat test.txt | awk 'length > 8'
Ramanathan agrega una linea Lalalala



Imprimir sólo la 3er línea:

$ cat test.txt | awk 'NR==3'
Line 3



Telnet

Es un protocolo de red para conexiones tcp. Antes se ingresaba a las máquinas en modo texto a través de éste protocolo, en su puerto default, el 23. Hoy en día se utiliza ssh, el cual es un protocolo mucho más seguro. Entonces, si no es seguro, para qué lo vamos a usar?

Resulta que instalaron el postfix, para mandar mails. El servicio levanta bien, pero el mail que se mandaron desde esa máquina nunca llega. Cómo empezamos a investigar?

SMTP usa el puerto 25, así que la primer prueba es probar si el puerto 25 de nuestro host está abierto:

law@virtual-mint ~ $ telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused



Oops... El puerto no está abierto. A chequear firewalls, archivos de configuración, etc, etc.

Qué respuesta debería dar? Probemos con el server de mail de google:

law@virtual-mint ~ $ telnet smtp.gmail.com 25
Trying 74.125.134.109...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP o31sm30718196yhh.21 - gsmtp
ehlo gmail.com
250-mx.google.com at your service, [190.192.201.212]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES



Se puede mandar un mail utilizando telnet. Acá hay una lista de los comandos necesarios.

Qué más podemos probar? Apache, tipicamente en puerto 80 o 443 si tiene ssl:

law@virtual-mint ~ $ telnet www.google.com 80
Trying 74.125.234.82...
Connected to www.google.com.
Escape character is '^]'.



Tuve una respuesta! Pidamos una página para ver si hay algún otro error:


get /
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 925
Date: Mon, 15 Apr 2013 22:02:06 GMT
Server: GFE/2.0

<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 400 (Bad Request)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}
</style>
<a =//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a>
<p><b>400.</b> <ins>That's an error.</ins>
<p>Your client has issued a malformed or illegal request. <ins>That's all we know.</ins>
Connection closed by foreign host.
law@virtual-mint ~ $



Y eso?

Noten esto:
HTTP/1.0 400 Bad Request

Significa que la página que estoy buscando no puede ser mostrada. Más abajo también dice que mi pedido está mal formado.

Acá hay una lista de los errores HTTP y sus significados: http://www.mundo-linux-b.blogspot.com/ newbies-y-no-tan-newbies.html [/propaganda]

Acá hay una lista de aplicaciones y los puertos default: http://es.wikipedia.org/wiki/Anexo:N%C3%BAmeros_de_puerto

Z Commands: zcat, zgrep, ztail...

En un server corren bastantes aplicaciones. Las aplicaciones tienen logs. Los servers por lo general tienen un espacio en disco limitado, así que para utilizarlo al máximo se comprimen los logs viejos, dejando uno o dos descomprimidos para rápido acceso.

Vieron como son los usuarios... Resulta que uno reporta un problema que sucedió hace un mes. Y si, se olvidó, te iba a decir antes, pero viste cómo es...

Así que empezás tu investigación. Sabés que vas a tener que consultar /var/log/messages, y /var/log/secure, y capaz hasta el access_log y error_log del apache para ese día. Pero están todos comprimidos!

Opción 1: Si el server tiene espacio suficiente, descomprimir los logs correspondientes, revisar lo que necesitamos, comprimir, move on.

Hmm... no me convence. Capaz si los bajo a mi compu....

Pero no, yo soy muy vaga. Así que voy a usar los comandos z:

Los comandos z son comandos que descomprimen temporariamente los archivos comprimidos, en bloques, y los muestran en pantalla. Al terminar la operación, eliminan los archivos temporales que crearon.

Esto permite realizar operaciones sin preocuparnos por descomprimir los archivos:

1. Ver el archivo comprimido con zcat.
2. Ver el archivo comprimido por páginas con zless / zmore.
3. Buscar patrones dentro de un archivo comprimido con zgrep / zegrep
4. Hacer comparación de archivos usando zdiff / zcmp.

Niiiiice.

Ejemplos:

Mostrar el archivo:

virtual-mint log # zcat syslog.1.gz | less
Apr 22 18:23:08 virtual-mint kernel: imklog 5.8.1, log source = /proc/kmsg started.
Apr 22 18:23:08 virtual-mint rsyslogd: [origin software="rsyslogd" swVersion="5.8.1" x-pid="405" x-info="http://www.rsyslog.com"] start
Apr 22 18:23:08 virtual-mint rsyslogd: rsyslogd's groupid changed to 103
Apr 22 18:23:08 virtual-mint rsyslogd: rsyslogd's userid changed to 101



o...

virtual-mint log # zcat syslog.1.gz | less
virtual-mint log # zcat syslog.1.gz | more
virtual-mint log # zless syslog.1.gz
virtual-mint log # zmore syslog.1.gz



Buscar la palabra "error" en el archivo comprimido:

virtual-mint log # zgrep -i error syslog.1.gz
Apr 22 18:23:11 virtual-mint kernel: [ 11.019873] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro
Apr 22 18:23:14 virtual-mint NetworkManager[468]: <warn> bluez error getting default adapter: The name org.bluez was not provided by any .service files



Comparación de archivos comprimidos:

virtual-mint ~ # ls
arch1.txt.gz arch2.txt.gz
virtual-mint ~ # zcat arch*
Esta es la linea 1
Esta es la linea 2


Esta es la linea uno
Esta es la linea 2


virtual-mint ~ # zdiff arch1.txt.gz arch2.txt.gz
1c1
< Esta es la linea 1
---
> Esta es la linea uno
virtual-mint ~ #



Espero que les haya gustado. Espero escribir pronto otra entrega, ya que me quedaron un montón de herramientas afuera.

Comentarios/criticas/correcciones/pedidos son bienvenidos.

No hay comentarios:

Publicar un comentario

-

Con la tecnología de Blogger.