Sunteți pe pagina 1din 64

Gua para Maestra Avanzada de Comandos Linux

por Arup Nanda Publicado en agosto de 2006 En el excelente artculo de Sheryl Calish, denominado Gua para Maestra en Comandos de Archivos Linux", usted conoci algunos comandos Linux de rutina, que son especialmente valiosos para principiantes Linux. Pero ahora que conoce los puntos bsicos, prosigamos con algunos comandos ms sofisticados que encontrar extremadamente tiles. En esta serie de cuatro partes, conocer algunos trucos no tan conocidos sobre varios comandos de rutina, as como las variaciones en uso que los hacen ms tiles. A medida que la serie avanza, conocer comandos cada vez ms difciles de dominar. Tenga en cuenta que estos comandos pueden diferir de acuerdo con la versin especfica de Linux que utilice o qu kernel especfica se compila, pero en ese caso, probablemente solo sea una diferencia mnima.

Cambios Sencillos a Propietarios, Grupos y Permisos


En el artculo de Sheryl, usted aprendi cmo utilizar los comandos chown y chgrp para cambiar la propiedad y el grupo de los archivos. Supongamos que tiene varios archivos como este:
# ls -l total 8 -rw-r--r--rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x 1 1 1 1 1 1 ananda oracle oracle oracle oracle oracle users dba dba dba dba dba 70 132 132 132 132 132 Aug Aug Aug Aug Aug Aug 4 4 4 4 4 4 04:02 04:02 04:02 04:02 04:02 04:02 file1 file2 file3 file4 file5 file6

y necesita cambiar los permisos de todos los archivos para asociar aquellos del archivo 1. Seguramente podra utilizar chmod 644 * para realizar ese cambio pero qu sucede si est escribiendo un script para hacerlo y no sabe cules son los permisos de antemano? O, tal vez est hacienda varios cambios de permiso basados en muchos archivos diferentes y cree que no es factible examinar los permisos de cada uno y modificarlos en consecuencia. Un mejor enfoque es hacer que los permisos sean similares a aquellos de otro archivo. Este comando hace que los permisos del archivo 2 sean los mismos que el archivo 1:
chmod --reference file1 file2

Ahora, si verifica:
# ls -l file[12] total 8 -rw-r--r-1 ananda -rw-r--r-1 oracle users dba 70 Aug 132 Aug 4 04:02 file1 4 04:02 file2

Los permisos del archivo 2 fueron cambiados exactamente como el archivo 1. No necesit obtener primero los permisos del archivo 1. Usted tambin puede utilizar el mismo truco para la membresa de grupos en los archivos. Para que

el grupo del archivo 2 sea el mismo que el archivo 1, usted manifestara:


# chgrp --reference file1 file2 # ls -l file[12] -rw-r--r-1 ananda users -rw-r--r-1 oracle users 70 Aug 132 Aug 4 04:02 file1 4 04:02 file2

Desde luego, lo que funciona para el cambio de grupos funcionar para el propietario tambin. A continuacin, mostramos cmo puede utilizar el mismo truco para un cambio de propiedad. Si los permisos son as:
# ls -l file[12] -rw-r--r-1 ananda -rw-r--r-1 oracle users dba 70 Aug 132 Aug 4 04:02 file1 4 04:02 file2

Usted puede cambiar la propiedad as:


# chown --reference file1 file2 # ls -l file[12] -rw-r--r-1 ananda users -rw-r--r-1 ananda users 70 Aug 132 Aug 4 04:02 file1 4 04:02 file2

Fjese que el grupo, y el propietario, han cambiado.

Consejo para Usuarios Oracle


Este es un truco que puede utilizar para cambiar la propiedad y los permisos de los ejecutables de Oracle en un directorio basado en un ejecutable de referencia. Esto es especialmente til en migraciones donde puede (y probablemente deba) instalar un usuario diferente y luego trasladarlo a su propietario de software Oracle usual.

Ms sobre Archivos
El comando ls, con su gran cantidad de argumentos, brinda informacin muy til sobre los archivos. Un comando diferente y menos conocido stat ofrece informacin incluso ms til. . Aqu le mostramos cmo puede utilizarlo en el ejecutable oracle, que puede encontrarse en $ORACLE_HOME/bin.
# cd $ORACLE_HOME/bin # stat oracle File: `oracle' Size: 93300148 Blocks: 182424 IO Block: 4096 Device: 343h/835d Inode: 12009652 Links: 1 Access: (6751/-rwsr-s--x) Uid: ( 500/ oracle) Gid: ( Access: 2006-08-04 04:30:52.000000000 -0400 Modify: 2005-11-02 11:49:47.000000000 -0500 Change: 2005-11-02 11:55:24.000000000 -0500

Regular File 500/ dba)

Fjese la informacin que obtuvo con este comando: Adems del tamao de archivo usual (que puede obtener de ls -l), usted obtuvo la cantidad de bloques que ocupa este archivo. El tamao de bloque Linux tpico es de 512 bytes, entonces un archivo de 93.300.148 bytes ocupara (93300148/512=) 182226.85 bloques. Como los bloques se utilizan en su totalidad, este archivo utiliza un nmero entero de bloques. En lugar de hacer conjeturas, usted puede saber cules son los bloques exactos. Del output de arriba, usted tambin puede conocer el GID y UID de la propiedad del archivo y la representacin octal de los permisos (6751). Si desea readmitir los mismos permisos que tiene ahora, puede utilizar chmod 6751 oracle en lugar de detallar explcitamente los permisos.

La parte ms til del output de arriba es la informacin de la fecha de registro del acceso al archivo. Muestra que se accedi al archivo el 04-08-2006 a las 04:30:52 (como se muestra al lado de Acceso:), o el 4 de agosto de 2006 a las 4:30:52 AM. Este es el momento en el cual se empez a utilizar la base de datos. El archivo fue modificado el 02-11-2005 a las 11:49:47 (como se muestra al lado de Modificar:). Finalmente, la fecha de registro al lado de Cambiar: muestra cundo fue cambiado el estado del archivo. -f, un modificador del comando stat, muestra la informacin del sistema de archivo en lugar del archivo:
# stat -f oracle File: "oracle" ID: 0 Namelen: 255 Type: ext2/ext3 Blocks: Total: 24033242 Free: 15419301 Available: 14198462 Inodes: Total: 12222464 Free: 12093976

Size: 4096

Otra opcin, -t, brinda exactamente la misma informacin pero en una sola lnea:
# stat -t oracle oracle 93300148 182424 8de9 500 500 343 12009652 1 0 0 1154682061 1130950187 1130950524 4096

Esto es muy til en shell scripts donde un simple comando de corte puede utilizarse para extraer los valores para el posterior procesamiento.

Consejo para Usuarios Oracle


Cuando usted se vuelve a conectar con Oracle (a menudo se realiza durante la instalacin de parches), los ejecutables existentes pasan a un nombre diferente antes de crear el nuevo. Por ejemplo, puede reconectar todos los servicios por relink utilities Recopila, entre otras cosas, el ejecutable sqlplus. Mueve el ejecutable existente sqlplus a sqlplusO. Si la recopilacin falla por algn motivo, el proceso de reconexin vuelve a nombrar sqlplusO con sqlplus, y los cambios quedan anulados. De manera similar, si descubre un problema de funcionalidad despus de aplicar un parche, puede rpidamente anular el parche al renombrar el archivo por su propia cuenta. A continuacin, mostramos cmo puede utilizar stat en estos archivos:
# stat sqlplus* File: 'sqlplus' Size: 9865 Blocks: 26 IO Block: 4096 Device: 343h/835d Inode: 9126079 Links: 1 Access: (0751/-rwxr-x--x) Uid: ( 500/ oracle) Gid: ( Access: 2006-08-04 05:15:18.000000000 -0400 Modify: 2006-08-04 05:15:18.000000000 -0400 Change: 2006-08-04 05:15:18.000000000 -0400 File: Size: Device: Access: Access: Modify: Change: 'sqlplusO' 8851 Blocks: 24 IO Block: 4096 343h/835d Inode: 9125991 Links: 1 (0751/-rwxr-x--x) Uid: ( 500/ oracle) Gid: ( 2006-08-04 05:13:57.000000000 -0400 2005-11-02 11:50:46.000000000 -0500 2005-11-02 11:55:24.000000000 -0500 Regular File 500/ dba)

Regular File 500/ dba)

Muestra que sqlplusO fue modificado el 11 de noviembre d e2005, cuando sqlplus fue modificado el 4 de agosto de 2006, que tambin corresponde al tiempo de cambio de estado de sqlplusO. Indica

que la versin original de sqlplus estuvo vigente desde el 11 de noviembre de 2005 hasta el 4 de agosto de 2006. Si quiere diagnosticar algunos problemas de funcionalidad, este es un buen lugar para empezar. Adems de los cambios de archivo, como usted conoce el horario de cambio de los permisos, usted puede correlacionarlo con cualquier problema de funcionalidad percibido. Otro output importante es el tamao del archivo, que es diferente9865 bytes para sqlplus y 8851 para sqlplusOe indica que las versiones no son meras compilaciones; en realidad cambiaron con bibliotecas adicionales (tal vez). Esto tambin indica la causa potencial de algunos problemas.

Tipos de Archivo
Cuando ve un archivo, cmo sabe qu tipo de archivo es? El comando file le da esa informacin. Por ejemplo:
# file alert_DBA102.log alert_DBA102.log: ASCII text

El archivo alert_DBA102.log es un archivo de texto ASCII. Veamos algunos ejemplos ms:


# file initTESTAUX.ora.Z initTESTAUX.ora.Z: compress'd data 16 bits

Esto demuestra que el archivo es un archivo comprimido, pero cmo sabe qu tipo de archivo fue comprimido? Una opcin es descomprimirlo y ejecutar el archivo; pero eso hara que sea virtualmente imposible. Una mejor opcin es utilizar el parmetro -z:
# file -z initTESTAUX.ora.Z initTESTAUX.ora.Z: ASCII text (compress'd data 16 bits)

Otra peculiaridad es la presencia de enlaces simblicos:


# file spfile+ASM.ora.ORIGINAL spfile+ASM.ora.ORIGINAL: symbolic link to /u02/app/oracle/admin/DBA102/pfile/spfile+ASM.ora.ORIGINAL

Esto es til; pero qu tipo de archivo es al que se apunta? En lugar de ejecutar el archivo otra vez, puede utilizar la opcin -l:
# file -L spfile+ASM.ora.ORIGINAL spfile+ASM.ora.ORIGINAL: data

Esto demuestra claramente que el archivo es un archivo de datos. Tenga en cuenta que spfile es binario, a diferencia de init.ora; por lo tanto el archivo se muestra como archivo de datos.

Consejo para Usuarios Oracle


Supongamos que est buscando un archivo de localizacin en el directorio de destino de descargas del usuario pero no est seguro de que el archivo est ubicado all o en otro directorio, y meramente est all como enlace simblico, o si alguien ha comprimido el archivo (o incluso lo ha renombrado). Hay algo que s sabe: es definitivamente un archivo ascii. Qu puede hacer?
file -Lz * | grep ASCII | cut -d":" -f1 | xargs ls -ltr

Este comando verifica los archivos ASCII, incluso si estn comprimidos, y los enumera en orden cronolgico.

Comparar Archivos
Cmo descubre si dos archivosarchivo1 y archivo2son idnticos? Hay varias formas, y cada enfoque tiene su propio atractivo. diff. El comando ms simple es diff, que muestra la diferencia entre dos archivos. Vea los contenidos de dos archivos
# cat file1 In file1 only In file1 and file2 # cat file2 In file1 and file2 In file2 only

Si utiliza el comando diff, podr ver la diferencia entre los archivos, como se muestra abajo:
# diff file1 file2 1d0 < In file1 only 2a2 > In file2 only #

En el output, un "<" en la primera columna indica que la lnea existe en el archivo mencionado primero, es decir, archivo1. Un ">" en ese lugar indica que la lnea existe en el segundo archivo (archivo2). Los caracteres 1d0 de la primera lnea del output muestra lo que debe hacerse en sed para operar en el archivo 1 para hacerlo idntico al archivo 2. Otra opcin, -y, muestra el mismo output, pero uno al lado del otro:
# diff -y file1 file2 -W 120 In file1 only In file1 and file2 < > In file1 and file2 In file2 only

La opcin -W es opcional; simplemente ordena al comando utilizar una pantalla que permita 120 caracteres, til para archivos con lneas largas. Si solo desea saber si los archivos son diferentes, no necesariamente en qu difieren, puede utilizar la opcin -q.
# diff -q file3 file4 # diff -q file3 file2 Files file3 and file2 differ

Los archivos 3 y 4 son los mismos, con lo cual no hay output; caso contrario, se informa si los archivos difieran. Si est escribiendo un shell script, puede resultar til generar el output de tal manera que pueda analizarse. La opcin -u hace eso:
# diff -u file1 file2 --- file1 2006-08-04 08:29:37.000000000 -0400 +++ file2 2006-08-04 08:29:42.000000000 -0400 @@ -1,2 +1,2 @@ -In file1 only In file1 and file2 +In file2 only

El output muestra contenidos de ambos archivos pero suprime los duplicados, los signos + y de la

primera columna indican las lneas de los archivos. Ningn carcter en la primera columna indica su presencia en ambos archivos. El comando tiene en cuenta el espacio en blanco. Si quiere ignorar el espacio en blanco, use la opcin -b. Use la opcin -B para ignorar las lneas en blanco. Finalmente, use -i para ignorar el caso. El comando diff tambin puede aplicarse a los directorios. El comando
diff dir1 dir2

muestra los archivos presentes en cualquiera de los dos directorios; ya sea que los archivos estn presentes en uno de los directorios o en ambos. Si se encuentra un subdirectorio con el mismo nombre, no se detiene a ver si algn archivo individual difiere. Un ejemplo:
# diff DBA102 PROPRD Common subdirectories: DBA102/adump and PROPRD/adump Only in DBA102: afiedt.buf Only in PROPRD: archive Only in PROPRD: BACKUP Only in PROPRD: BACKUP1 Only in PROPRD: BACKUP2 Only in PROPRD: BACKUP3 Only in PROPRD: BACKUP4 Only in PROPRD: BACKUP5 Only in PROPRD: BACKUP6 Only in PROPRD: BACKUP7 Only in PROPRD: BACKUP8 Only in PROPRD: BACKUP9 Common subdirectories: DBA102/bdump and PROPRD/bdump Common subdirectories: DBA102/cdump and PROPRD/cdump Only in PROPRD: CreateDBCatalog.log Only in PROPRD: CreateDBCatalog.sql Only in PROPRD: CreateDBFiles.log Only in PROPRD: CreateDBFiles.sql Only in PROPRD: CreateDB.log Only in PROPRD: CreateDB.sql Only in DBA102: dpdump Only in PROPRD: emRepository.sql Only in PROPRD: init.ora Only in PROPRD: JServer.sql Only in PROPRD: log Only in DBA102: oradata Only in DBA102: pfile Only in PROPRD: postDBCreation.sql Only in PROPRD: RMANTEST.sh Only in PROPRD: RMANTEST.sql Common subdirectories: DBA102/scripts and PROPRD/scripts Only in PROPRD: sqlPlusHelp.log Common subdirectories: DBA102/udump and PROPRD/udump

Vea que los subdirectorios comunes simplemente se muestran como tal pero no se realiza ninguna comparacin. Si desea hacer ms desgloses y comparar los archivos de esos subdirectorios, debera utilizar el siguiente comando:
diff -r dir1 dir2

Este comando ingresa repetitivamente en cada subdirectorio para comparar los archivos e informa la diferencia entre los archivos con el mismo nombre.

Consejo para Usuarios Oracle


Un uso comn de diff es diferenciar entre distintos archivos init.ora. Como ejemplo modelo, siempre copio el archivo con un nuevo nombrepor ej., initDBA102.ora con initDBA102.080306.ora (para indicar 3 de agosto de 2006) antes de realizar un cambio. Un simple diff entre todas las versiones del archivo muestra rpidamente qu cambi y cundo. Este es un comando bastante poderoso para administrar su pgina de inicio Oracle. Como ejemplo modelo, nunca actualizo una Pgina de Inicio de Oracle cuando aplico parches. Por ejemplo, supongamos que las versiones Oracle actuales sean 10.2.0.1. ORACLE_HOME podra ser /u01/app/oracle/product/10.2/db1. Cuando llega el momento de realizar un parche hacia 10.2.0.2, no realizo el parche de esta Pgina de Inicio Oracle. En cambio, inicio una instalacin nueva en /u01/app/oracle/product/10.2/db2 y luego realizo un parche de esa pgina de inicio. Una vez listo, uso lo siguiente:
# sqlplus / as sysdba SQL> shutdown immediate SQL> exit # export ORACLE_HOME=/u01/app/oracle/product/10.2/db2 # export PATH=$ORACLE_HOME/bin:$PATH # sqlplus / as sysdba SQL> @$ORACLE_HOME/rdbms/admin/catalog ...

y as sucesivamente. El propsito de este enfoque es que la Pgina de Inicio Oracle original no se interrumpa y que pueda fcilmente volver atrs en caso de haber problemas. Esto tambin implica que la base de datos deja de funcionar y vuelve a hacerlo, con bastante rapidez. Si hubiese instalado un parche directamente en la Pgina de Inicio Oracle, hubiese tenido que interrumpir la base de datos durante mucho tiempomientras dure la aplicacin del parche. Asimismo, si la aplicacin del parche hubiese fallado por algn motivo, no hubiese obtenido una Pgina de Inicio Oracle limpia. Ahora que tengo varias Pginas de Inicio Oracle, cmo puedo ver qu cambi? Es realmente simple; puedo utilizar:
diff -r /u01/app/oracle/product/10.2/db1 /u01/app/oracle/product/10.2/db2 | grep -v Common

Esto me muestra las diferencias entre ambas Pginas de Inicio Oracle y las diferencias entre los archivos con el mismo nombre. Algunos archivos importantes como tnsnames.ora, listener.ora y sqlnet.ora no deberan mostrar grandes diferencias, pero si lo hacen, debo entender por qu. cmp. El comando cmp es similar a diff:
# cmp file1 file2 file1 file2 differ: byte 10, line 1

El output vuelve a aparecer como la primera seal de diferencia. Usted puede utilizar esto para identificar en qu pueden diferir los archivos. diff, cmp tiene muchas opciones, la ms importante es la opcin -s, lo cual sencillamente genera un cdigo 0, si los archivos son idnticos 1, si difieren Algn otro nmero que no sea cero, si la comparacin no pudo realizarse Un ejemplo:
# cmp -s file3 file4

# echo $? 0

La variable especial $? indica el cdigo del ltimo comando Resumen de Comandos de este Documento ejecutado. En este caso, 0, lo cual implica que los archivos 1 y 2 son idnticos.
# cmp -s file1 file2 # echo $? 1
Commando Uso chmod Para cambiar permisos de un archivo, usando el parmetro de referencia - -

implica que los archivos 1 y 2 no son iguales. Esta propiedad de cmp puede resultar muy til en shell scripting donde simplemente quiera verificar si dos archivos difieren de alguna manera, pero no necesariamente verificar cul es la diferencia. Otro uso importante de este comando es comparar los archivos binarios, donde diff puede no ser confiable.

chown Para cambiar el propietario de un archivo, usando el parmetro de referencia - -

Consejo para Usuarios Oracle

chgrp

Recuerde de un consejo anterior, cuando vuelve a conectar los el grupo de ejecutables Oracle, la versin ms antigua se guarda antes de Para cambiar referencia - un archivo, usando el parmetro de sobrescribirla. Por lo tanto, cuando se vuelve a conectar, el ejecutable sqlplus es renombrado como sqlplusO, y el recientemente compilado sqlplus es colocado en stat $ORACLE_HOME/bin. Entonces cmo se asegura de que el sqlplus que se cre recientemente es diferente? Simplemente Para conocer los atributos extendidos de un archivo, como fecha de ltimo acceso utilice:
# cmp sqlplus sqlplusO sqlplus sqlplusO differ: byte 657, line 7
file Para conocer el tipo de archivo, como ASCII, datos, etc.

Si verifica el tamao:
# ls -l sqlplus* -rwxr-x--x 1 oracle 05:15 sqlplus -rwxr-x--x 1 oracle 2005 sqlplusO dba dba 8851 Aug 8851 Nov 4

2 diff
Para ver la diferencia entre dos archivos

A pesar de que el tamao es el mismo en ambos casos, cmp demostr que los dos programas son diferentes.

cmp

comm. El comando comm es similar a los otros pero el output se genera en tres columnas, separadas por etiquetas. Ejemplo: Para comparar dos archivos
# comm file1 file2 In file1 and file2 In file1 only In file1 and file2 In file2 only
comm Para ver qu tienen en comn dos archivos, con el output en tres columnas

Este comando es til para ver los contenidos de un archivo y no del otro, no solo una diferenciauna clase de herramienta md5sum MINUS en el lenguaje SQL. La opcin -1 suprime los contenidos del primer archivo:

# comm -1 file1 file2 In file1 and file2 In file2 only

md5sum. Este comando genera un valor arbitrario MD5 de 32 bits de los archivos:
# md5sum file1 ef929460b3731851259137194fe5ac47 file1

Dos archivos con la misma suma de control (checksum) pueden considerarse idnticos. No obstante, la utilidad de este comando va ms all de simplemente comparar los archivos. Tambin puede ofrecer un mecanismo para garantizar la integridad de los archivos. Supongamos que tiene dos archivos importantesarchivo1 y 2que necesita proteger. Puede utilizar el control de opcin --check para confirmar que los archivos no han cambiado. Primero, cree un archivo de suma de control para ambos archivos importantes y mantngalos protegidos:
# md5sum file1 file2 > f1f2

Luego, cuando quiere verificar que los archivos siguen intactos:


# md5sum --check f1f2 file1: OK file2: OK

Esto muestra claramente que los archivos no han sido modificados. Ahora cambia un archivo y verifique el MD5:
# cp file2 file1 # md5sum --check f1f2 file1: FAILED file2: OK md5sum: WARNING: 1 of 2 computed checksums did NOT match

El output claramente muestra que el archivo 1 ha sido modificado.

Consejo para Usuarios Oracle


md5sum es un comando extremadamente poderoso para implementaciones de seguridad. Algunos archivos de configuracin que administra, como listener.ora, tnsnames.ora e init.ora, son demasiado crticos para una infraestructura Oracle exitosa, y cualquier modificacin puede dar como resultado momentos de inactividad. Esto en general forma parte de su proceso de control de cambios. En lugar de confiar en la palabra de alguien respecto de que estos archivos no han cambiado, asegrese utilizando la suma de control MD5. Cree un archivo de suma de control y, cuando realice un cambio planificado, vuelva a crear este archivo. Como parte del cumplimiento, verifique este archivo utilizando el comando md5sum. Si alguien actualizara involuntariamente alguno de estos archivos clave, inmediatamente se dara cuenta del cambio. En la misma lnea, tambin puede crear sumas de control MD5 para todos los ejecutables de $ORACLE_HOME/bin y compararlas de vez en cuando para realizar modificaciones no autorizadas.

Conclusin
Hasta ahora, ha aprendido solo algunos de los comandos Linux que encontrar tiles para realizar una tarea con eficiencia. En el prximo documento, describir algunos comandos ms sofisticados pero tiles, como strace, whereis, renice, skill, y mucho ms.

Gua para Maestra Avanzada de Comandos Linux Parte 2


por Arup Nanda Publicado en febrero de 2008 En la Parte 1 de la serie, usted aprendi algunos comandos tiles no tan conocidos y algunos de los comandos comnmente utilizados pero con parmetros no tan conocidos para hacer su trabajo de manera ms eficiente. Para continuar con la serie, ahora aprender algunos comandos Linux ms avanzados tiles para los usuarios Oracle, ya sean desarrolladores o DBAs.

alias y unalias
Supongamos que quiere verificar el grupo de variables del entorno ORACLE_SID de su shell. Deber tipear:
echo $ORACLE_HOME

Como DBA o desarrollador, utiliza frecuentemente este comando y pronto se cansa de tipear los 16 caracteres. Hay una manera ms simple? S: el comando alias. Con este enfoque, puede crear un breve alias, como "os", para representar todo el comando:
alias os='echo $ORACLE_HOME'

Ahora cuando quiera verificar ORACLE_SID, simplemente escriba "os" (sin comillas) y Linux ejecuta el comando con el alias. No obstante, si se desconecta y se vuelve a conectar, el alias es eliminado y debe ingresar el comando alias nuevamente. Para eliminar este paso, todo lo que debe hacer es colocar el comando en su archivo de perfil shell. Para bash, el archivo es .bash_profile (note el punto antes del nombre de archivo, es parte del nombre de archivo) en su directorio de inicio. Para los shells bourne y korn, es .profile, y para c-shell, .chsrc. Usted puede crear un alias para cualquier nombre. Por ejemplo, yo siempre creo un alias para el comando rm como rm -i, que hace que el comando rm sea interactivo.
alias rm=rm -i

Cuando emito un comando rm, Linux solicita mi confirmacin, y a menos que agregue "y", no elimina el archivoas quedo protegido ante la posibilidad de eliminar accidentalmente un archivo importante. Utilizo lo mismo para mv (para cambiar el archivo a otro nombre), lo cual evita la sobrescritura accidental de archivos existentes, y cp (para copiar el archivo). A continuacin, presentamos una lista de algunos alias muy tiles que quiero definir:
alias alias alias alias alias alias alias bdump='cd $ORACLE_BASE/admin/$ORACLE_SID/bdump' l='ls -d .* --color=tty' ll='ls -l --color=tty' mv='mv -i' oh='cd $ORACLE_HOME' os='echo $ORACLE_SID' rm='rm -i'

alias tns='cd $ORACLE_HOME/network/admin'

Para ver qu alias han sido definidos en su shell, use alias sin ningn parmetro. Sin embargo, hay un pequeo problema. He definido un alias, rm, que ejecuta rm -i. Este comando solicitar mi confirmacin cada vez que intente eliminar un archivo. Pero qu sucede si quiero eliminar muchos archivos y estoy seguro de que pueden eliminarse sin mi confirmacin? La solucin es simple: Para suprimir el alias y utilizar solo el comando, necesitar ingresar dos comillas simples:
$ ''rm *

Fjese que se trata de dos comillas simples (') antes del comando rm, no dos comillas dobles. Esto suprimir el alias rm. Otro enfoque es utilizar una barra inversa (\):
$ \rm *

Para eliminar un alias previamente definido, simplemente utilice el comando unalias:


$ unalias rm

ls
El comando ls es frecuentemente utilizado pero pocas veces es utilizado en su totalidad. Sin ninguna opcin, ls despliega meramente todos los archivos y directorios en formato tabular.
$ ls admin has apex hs assistants install ... output snipped ... mesg mgw network precomp racg rdbms

Para mostrarlos en una lista, use la opcin -1 (el nmero 1, no la letra "l").
$ ls -1 admin apex assistants ... output snipped ...

Esta opcin es til en shell scripts donde los nombres de archivo necesitan incorporarse en otro programa o comando para la manipulacin. Seguramente, usted utiliz -l (la letra "l", no el nmero "1") que despliega todos los atributos de los archivos y directorios. Vemoslo una vez ms:
$ ls -l total 272 drwxr-xr-x drwxr-x--drwxr-x--3 oracle 7 oracle 7 oracle oinstall oinstall oinstall 4096 Sep 4096 Sep 4096 Sep 3 03:27 admin 3 02:32 apex 3 02:29 assistants

La primera columna muestra el tipo de archivo y los permisos sobre l: "d" significa directorio, "-" significa archivo regular, "c" significa un dispositivo de caracteres, "b" significa un dispositivo de bloques, "p" significa named pipe, y "l" (letra minscula L, no I) significa enlace simblico. Una opcin muy til es --color, que muestra los archivos en muchos colores diferentes de acuerdo con el tipo de archivo. Aqu hay un ejemplo: Fjese que los archivos 1 y 2 son archivos comunes. link1 es un enlace simblico, que se muestra en

rojo; dir1 es un directorio y se muestra en amarillo; y pipe1 es un named pipe, y se muestra en diferentes colores para una identificacin ms fcil. En algunos distros, el comando ls viene preinstalado con un alias (descripto en la seccin anterior) como ls --color; de manera que usted pueda ver los archivos en color cuando tipea "ls". Este enfoque puede no ser aconsejable, especialmente si tiene un output como ese arriba. Puede cambiar los colores, pero una forma ms rpida puede ser simplemente suspender el alias:
$ alias ls="''ls"

Otra opcin til es la opcin -F, que aade un smbolo despus de cada archivo para mostrar el tipo de archivo - una "/" despus de los directorios, "@" despus de enlaces simblicos, y "|" despus de named pipes.
$ ls -F dir1/ file1 file2 link1@ pipe1|

Si tiene un subdirectorio en un directorio y quiere hacer solo una lista de ese directorio, ls -l le mostrar los contenidos del subdirectorio tambin. Por ejemplo, supongamos que la estructura de directorio es la siguiente:
/dir1 +-->/subdir1 +--> subfile1 +--> subfile2

El directorio dir1 tiene un subdirectorio subdir1 y dos archivos: subfile1 y subfile2. Si solo desea ver los atributos del directorio dir1, emite:
$ ls -l dir1 total 4 drwxr-xr-x -rw-r--r--rw-r--r-2 oracle 1 oracle 1 oracle oinstall oinstall oinstall 4096 Oct 14 16:52 subdir1 0 Oct 14 16:48 subfile1 0 Oct 14 16:48 subfile2

Fjese que el directorio dir1 no est en la lista del output. En cambio, se muestran los contenidos del directorio. Este es un comportamiento esperado cuando se procesan directorios. Para mostrar nicamente el directorio dir1, deber utilizar el comando -d.
$ ls -dl dir1 drwxr-xr-x 3 oracle oinstall 4096 Oct 14 16:52 dir1

Vea el output del siguiente output ls -l:


-rwxr-x--x -rwxr-x--x -rwsr-s--x -rwx-----1 1 1 1 oracle oracle oracle oracle oinstall oinstall oinstall oinstall 10457761 10457761 93300507 93300507 Apr 6 2006 Sep 23 23:48 Apr 6 2006 Sep 23 23:49 rmanO rman oracleO oracle

Notar que los tamaos de los archivos se muestran en bytes. Esto puede ser fcil en archivos pequeos, pero cuando el tamao de los archivos es grande, puede no ser tan fcil leer un nmero largo. La opcin "-h" es prctica aqu, para mostrar el tamao de manera legible para personas.
$ ls -lh -rwxr-x--x -rwxr-x--x -rwsr-s--x -rwx-----1 1 1 1 oracle oracle oracle oracle oinstall oinstall oinstall oinstall 10M 10M 89M 89M Apr 6 2006 Sep 23 23:48 Apr 6 2006 Sep 23 23:49 rmanO rman oracleO oracle

Fjese cmo se muestra el tamao en M (para megabytes), K (para kilobytes), etc.

$ ls -lr

El parmetro -r muestra el output en orden inverso. En este comando, los archivos se mostrarn en orden alfabtico inverso.
$ ls -lR

El operador -R hace que el comando ls se ejecute repetitivamentees decir, explorar los subdirectorios y mostrar esos archivos tambin. Qu sucede si quiere mostrar los archivos del ms grande al ms chico? Esto puede realizarse con el parmetro -S.
$ ls -lS total 308 -rw-r-----rwxr-xr-x drwxr-xr-x drwxr-x--1 1 2 3 oracle oracle oracle oracle oinstall oinstall oinstall oinstall 52903 9530 8192 8192 Oct 11 18:31 sqlnet.log Apr 6 2006 root.sh Oct 11 18:14 bin Sep 23 23:49 lib

xargs
La mayora de los comandos Linux tienen el fin de obtener un output: una lista de archivos, una lista de sucesiones, etc. Pero qu sucede si quiere utilizar algn otro comando con el output del anterior como parmetro? Por ejemplo, el comando file muestra el tipo de archivo (ejecutable, texto ascii, etc.); puede manipular el output para que muestre solo los nombres de archivo y ahora quiere pasar estos nombres al comando ls -l para ver la fecha de registro. El comando xargs hace exactamente eso. Permite ejecutar algunos otros comandos en el output. Recuerde esta sintaxis de la Parte 1:
file -Lz * | grep ASCII | cut -d":" -f1 | xargs ls -ltr

Ahora, queremos utilizar el comando ls -l y pasar la lista de arriba como parmetros, uno a la vez. El comando xargs le permiti hacer eso. La ltima parte, xargs ls -ltr, toma el output y ejecuta el comando ls -ltr sobre ellos, como si ejecutase:
alert_DBA102.log: alert_DBA102.log.Z: dba102_asmb_12307.trc.Z: dba102_asmb_20653.trc.Z: ASCII ASCII ASCII ASCII English text text (compress'd data 16 bits) English text (compress'd data 16 bits) English text (compress'd data 16 bits)

xargs no es til por s mismo, pero es bastante bueno cuando se combina con otros comandos. Aqu se muestra otro ejemplo, donde queremos contaar la cantidad de lneas en esos archivos:
alert_DBA102.log alert_DBA102.log.Z dba102_asmb_12307.trc.Z dba102_asmb_20653.trc.Z

Ahora, queremos utilizar el comando ls -l y pasar la lista de arriba como parmetros, uno a la vez. El comando xargs le permiti hacer eso. La ltima parte, xargs ls -ltr, toma el output y ejecuta el comando ls -ltr sobre ellos, como si ejecutase:
ls ls ls ls -ltr -ltr -ltr -ltr alert_DBA102.log alert_DBA102.log.Z dba102_asmb_12307.trc.Z dba102_asmb_20653.trc.Z

xargs no es til por s mismo, pero es bastante bueno cuando se combina con otros comandos. Aqu se muestra otro ejemplo, donde queremos contaar la cantidad de lneas en esos archivos:
$ file * | grep ASCII | cut -d":" -f1 47853 alert_DBA102.log 19 dba102_cjq0_14493.trc 29053 dba102_mmnl_14497.trc 154 dba102_reco_14491.trc 43 dba102_rvwr_14518.trc 77122 total | xargs wc -l

(Nota: la tarea de arriba tambin puede lograrse con el siguiente comando:)


$ wc -l file * | grep ASCII | cut -d":" -f1 | grep ASCII | cut -d":" -f1

La versin xargs est dada para ilustrar el concepto. Linux tiene varias maneras de lograr la misma tarea; use la que mejor se adapte a su situacin. Al utilizar este enfoque, usted puede rpidamente renombrar los archivos de un directorio.
$ ls | xargs -t -i mv {} {}.bak

La opcin -i le comunica a xargs que reemplace {} con el nombre de cada elemento. La opcin -t ordena a xargs que imprima el comando antes de ejecutarlo. Otra operacin es muy til cuando quiere abrir los archivos para edicin utilizando vi:
$ file * | grep ASCII | cut -d":" -f1 | xargs vi

Este comando abre los archivos uno por uno utilizando vi. Cuando quiere buscar muchos archivos y abrirlos para edicin, esto resulta muy til. Tambin tiene varias opciones. Tal vez la ms til es la opcin -p, que hace que la operacin sea interactiva:
$ file * | grep ASCII | cut -d":" -f1 | xargs -p vi vi alert_DBA102.log dba102_cjq0_14493.trc dba102_mmnl_14497.trc dba102_reco_14491.trc dba102_rvwr_14518.trc ?...

Aqu xarg le pide confirmacin antes de ejecutar cada comando. Si presiona "y", ejecuta el comando. Le resultar extremadamente til cuando realice algunas operaciones potencialmente perjudiciales e irreversibles en el archivocomo eliminar o sobrescribirlo. La opcin -t utiliza un modo verboso; despliega el comando que est por ejecutar, la cual es una opcin muy til durante la depuracin. Qu sucede si el output pasara a xargs en blanco? Considere:
$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t wc -l wc -l 0 $

Aqu buscar "SSSSSS" no produce ninguna concordancia; entonces el input de xargs son todos espacios en blanco, como se muestra en la segunda lnea (producida al utilizar la opcin -t o verbosa). A pesar de que esto puede ser til, en algunos casos usted puede querer detener xargs si no hay nada que procesar; si lo hay, puede utilizar la opcin -r:
$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t -r wc -l $

El comando existe si no hay nada que ejecutar. Supongamos que quiere eliminar los archivos utilizando el comando rm, que debera ser el argumento para el comando xargs. No obstante, rm puede aceptar una cantidad limitada de argumentos. Qu sucede si su lista de argumentos excede ese lmite? La opcin -n para xargs limita la cantidad de argumentos en una sola lnea de comando. Aqu mostramos cmo puede limitar solo dos argumentos por lnea de comando: Incluso si cinco lneas pasan a xargs ls -ltr, solo dos archivos pasan a ls -ltr por vez.
$ file * | grep ASCII | cut -d":" -f1 | xargs -t -n2 ls ls -ltr alert_DBA102.log dba102_cjq0_14493.trc -rw-r----1 oracle dba 738 Aug 10 19:18 -rw-r--r-1 oracle dba 2410225 Aug 13 05:31 ls -ltr dba102_mmnl_14497.trc dba102_reco_14491.trc -rw-r----1 oracle dba 5386163 Aug 10 17:55 -rw-r----1 oracle dba 6808 Aug 13 05:21 ls -ltr dba102_rvwr_14518.trc -rw-r----1 oracle dba 2087 Aug 10 04:30 -ltr dba102_cjq0_14493.trc alert_DBA102.log dba102_mmnl_14497.trc dba102_reco_14491.trc dba102_rvwr_14518.trc

Utilizando este enfoque, usted puede rpidamente renombrar los archivos de un directorio.
$ ls | xargs -t -i mv {} {}.bak

La opcin -i le comunica a xargs que reemplace {} con el nombre de cada elemento.

rename
Como sabe, el comando mv renombra los archivos. Por ejemplo,
$ mv oldname newname

Renombra el archivo oldname como newname. Sim embargo Que ocurre si an no sabes los nombres de los archivos? El comando rename se vuelve realmente complicado aqu.
rename .log .log.date +%F-%H:%M:%S *

reemplaza todos los archivos con la extensin .log por .log.<dateformat>. Entonces sqlnet.log se convierte en sqlnet.log.2006-09-12-23:26:28.

find
Ente los usuarios Oracle, el ms conocido es el comando find. Hasta ahora, sabe cmo utilizar find para buscar archivos en un directorio determinado. Aqu mostramos un ejemplo que comienza con la palabra "file" en el directorio actual:
$ find . -name "file*" ./file2 ./file1 ./file3 ./file4

No obstante, qu sucede si quiere buscar nombres como FILE1, FILE2, etc.? -name "file*" no tendr concordancia. Para una bsqueda con distincin de maysculas y minsculas, use la opcin -iname:
$ find . -iname "file*" ./file2 ./file1 ./file3

./file4 ./FILE1 ./FILE2

Puede restringir su bsqueda a un tipo especfico de archivos. Por ejemplo, el comando de arriba obtendr archivos de todo tipo: archivos comunes, directorios, enlaces simblicos, etc. Para buscar solo archivos comunes, puede utilizar el parmetro -type f.
$ find . -name "orapw*" -type f ./orapw+ASM ./orapwDBA102 ./orapwRMANTEST ./orapwRMANDUP ./orapwTESTAUX

-type puede tomar los modificadores f (para archivos comunes), l (para enlaces simblicos), d (directorios), b (dispositivos de bloque), p (named pipes), c (dispositivos de caracteres), s (sockets). Un pequeo cambio en el comando de arriba es combinarlo con el comando file que conoci en la Parte 1. El comando file le dice qu tipo de archivo es. Puede transmitirlo como post procesador para el output desde el comando find. El parmetro -exec ejecuta el comando que sigue el parmetro. En este caso, el comando a ejecutar despus de find es file:
$ find . -name "*oraenv*" -type f -exec file {} \; ./coraenv: Bourne shell script text executable ./oraenv: Bourne shell script text executable

Esto es til cuando quiere descubrir si el archivo de texto ASCII podra ser algn tipo de shell script. Si sustituye -exec con -ok, el comando es ejecutado pero solicita confirmacin primero. Aqu hay un ejemplo:
$ find . -name "sqlplus*" -ok {} \; < {} ... ./sqlplus > ? y SQL*Plus: Release 9.2.0.5.0 - Production on Sun Aug 6 11:28:15 2006 Copyright (c) 1982, 2002, Oracle Corporation. Enter user-name: / as sysdba Connected to: Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options JServer Release 9.2.0.5.0 - Production SQL> exit Disconnected from Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options JServer Release 9.2.0.5.0 - Production < * ... ./sqlplusO > ? n $ All rights reserved.

Aqu, hemos pedido al shell que busque todos los programas que comienzan con "sqlplus", y que los ejecute. Fjese que no hay nada entre -ok y {}, por lo tanto solo ejecutar los archivos que encuentre. Encuentra dos archivossqlplus y sqlplusOy en ambos casos pregunta si usted desea ejecutarlos. Respondemos "y" para el prompt de "sqlplus" y lo ejecuta. Despus de salir, solicita el

segundo archivo que encontr (sqlplusO) y solicita confirmacin una y otra vez, a lo cual respondimos "n"entonces, no se ejecut.

Consejo para Usuarios Oracle


Oracle produce varios archivos extraos: archivos de localizacin, archivos testigo, archivos dump, etc. A menos que se limpien peridicamente, pueden llenar el sistema de archivos e interrumpir la base de datos. Para garantizar que eso no suceda, simplemente busque los archivos con extensin "trc" y elimnelos si tienen ms de tres das de antigedad. Un comando simple es la solucin:
find . -name "*.trc" -ctime +3 -exec rm {} \;

Para eliminarlos antes del lmite de tres das, use la opcin -f.
find . -name "*.trc" -ctime +3 -exec rm -f {} \;

Si simplemente desea enumerar los archivos:


find . -name "*.trc" -ctime +3 -exec ls -l {} \;

m4
Este comando toma un archivo input y sustituye las cadenas dentro de l con los parmetros transmitidos, lo cual es similar a sustituirlas por variables. Por ejemplo, vea un archivo input:
$ cat temp The COLOR fox jumped over the TYPE fence.

Si quiere sustituir las cadenas "COLOR" por "brown" y "TYPE" por "broken", puede utilizar:
$ m4 -DCOLOR=brown -DTYPE=broken temp The brown fox jumped over the broken fence. Else, if you want to substitute "white" and "high" for the same: $ m4 -DCOLOR=white -DTYPE=high temp The white fox jumped over the high fence.

whence y which
Estos comandos son utilizados para saber dnde se almacenan los ejecutables mencionados en el PROCESO del usuario. Cuando el ejecutable es encontrado en el proceso, se comportan de manera bastante similar y muestran el proceso:
$ which sqlplus /u02/app/oracle/products/10.2.0.1/db1/bin/sqlplus $ whence sqlplus /u02/app/oracle/products/10.2.0.1/db1/bin/sqlplus

El output es idntico. Sin embargo, si el ejecutable no es encontrado en el proceso, el comportamiento es diferente. El comando which produce un mensaje explcito:
$ which sqlplus1 /usr/bin/which: no sqlplus1 in (/u02/app/oracle/products/10.2.0.1/db1/bin:/usr /kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/ X11R6/bin)

whereas El comando whence no produce mensaje:


$ whence sqlplus1]

y vuelve a shell prompt. Esto es til en casos donde el ejecutable no es encontrado en el proceso (en lugar de mostrar el mensaje):
$ whence invalid_command $ which invalid_command which: no invalid_command in (/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/sbin: /usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin: /usr/bin/X11:/usr/X11R6/bin:/root/bin)

Cuando whence no encuentra un ejecutable en el proceso, vuelve sin ningn mensaje pero el cdigo de retorno no es cero. Esto puede utilizarse en shell scripts; por ejemplo:
RC=whence myexec If [ $RC -ne "0" ]; then echo "myexec is not in the $PATH" fi

Una opcin muy til es la opcin -i, que muestra el alias y el ejecutable, si est presente. Por ejemplo, usted pudo ver el uso del alias al comienzo de este artculo. El comando rm es en realidad un alias en mi shell, y tambin en cualquier lugar donde haya un comando rm en el sistema.
$ which ls /bin/ls $ which -i ls alias ls='ls --color=tty' /bin/ls

El comportamiento por defecto es mostrar la primera ocurrencia del ejecutable en el proceso. Si el ejecutable existe en diferentes directorios del proceso, las ocurrencias subsiguientes son ignoradas. Puede ver todas las ocurrencias del ejecutable mediante la opcin -a.
$ which java /usr/bin/java $ which -a java /usr/bin/java /home/oracle/oracle/product/11.1/db_1/jdk/jre/bin/java

top
El comando top es probablemente el ms til para un Oracle DBA que administra una base de datos sobre Linux. Digamos que el sistema es lento y quiere saber quin est saturando la CPU y/o memoria. Para mostrar los procesos clave, utiliza el comando top. Fjese que a diferencia de otros comandos, top no produce un output y permanece inactivo. Actualiza la pantalla para mostrar nueva informacin. Por lo tanto, si simplemente activa top y deja la pantalla activa, siempre contar con la informacin ms actual. Para cancelar e ir hacia shell, puede presionar Control-C.
$ top 18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18 151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped CPU states: cpu user nice system irq softirq iowait idle

total 12.5% 1026912k av, 999548k 758312k Swap: 2041192k av, 122224k Mem: PID USER PRI NI 451 oracle 15 0 8991 oracle 15 0 1 root 19 0 2 root 15 0 3 root 15 0 4 root 34 19 7 root 15 0 5 root 15 0 6 root 15 0 8 root 15 0 9 root 25 0 ... output snipped ...

0.0% 6.7% used, 27364k actv, 145904k used, 1918968k

0.0% free, in_d, free

0.0% 5.3% 75.2% 0k shrd, 116104k buff 16192k in_c 590140k cached TIME CPU COMMAND 0:20 0 tnslsnr 0:00 0 top 0:04 0 init 0:00 0 keventd 0:00 0 kapmd 0:00 0 ksoftirqd/0 0:01 0 bdflush 0:33 0 kswapd 0:14 0 kscand 0:00 0 kupdated 0:00 0 mdrecoveryd

SIZE RSS SHARE STAT %CPU %MEM 6044 4928 4216 S 0.1 0.4 1248 1248 896 R 0.1 0.1 440 400 372 S 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SWN 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SW 0.0 0.0 0 0 0 SW 0.0 0.0

Examinemos los diferentes tipos de informacin producidos. La primera lnea:


18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18

muestra la hora actual (18:46:13), que el sistema ha estado activo durante 11 das; que el sistema ha trabajado durante 21 horas 50 segundos. Se muestra el promedio de carga del sistema (0.11, 0.19, 0.18) para los ltimos 1, 5 y 15 minutos respectivamente. (A propsito, usted tambin puede obtener esta informacin ejecutando el uptime command.) Si el promedio de carga no es necesario, presione la letra "l" (L minscula); lo desactivar. Para volver a activarlo presione l nuevamente. La segunda lnea:
151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped

muestra la cantidad de procesos, en ejecucin, inactivos, etc. La tercera y cuarta lnea:


CPU states: cpu total user 12.5% nice 0.0% system 6.7% irq 0.0% softirq 0.0% iowait 5.3% idle 75.2%

muestran los detalles del uso de CPU. La lnea de arriba muestra que los procesos de los usuarios consumen un 12,5% y el sistema consume un 6,7%. Los procesos del usuario incluyen los procesos Oracle. Presione "t" para activar y desactivar estas tres lneas. Si hay ms de una CPU, usted ver una lnea por CPU. Las prximas dos lneas:
Mem: 1026912k av, 1000688k used, 758668k actv, Swap: 2041192k av, 122476k used, 26224k free, 146872k in_d, 1918716k free 0k shrd, 113624k buff 14460k in_c 591776k cached

muestran la memoria disponible y utilizada. La memoria total es "1026912k av", aproximadamente 1GB, de la cual solo 26224k o 26MB est libre. El espacio de intercambio es de 2GB; pero casi no es utilizado. Para activarlo y desactivarlo, presione "m". El resto muestra los procesos en un formato tabular. A continuacin, se explican las columnas: Columna PID USER PRI NI Descripcin El ID del proceso El usuario que ejecuta el proceso La prioridad del proceso El valor nice: Cuanto ms alto es el valor, ms baja es la prioridad

SIZE RSS SHARE STAT

de la tarea Memoria utilizada por este proceso (cdigo+datos+stack) Memoria fsica utilizada por este proceso Memoria compartida utilizada por este proceso El estado de este proceso, mostrado en cdigos. Algunos cdigos importantes de estado son: R Running (enejecucin) S Sleeping (inactivo) Z Zombie (vacilante) T Stopped (detenido)

Usted tambin puede ver el segundo y tercer carcter, que indican: W Swapped out process (proceso intercambiado) N positive nice value (valor nice positivo) %CPU Porcentaje de CPU utilizado por este proceso %MEM Porcentaje de memoria utilizado por este proceso TIME Tiempo total de CPU utilizado por este proceso CPU Si este es un proceso de procesadores mltiples, esta columna indica el ID de la CPU sobre la cual se est ejecutando este proceso. COMMAND Comando utilizado por este proceso Mientras se muestra top, puede presionar algunas teclas para formatear la representacin visual como usted quiera. Presionar la tecla mayscula M clasifica el output por uso de memoria. (Fjese que utilizar la letra minscula m activar o desactivar las lneas de resumen de memoria en la parte superior de la representacin visual). Esto es muy til cuando quiere descubrir quin consume la memoria. Vea un ejemplo de output:
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU 31903 oracle 15 0 75760 72M 72508 S 0.0 7.2 0:01 ora_smon_PRODB2 31909 oracle 15 0 68944 66M 64572 S 0.0 6.6 0:03 ora_mmon_PRODB2 31897 oracle 15 0 53788 49M 48652 S 0.0 4.9 0:00 ora_dbw0_PRODB2 COMMAND 0 0 0

Ahora que ya sabe cmo interpretar el output, veamos cmo utilizar los parmetros de lnea de comando. El ms til es -d, que indica la demora entre las actualizaciones de pantalla. Para actualizar cada segundo, use top -d 1. La otra opcin til es -p. Si solo desea monitorear algunos procesos, no todos, puede especificar solo aquellos despus de la opcin -p. Para monitorear los procesos 13609, 13608 y 13554:
top -p 13609 -p 13608 -p 13554

Esto mostrar los resultados en el mismo formato que el comando top, pero solo esos procesos especficos.

Consejo para Usuarios Oracle


Es casi innecesario decir que top resulta muy til para analizar el desempeo de los servidores de base de datos. Aqu mostramos un output top parcial.
20:51:14 up 11 days, 23:55, 4 users, load average: 0.88, 0.39, 0.27

113 processes: 110 sleeping, 2 running, 1 zombie, 0 stopped CPU states: cpu user nice system irq softirq iowait idle total 1.0% 0.0% 5.6% 2.2% 0.0% 91.2% 0.0% Mem: 1026912k av, 1008832k used, 18080k free, 0k shrd, 30064k buff 771512k actv, 141348k in_d, 13308k in_c Swap: 2041192k av, 66776k used, 1974416k free 812652k cached PID USER PRI NI SIZE 16143 oracle 15 0 39280 oraclePRODB2... 5 root 15 0 0 ... output snipped ... RSS SHARE STAT %CPU %MEM 32M 26608 D 4.0 3.2 0 0 SW 1.6 0.0 TIME CPU COMMAND 0:02 0 0:33 0 kswapd

Analicemos el output cuidadosamente. Lo primero que debera notar es que la columna "inactiva" de la CPU indica; 0,0%es decir, la CPU est completamente ocupada haciendo algo. La pregunta es, haciendo qu? Preste atencin a la columna "sistema", ligeramente a la izquierda; muestra 5,6%. Entonces el sistema no est haciendo mucho. Vaya ms a la izquierda hasta la columna "usuario", que muestra 1,0%. Como los procesos de usuarios incluyen Oracle tambin, Oracle no consume los ciclos de CPU. Por lo tanto, qu consume toda la CPU? La respuesta est en la misma lnea, justo a la derecha en la columna "iowait", que indica un 91,2%. Esto lo explica todo: la CPU est esperando IO el 91,2% del tiempo. Entonces, por qu tanta espera por IO? La respuesta est en la pantalla. Fjese en el PID del proceso con mayor consumo: 16143. Puede utilizar la siguiente consulta para determinar qu est haciendo el proceso:
select s.sid, s.username, s.program from v$session s, v$process p where spid = 16143 and p.addr = s.paddr / SID USERNAME PROGRAM ------------------- ----------------------------159 SYS rman@prolin2 (TNS V1-V3)

El proceso rman est reduciendo los ciclos de CPU relacionados con la espera de IO. Esta informacin ayuda a determinar el prximo plan de accin.

skill y snice
En el debate anterior, aprendi cmo identificar un recurso de consumo de CPU. Qu sucede si descubre que un proceso consume mucha CPU y memoria, pero no quiere cancelarlo? Considere este output top:
$ top -c -p 16514 23:00:44 up 12 days, 2:04, 4 users, load average: 0.47, 0.35, 0.31 1 processes: 1 sleeping, 0 running, 0 zombie, 0 stopped CPU states: cpu user nice system irq softirq iowait idle total 0.0% 0.6% 8.7% 2.2% 0.0% 88.3% 0.0% Mem: 1026912k av, 1010476k used, 16436k free, 0k shrd, 52128k buff 766724k actv, 143128k in_d, 14264k in_c Swap: 2041192k av, 83160k used, 1958032k free 799432k cached PID USER PRI 16514 oracle 19 oraclePRODB2... NI SIZE 4 28796 RSS SHARE STAT %CPU %MEM 26M 20252 D N 7.0 2.5 TIME CPU COMMAND 0:03 0

Ahora que confirm que el proceso 16514 consume mucha memoria, puede "congelarlo"pero no cancelarlousando el comando skill.
$ skill -STOP 1

Luego, vea el output top:


23:01:11 up 12 days, 2:05, 4 users, load average: 1.20, 0.54, 0.38 1 processes: 0 sleeping, 0 running, 0 zombie, 1 stopped CPU states: cpu user nice system irq softirq iowait idle total 2.3% 0.0% 0.3% 0.0% 0.0% 2.3% 94.8% Mem: 1026912k av, 1008756k used, 18156k free, 0k shrd, 3976k buff 770024k actv, 143496k in_d, 12876k in_c Swap: 2041192k av, 83152k used, 1958040k free 851200k cached PID USER PRI 16514 oracle 19 oraclePRODB2... NI SIZE 4 28796 RSS SHARE STAT %CPU %MEM 26M 20252 T N 0.0 2.5 TIME CPU COMMAND 0:04 0

La CPU ahora est un 94% inactiva, de 0%. El proceso queda efectivamente congelado. Despus de algn tiempo, puede querer reanudar el proceso del coma:
$ skill -CONT 16514

Este enfoque es muy til para congelar temporalmente los procesos a fin de hacer lugar para finalizar los procesos ms importantes. El comando es muy verstil. Si desea detener todos los procesos de usuario "oracle", hay nicamente un solo comando que lo hace todo:
$ skill -STOP oracle

Puede utilizar un usuario, PID, un comando o terminal id como argumento. Lo que se muestra a continuacin detiene todos los comandos rman.
$ skill -STOP rman

Como puede ver, skill decide ese argumento que ingresun ID para el proceso, un id de usuario o un comandoy acta en consecuencia. Esto puede causar problemas en algunos casos, donde puede tener un usuario y un comando con el mismo nombre. El mejor ejemplo es el proceso "oracle", que en general es ejecutado por el usuario "oracle". Por lo tanto, cuando quiere detener el proceso denominado "oracle" y realiza:
$ skill -STOP oracle

todos los procesos del usuario "oracle" se detienen, incluso la sesin que puede estar ejecutando en ese momento. Para ser completamente ambiguo, puede opcionalmente ofrecer un nuevo parmetro para especificar el tipo de parmetro. Para detener un comando llamado oracle, puede:
$ skill -STOP -c oracle

El comando snice es similar. En lugar de detener un proceso, hace que su prioridad sea ms baja. Primero, vea el output:
PID 3 13680 13683 13686 13689 13695 USER root oracle oracle oracle oracle oracle PRI 15 15 15 15 15 15 NI SIZE RSS SHARE STAT %CPU %MEM 0 0 0 0 RW 0.0 0.0 0 11336 10M 8820 T 0.0 1.0 0 9972 9608 7788 T 0.0 0.9 0 9860 9496 7676 T 0.0 0.9 0 10004 9640 7820 T 0.0 0.9 0 9984 9620 7800 T 0.0 0.9 TIME CPU COMMAND 0:00 0 kapmd 0:00 0 oracle 0:00 0 oracle 0:00 0 oracle 0:00 0 oracle 0:00 0 oracle

13698 oracle 13701 oracle

15 15

0 10064 9700 7884 T 0 22204 21M 16940 T

0.0 0.0

0.9 2.1

0:00 0:00

0 oracle 0 oracle

Ahora, reduzca cuatro puntos la prioridad de los procesos de "oracle". Fjese que cuanto mayor es el nmero, ms baja es la prioridad.
$ snice +4 -u oracle PID USER 16894 oracle PRI 20 NI SIZE 4 38904 RSS SHARE STAT %CPU %MEM 32M 26248 D N 5.5 3.2 TIME CPU COMMAND 0:01 0 oracle

Note cmo la columna NI (para valores nice) ahora es 4 y la prioridad est ahora fijada en 20, en lugar de 15. Esto es bastante til para reducir prioridades.

Gua para Maestra Avanzada en Comandos Linux, Parte 3: Administracin de Recursos


por Arup Nanda Publicado en enero de 2009 En esta entrega, aprenda los comandos avanzados de Linux para monitorear componentes fsicos Un sistema Linux est conformado por varios componentes fsicos clave como CPU, memorias, tarjetas de red y dispositivos de almacenamiento. Para administrar de manera efectiva el entorno Linux, usted debera poder evaluar varias mtricas de estos recursoscunto procesa cada componente, si existen cuellos de botella, entre otras cosas con una precisin razonable. En otras partes de esta serie usted aprendi algunos comandos para medir las mtricas en un nivel macro. En esta entrega, no obstante, aprender los comandos avanzados de Linux para monitorear componentes fsicos. En especial, aprender acerca de los comandos en las siguientes categoras: Component Memory CPU I/O Processes Commands free, vmstat, mpstat, iostat, sar vmstat, mpstat, iostat, sar vmstat, mpstat, iostat, sar ipcs, ipcrm

Como puede observar, algunos comandos aparecen en ms de una categora. Esto se debe a que los comandos pueden desempear muchas tareas. Algunos comandos se ajustan mejor a otros componentes por ej., iostat para I/Opero debera comprender las diferencias en sus trabajos y utilizar aquellos con los que se sienta ms cmodo. En la mayora de los casos, un solo comando no es til para comprender lo que realmente est sucediendo. Usted debera conocer mltiples comandos para obtener la informacin que desea.

"free"
Una pregunta comn es, Cunta memoria est siendo utilizada por mis aplicaciones y los distintos servidores, usuarios y procesos de sistemas? O, Cunto espacio de memoria tengo libre en este momento? Si la memoria utilizada por los procesos en ejecucin es mayor la memoria RAM disponible, los procesos se trasladan a la memoria swap (memoria virtual). Por lo tanto, una pregunta complementaria sera, Qu cantidad de memoria swap se est utilizando?. El comando free responde a todas estas preguntas. Es ms, una opcin muy til, m , muestra la memoria libre en megabytes:
# free -m total Mem: 1772 -/+ buffers/cache: Swap: 1983 used 1654 1017 1065 free 117 754 918 shared 0 buffers 18 cached 618

El output muestra que el sistema tiene 1.772 MB de RAM, de los cuales se utilizan 1.654 MB, dejando 117 MB de memoria libre. La segunda lnea muestra los cambios de tamao de cach y buffers en la memoria fsica. La tercera lnea muestra la utilizacin de memoria swap. Para expresar lo mismo en kilobytes y gigabytes, reemplace la opcin -m con -k o -g respectivamente. Usted puede colocarse en el nivel de bytes tambin, utilizando la opcin b.
# free -b total used Mem: 1858129920 1724039168 -/+ buffers/cache: 1062203392 Swap: 2080366592 1116721152 free 134090752 795926528 963645440 shared 0 buffers 18640896 cached 643194880

La opcin t muestra el total al final del output (suma de memoria fsica ms swap):
# free -m -t total Mem: 1772 -/+ buffers/cache: Swap: 1983 Total: 3756 used 1644 1014 1065 2709 free 127 757 918 1046 shared 0 buffers 16 cached 613

A pesar de que free no muestra los porcentajes, podemos extraer y formatear partes especficas del output para mostrar la memoria utilizada como porcentaje del total solamente:
# free -m | grep Mem | awk '{print ($3 / $2)*100}' 98.7077

Esto viene bien para los shell scripts en donde las cantidades especficas son importantes. Por ejemplo, usted quizs quiera generar un alerta cuando el porcentaje de memoria libre descienda por debajo de cierto lmite. De modo similar, para encontrar el porcentaje de swap utilizado, usted puede emitir:
free -m | grep -i Swap | awk '{print ($3 / $2)*100}'

Puede utilizar free para observar la carga de memoria empleada por una aplicacin. Por ejemplo, controle la memoria libre antes de iniciar una aplicacin de backup y luego contrlela inmediatamente luego de iniciarla. La diferencia podra atribuirse al consumo por parte de la aplicacin de backup.

Para Usuarios de Oracle


Entonces, cmo puede utilizar este comando para administrar el servidor Linux que ejecuta su entorno de Oracle? Una de las causas ms comunes de los problemas de desempeo es la falta de memoria, lo que provoca que el sistema intercambie reas de memoria en el disco de manera temporal. Cierto grado de intercambio es probablemente inevitable pero experimentar una gran cantidad de intercambio puede indicar falta de memoria libre. En cambio, usted puede utilizar free para obtener informacin de la memoria libre y ahora hacer el seguimiento con el comando sar (que se muestra luego) para controlar la tendencia histrica del consumo de memoria y swap. Si el uso de swap es temporario, es probable que se trate de un pico (spike) por nica vez; pero si se declara durante un perodo de tiempo, debera hacerlo notar. Existen algunas sospechas posibles y obvias de sobrecarga crnica de memoria: SGA ms amplia que la memoria disponible Amplia asignacin en PGA Algunos procesos con bugs que producen la fuga de de memoria Para el primer caso, usted debera asegurarse de que SGA sea menor a la memoria disponible. La regla general es utilizar alrededor del 40 por ciento de la memoria fsica para SGA, no obstante, debera definir ese parmetro sobre la base de su situacin especfica. En el segundo caso, usted debera intentar reducir la amplia asignacin de buffers en consultas. En el tercer caso debera utilizar el comando ps (descripto en entregas anteriores de esta serie) para identificar el proceso especfico que podra producir la fuga de memoria.

"ipcs"
Cuando se ejecuta un proceso, se adopta desde la memoria compartida. Puede haber uno o muchos segmentos de memoria compartida por proceso. Los procesos intercambian mensajes entre ellos (comunicaciones entre procesos, o IPC) y utilizan semforos. Para desplegar informacin sobre segmentos de memoria compartida, colas de mensajes IPC y semforos, usted puede utilizar un solo comando: ipcs. La opcin m es muy conocida; despliega los segmentos de memoria compartida.
# ipcs -m ------ Shared Memory Segments -------key shmid owner perms 0xc4145514 2031618 oracle 660 0x00000000 3670019 oracle 660 0x00000000 327684 oracle 600 0x00000000 360453 oracle 600 0x00000000 393222 oracle 600 0x00000000 425991 oracle 600 0x00000000 3702792 oracle 660 0x00000000 491529 oracle 600 0x49d1a288 3735562 oracle 660 0x00000000 557067 oracle 600 0x00000000 1081356 oracle 600 0x00000000 983053 oracle 600 0x00000000 1835023 oracle 600 bytes 4096 8388608 196608 196608 196608 196608 926941184 196608 140509184 196608 196608 196608 196608 nattch 0 108 2 2 2 2 108 2 108 2 2 2 2 status dest dest dest dest dest dest dest dest dest

Este output, tomado de un servidor que ejecuta software de Oracle, muestra los distintos segmentos de memoria compartida. Cada uno se identifica exclusivamente por un ID de memoria compartida, y se muestra en la columna shmid. (Ms adelante ver cmo utilizar el valor de esta columna.) El owner, por supuesto, muestra el propietario del segmento, la columna perms muestra los permisos (igual que los permisos unix), y bytes muestra el tamao de los bytes.

La opcin -u muestra un breve resumen:


# ipcs -mu ------ Shared Memory Status -------segments allocated 25 pages allocated 264305 pages resident 101682 pages swapped 100667 Swap performance: 0 attempts 0 successes

La opcin l muestra los lmites (en contraposicin a los valores actuales):


# ipcs -ml ------ Shared Memory Limits -------max number of segments = 4096 max seg size (kbytes) = 907290 max total shared memory (kbytes) = 13115392 min seg size (bytes) = 1

Si usted ve que los valores reales se acercan o se encuentran en el lmite, debera extender ese lmite. Puede obtener un panorama detallado de un segmento de memoria compartida utilizando el valor shmid. La opcin i logra esto. Usted ver los detalles de shmid 3702792:
# ipcs -m -i 3702792 Shared memory Segment shmid=3702792 uid=500 gid=502 cuid=500 cgid=502 mode=0660 access_perms=0660 bytes=926941184 lpid=12225 cpid=27169 att_time=Fri Dec 19 23:34:10 2008 det_time=Fri Dec 19 23:34:10 2008 change_time=Sun Dec 7 05:03:10 2008

nattch=113

Ms adelante ver un ejemplo de cmo interpretar el output de arriba. La opcin -s muestra los semforos en el sistema:
# ipcs -s ------ Semaphore Arrays -------key semid owner perms 0x313f2eb8 1146880 oracle 660 0x0b776504 2326529 oracle 660 and so on nsems 104 154

Esto muestra algunos de datos valiosos. Se observa que el grupo de semforos de ID 1146880 posee 104 semforos, y el otro tiene 154. Si usted los suma, el valor total debe ser menor al lmite mximo definido por el parmetro kernel (semmax). Mientras se instala el software de la Base de Datos de Oracle, el controlador de preinstalacin debe controlar los parmetros para semmax. Luego, cuando el sistema alcanza el estado seguro, usted puede controlar la utilizacin real y luego ajustar el valor kernel de manera adecuada.

Para Usuarios de Oracle


Cmo puede descubrir los segmentos de memoria compartida utilizados por la instancia de Base de Datos de Oracle? Para lograrlo, utilice el comando oradebug. Primero conctese a la base de datos como sysdba:

# sqlplus / as sysdba

En el SQL, utilice el comando oradebug como se muestra abajo:


SQL> oradebug setmypid Statement processed. SQL> oradebug ipc Information written to trace file.

Para descubrir el nombre del archivo de rastreo:


SQL> oradebug TRACEFILE_NAME /opt/oracle/diag/rdbms/odba112/ODBA112/trace/ODBA112_ora_22544.trc

Ahora, si abre un archivo de rastreo, usted ver los IDs de la memoria compartida. Aqu se muestra un extracto del archivo:
Area #0 `Fixed Size' containing Subareas 0-0 Total size 000000000014613c Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 0 0 17235970 0x00000020000000 0x00000020000000 Subarea size Segment size 0000000000147000 000000002c600000 Area #1 `Variable Size' containing Subareas 4-4 Total size 000000002bc00000 Minimum Subarea size 00400000 Area Subarea Shmid Stable Addr Actual Addr 1 4 17235970 0x00000020800000 0x00000020800000 Subarea size Segment size 000000002bc00000 000000002c600000 Area #2 `Redo Buffers' containing Subareas 1-1 Total size 0000000000522000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 2 1 17235970 0x00000020147000 0x00000020147000 Subarea size Segment size 0000000000522000 000000002c600000 ... and so on ...

El ID de memoria compartida se muestra en letra maysculas rojas. Usted puede utilizar este ID de memoria compartida para obtener los detalles de la memoria compartida:
# ipcs -m -i 17235970

Otra observacin til es el valor de lpid el ID del proceso que por ltima vez alcanz el segmento de memoria compartida. Para demostrar el valor en ese atributo, utilice SQL*Plus para conectarse a la instancia desde una sesin distinta.
# sqlplus / as sysdba

En esa sesin, descubra el PID del proceso del servidor:


SQL> select spid from v$process 2 where addr = (select paddr from v$session 3 where sid = 4 (select sid from v$mystat where rownum < 2) 5 ); SPID -----------------------13224

Ahora vuelva a ejecutar el comando ipcs frente al mismo segmento de memoria compartida:
# ipcs -m -i 17235970

Shared memory Segment shmid=17235970 uid=500 gid=502 cuid=500 cgid=502 mode=0660 access_perms=0660 bytes=140509184 lpid=13224 cpid=27169 att_time=Fri Dec 19 23:38:09 2008 det_time=Fri Dec 19 23:38:09 2008 change_time=Sun Dec 7 05:03:10 2008

nattch=113

Preste atencin al valor de lpid, que fue cambiado a 13224 desde el valor original 12225. El lpid muestra el PID del ltimo proceso que alcanz el segmento de memoria compartida, y observe cmo cambiaron los valores. El comando por s mismo, ofrece poco valor. El prximo comando ipcrm le permite actuar en base al output, como ver en la prxima seccin.

ipcrm
Ahora que ha identificado la memoria compartida y dems mtricas de IPC qu hacer con ellas? Usted ya ha conocido su uso, por ejemplo, identificar le memoria compartida utilizada por Oracle, asegurar que el parmetro kernel para la memoria compartida haya sido establecido, etc. Otra aplicacin comn es eliminar la memoria compartida, la cola de mensajes IPC, o los grupos de semforos. Para eliminar el segmento de memoria compartida, observe su shmid del output del comando ipcs. Luego utilice la opcin m para eliminar el segmento. Para remover el segmento con ID 3735562, utilice
# ipcrm m 3735562

Esto eliminar la memoria compartida. Usted tambin puede utilizarlo para eliminar colas de mensajes IPC y semforos (utilizando los parmetros s y q).

Para Usuarios de Oracle


Algunas veces cuando se cierra la instancia de base de datos, los segmentos de memoria compartida pueden no eliminarse por completo por el kernel de Linux. La memoria compartida que queda no es utilizada; no obstante, invade los recursos del sistema reduciendo la cantidad de memoria disponible para otros procesos. En ese caso, usted puede controlar cualquier segmento de memoria compartida persistente que posee el usuario oracle y luego eliminarlo, si corresponde, utilizando el comando ipcrm.

vmstat
Cuando se invoca vmstat, denominado el abuelo de todas las visualizaciones relacionadas con procesos y memorias, continuamente ejecuta y entrega su informacin. Toma dos segmentos:
# vmstat <interval> <count>

<interval> es el intervalo en segundos entre dos ejecuciones. <count> es la cantidad de repeticiones que vmstat realiza. Vea un ejemplo de cuando usted desea que vmstat se ejecute cada cinco segundos y se detenga luego de la dcima vez. Cada lnea en el output se despliega despus de cinco segundos y muestra las estadsticas en ese momento.
# vmstat 5 10 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

b swpd 0 1087032 0 1087032 0 1087032 shows up to

r 0 0 0

free buff cache 132500 15260 622488 132500 15284 622464 132484 15300 622448 10 times.

si 89 0 0

so 19 0 0

bi 9 230 317

bo in 3 0 151 1095 79 1088

cs us sy id wa 0 4 10 82 5 858 1 0 98 1 905 1 0 98 0

El output muestra mucha informacin sobre los recursos del sistema. Vemoslos en detalle: procs Muestra la cantidad de procesos r Proceso en espera para ser ejecutado. Cuanto mayor es la carga del sistema, mayor la cantidad de procesos que esperan que los ciclos de CPU se ejecuten. Procesos en espera ininterrumpible, tambin conocidos como procesos bloqueados. Estos procesos generalmente esperan una I/O, pero tambin podran referirse a otras cosas.

Algunas veces hay otra columna que se denomina w, la cual muestra la cantidad de procesos que pueden ser ejecutados pero que se han intercambiado al rea de swap. La cantidad que muestra b debera ser cercana a 0. Si la cantidad que se muestra en w es elevada, usted puede necesitar ms memoria. El siguiente cuadro muestra las mtricas de memoria:: swpd free buff cache Cantidad de memoria virtual o memoria swap (en KB) Cantidad de memoria fsica libre (en KB) Cantidad de memoria utilizada como buffer (en KB) Kilobytes de memoria fsica utilizados como cach

La memoria de buffer se utiliza para almacenar metadatos de archivos como i-nodes y datos de dispositivos de bloques en bruto. La memoria de cach se utiliza para datos de archivos. El siguiente cuadro muestra la actividad de swap: si ndice en el cual la memoria realiza el intercambio del disco a la RAM fsica (en KB/seg.) so ndice en el cual la memoria realiza el intercambio al disco desde la memoria RAM fsica (en KB/seg.) El siguiente cuadro muestra la actividad de I/O: bi ndice en el cual el sistema enva datos a los dispositivos de bloque (en bloques/seg.) bo ndice en el cual el sistema lee los datos desde los dispositivos de bloque (en bloques/seg.) El siguiente cuadro muestra las actividades relacionadas con el sistema:

in Cantidad de interrupciones del sistema por segundo cs ndice de cambios de contexto en el espacio del proceso (en cantidad /seg.) El ltimo cuadro es probablemente el ms utilizado informacin sobre la carga de CPU: us Muestra el porcentaje de CPU utilizado en los procesos del usuario. Los procesos de Oracle se presentan en esta categora. sy Porcentaje de CPU utilizado por los procesos del sistema, tales como los procesos de raz id Porcentaje de CPU libre wa Porcentaje utilizado en espera por I/O Veamos cmo interpretar estos valores. La primera lnea del output es un promedio de todas las mtricas desde el reinicio del sistema. Por lo tanto, ignore esa lnea ya que no muestra el estado real. Las dems lneas muestran las mtricas en tiempo real. De modo ideal, la cantidad de procesos en espera o bloqueados (bajo el encabezado procs) debera ser 0 o cercana a 0. Si sta es elevada, entonces el sistema no tiene demasiados recursos como CPU, memoria o I/O. Esta informacin resulta til al momento de diagnosticar los problemas de desempeo. Los datos bajo swap indican si se est produciendo un exceso de intercambio. Si ese es el caso, entonces quizs tenga memoria fsica inadecuada. Usted debera reducir la demanda de memoria o aumentar la memoria RAM fsica. Los datos bajo io indican el flujo de datos desde y hasta el disco. Esto muestra la actividad del disco, sin indicar necesariamente la existencia de algn problema. Si usted observa un nmero elevado en proc y luego en la columna b (procesos que estn siendo bloqueados) y I/O elevado, el problema podra deberse a una contencin I/O severa. La informacin ms til se presenta en el encabezado cpu. La columna id muestra la CPU inactiva. Si usted resta 100 a esa cantidad, obtiene el porcentaje de CPU ocupada. Recuerda el comando top descripto en otra entrega de esta serie? Ese tambin muestra el porcentaje de CPU libre. La diferencia es: el comando top muestra el porcentaje libre para cada CPU mientras que el vmstat muestra la visin consolidada de todas las CPU. El comando vmstat tambin muestra el desglose del uso de CPU: qu cantidad es utilizada por el sistema Linux, qu cantidad por un proceso de usuarios y por la espera para I/O. A partir de este desglose usted puede determinar qu contribuye al consumo de la CPU. Si la carga del sistema de CPU es alta, podra haber algn proceso raz como un backup en ejecucin? La carga del sistema debera ser consistente durante un perodo de tiempo. Si el sistema muestra una cantidad elevada, utilice el comando top para identificar el porcentaje de consumo de CPU.

Para Usuarios de Oracle


Los procesos de Oracle (los procesos de antecedentes y del servidor) y los procesos de usuarios (sqlplus, apache, etc.) figuran bajo us. Si esta cantidad es elevada, utilice top para identificar los procesos. Si la columna wa muestra una cantidad elevada, esto indica que el sistema I/O no puede alcanzar la cantidad de lectura o escritura. Esto podra ocasionalmente disparar un resultado

de picos en actualizaciones a la base de datos, lo que podra causar un cambio de registro y un pico posterior en los procesos de archivo. Pero, si muestra consistentemente una cifra elevada, entonces podra estar en presencia de un cuello de botella de I/O. Las obstrucciones de I/O en una base de datos de Oracle pueden causar serios problemas. Aparte de los problemas de desempeo, el lento flujo de I/O podra provoca enlentecer las escrituras de controlfile, lo que provocara la espera de un proceso hasta adquirir controlfile en cola. Si la espera es de ms de 900 segundos, y un proceso crtico est en espera, como LGWR, se elimina la instancia de base de datos. Si el nivel de intercambio (swapping) es elevado, tal vez el tamao de SGA sea muy alto para ajustarse a la memoria fsica. Usted debera reducir el tamao de SGA o aumentar la memoria fsica.

mpstat
Otro comando til para obtener las estadsticas relacionadas con la CPU es mpstat. Aqu se muestra un ejemplo del output:
# mpstat -P ALL 5 2 Linux 2.6.9-67.ELsmp (oraclerac1) 10:42:38 intr/s 10:42:43 1121.60 10:42:43 413.00 10:42:43 708.40 10:42:43 intr/s 10:42:48 1195.01 10:42:48 1034.53 10:42:48 160.48 Average: intr/s Average: 1158.34 Average: 724.08 Average: 434.17 PM PM PM PM PM PM PM PM CPU all 0 1 CPU all 0 1 CPU all 0 1 %user 6.89 9.20 4.60 %user 7.60 4.19 10.78 %user 7.25 6.69 7.69 12/20/2008 %irq 0.10 0.00 0.20 %irq 0.00 0.00 0.00 %irq 0.05 0.00 0.10 %soft 0.10 0.20 0.20 %soft 0.10 0.00 0.00 %soft 0.10 0.10 0.10 %idle 48.05 41.60 54.60 %idle 46.70 93.21 0.20 %idle 47.38 67.43 27.37

%nice %system %iowait 0.00 0.00 0.00 44.76 49.00 40.60 0.10 0.00 0.00

%nice %system %iowait 0.00 0.00 0.00 45.30 2.20 88.22 0.30 0.40 0.40

%nice %system %iowait 0.00 0.00 0.00 45.03 25.57 64.44 0.20 0.20 0.20

Muestra las distintas estadsticas para las CPU del sistema. Las opciones P ALL ordena al comando desplegar las estadsticas de todas las CPU, no solamente de una especfica. Los parmetros 5 2 ordenan al comando ejecutarse cada 5 segundos y durante 2 veces. El output de arriba muestra las mtricas para todas las primeras CPU (agrupadas) y para cada CPU individualmente. Finalmente, el porcentaje para todas las CPU se muestra al final. Veamos el significado de los valores de las columnas: %user Indica el porcentaje de procesamiento para la CPU consume por proceso de usuario. Los procesos de usuarios son procesos que no son kernel utilizados para aplicaciones como las de la base de datos de Oracle. En este

output de ejemplo, el porcentaje de CPU de usuario es muy pequeo.

%nice

Indica el porcentaje de CPU cuando un proceso ha bajado su categora por el comando nice. El comando nice ha sido descripto en una entrega anterior. En resumen, el comando nice cambia la prioridad de un proceso.

%system Indica el porcentaje de CPU utilizado por los procesos kernel

%iowait Muestra el porcentaje de tiempo de CPU utilizado por la espera de I/O

%irq

Indica el porcentaje de CPU utilizado para manejar las interrupciones del sistema

%soft

Indica el porcentaje utilizado para las interrupciones de software

%idle

Muestra el tiempo de inactividad de la CPU

%intr/s

Muestra la cantidad total de interrupciones que la CPU recibe por segundo

Usted podra preguntarse cul es el propsito del comando mpstat cuando usted ya posee vmstat, descripto anteriormente. Existe una gran diferencia: mpstat puede mostrar las estadsticas por procesador, mientras que vmstat ofrece una visin consolidada de todos los procesadores. Por lo tanto, es posible que una aplicacin escasamente escrita que no utilice una arquitectura de mltiples threads se ejecute sobre un motor de mltiples procesadores pero que no utilice todos los procesadores. Como resultado, se produce la sobrecarga de una CPU mientras que las dems permanecen libres. Usted puede diagnosticar fcilmente estas clases de problemas por medio de mpstat.

Para Usuarios de Oracle


De modo similar a vmstat, el comando mpstat tambin produce estadsticas relacionadas con la CPU de manera que todos los debates relacionados con los problemas de CPU tambin se aplican a mpstat. Cuando usted observa un bajo nivel de %idle, sabe que est en presencia de una insuficiencia de CPU. Cuando observa una cantidad de %iowait mayor, usted sabe que existe algn

problema con el subsistema I/O en torno a la carga actual. Esta informacin resulta til para resolver rpidamente los problemas de desempeo de la base de datos de Oracle.

iostat
Una parte clave de la evaluacin de desempeo es el desempeo del disco. El comando iostat brinda las mtricas de desempeo de las interfaces de almacenamiento.
# iostat Linux 2.6.9-55.0.9.ELlargesmp (prolin3) avg-cpu: %user 15.71 %nice 0.00 %sys %iowait 1.07 3.30 Blk_read/s 34.82 0.21 34.61 13.32 13.32 0.00 5.94 0.00 38.19 0.00 34.90 0.00 12/27/2008 %idle 79.91 Blk_read Blk_wrtn 307949274 1155708619 1897036 3659 306051650 1155700792 117780303 174676304 117780007 174676288 184 0 52490104 166623534 184 0 337697496 101649200 184 0 308638992 60159368 184 0

Device: tps cciss/c0d0 4.85 cciss/c0d0p1 0.08 cciss/c0d0p2 18.11 cciss/c0d1 0.96 cciss/c0d1p1 2.67 sda 0.00 sdb 1.03 sdc 0.00 sdd 1.74 sde 0.00 sdf 1.51 sdg 0.00 ... and so on ...

Blk_wrtn/s 130.69 0.00 130.69 19.75 19.75 0.00 18.84 0.00 11.49 0.00 6.80 0.00

La primera parte del output muestra las mtricas como el espacio de CPU libre y las esperas I/O como ha podido ver en el comando mpstat. La prxima parte del output muestra mtricas muy importantes para cada uno de los dispositivos de disco en el sistema. Veamos lo que significan estas columnas: Device Nombre del dispositivo tps Cantidad de transferencias por segundo, es decir, cantidad de operaciones I/O por segundo. Nota: esta es solamente la cantidad de operaciones I/O; cada operacin podra ser extensa o pequea.

Blk_rea Cantidad de bloques ledos desde este dispositivo por segundo. d/s Generalmente los bloques tienen un tamao de 512 bytes. Este es el mejor valor de utilizacin de disco. Blk_wrt Cantidad de bloques escritos en este dispositivo por segundo n/s Blk_rea Cantidad de bloques ledos desde este dispositivo al momento. Preste d atencin; no se refiere a lo que est sucediendo en ese momento. Estos bloques ya fueron ledos desde el dispositivo. Es posible que no se est leyendo nada en ese momento. Observe esto por un rato para ver si se producen cambios. Blk_wrt Cantidad de bloques escritos en el dispositivo

n En un sistema con muchos dispositivos, el output podra aparecer a travs de varias pantallas haciendo que las cosas sean un poco difcil de examinar, especialmente si busca un dispositivo especfico. Usted puede obtener las mtricas para un dispositivo especfico solamente utilizando ese dispositivo como parmetro.
# iostat sdaj Linux 2.6.9-55.0.9.ELlargesmp (prolin3) avg-cpu: Device: sdaj %user 15.71 %nice 0.00 tps 1.58 %sys %iowait 1.07 3.30 Blk_read/s 31.93 12/27/2008 %idle 79.91 Blk_read 282355456 Blk_wrtn 94172401

Blk_wrtn/s 10.65

Las mtricas de CPU mostradas al comienzo pueden no ser demasiado tiles. Para eliminar las estadsticas relacionadas con la CPU en el comienzo del output, utilice la opcin -d. Usted puede establecer parmetros adicionales al final para que iostat despliegue las estadsticas de dispositivo en intervalos regulares. Para obtener las estadsticas para este dispositivo cada 5 segundos durante 10 veces, emita lo siguiente:
# iostat -d sdaj 5 10 You can display the stats in kilobytes instead of just bytes using the -k option: # iostat -k -d sdaj Linux 2.6.9-55.0.9.ELlargesmp (prolin3) Device: sdaj tps 1.58 kB_read/s 15.96 12/27/2008 kB_wrtn/s 5.32 kB_read 141176880 kB_wrtn 47085232

A pesar de que el output de arriba puede ser til, an queda demasiada informacin que no est lista para ser desplegada. Por ejemplo, una de las causas de los problemas de disco es el tiempo de servicio de disco, es decir, la rapidez con la que el disco obtiene los datos para el proceso que los pide. Para alcanzar ese nivel de mtricas, debemos obtener las estadsticas extendidas en el disco, utilizando la opcin -x.
# iostat -x sdaj Linux 2.6.9-55.0.9.ELlargesmp (prolin3) avg-cpu: %user 15.71 %nice 0.00 %sys %iowait 1.07 3.30 w/s 0.51 12/27/2008 %idle 79.91 wsec/s 10.65 rkB/s 15.96 wkB/s avgrq-sz 5.32 27.01

Device: rrqm/s wrqm/s r/s avgqu-sz await svctm %util sdaj 0.00 0.00 1.07 0.01 6.26 6.00 0.95

rsec/s 31.93

Veamos el significado de las columnas: Device rrqm/s Nombre del dispositivo Cantidad de solicitudes de lectura fusionas por segundo. Las solicitudes de disco que se colocan en cola. Cuando es posible, kernel intenta fusionar varias solicitudes en una. Esta mtrica mide las transferencias de

fusin de las solicitudes de lectura. wrqm/s Similar a la de lectura, esta es la cantidad de solicitudes de escritura fusionadas. Cantidad de solicitudes de lectura por segundo emitidas en este dispositivo Del mismo modo, se refiere a la cantidad de solicitudes de escritura por segundo Cantidad de sectores ledos desde este dispositivo por segundo Cantidad de sectores escritos en el dispositivo por segundo Datos ledos por segundo desde este dispositivo, en kilobytes por segundo Datos escritos en este dispositivo, en kb/s Tamao promedio de solicitudes de lectura, en sectores

r/s

w/s

rsec/s wsec/s rkB/s wkB/s avgrq-sz

avgqu-sz Longitud promedio de la cola de solicitudes para este dispositivo await Promedio de tiempo transcurrido (en milisegundos) para el dispositivo de solicitudes I/O. Esto es la suma del tiempo de servicio + el tiempo de espera en cola. Promedio del tiempo de servicio (en milisegundos) del dispositivo Utilizacin de ancho de banda del dispositivo. Si es cercano al 100%, el dispositivo est saturado.

svctm %util

Ahora bien, tanta informacin puede presentar un desafo sobre cmo utilizarla de manera efectiva. La prxima seccin muestra cmo utilizar el output.

Cmo Utilizarlo
Puede utilizar una combinacin de comandos para obtener informacin del output. Recuerde, los discos podran demorar en obtener la solicitud de los procesos. La cantidad de tiempo que le lleva al disco obtener los datos desde el disco y hasta la cola se denomina tiempo de servicio. Si desea ver los discos con los tiempos de servicio ms elevados, usted debe emitir:
# iostat -x | sort -nrk13 sdat 0.00 0.00 0.00 0.00 64.06 64.05 0.00 sdv 0.00 0.00 0.00 0.00 18.03 17.64 0.00 sdak 0.00 0.00 0.00 0.00 17.00 17.00 0.24 sdm 0.00 0.00 0.00 0.00 0.00 0.14 0.19 0.00 0.00 0.00 0.01 0.00 0.00 1.11 1.52 0.00 0.00 0.00 0.01 0.00 0.00 0.55 0.76 18.80 17.16 8.02 8.06

0.00 16.78 16.78 ... and so on ...

0.32

Esto muestra que el sdat de disco tiene el tiempo de servicio ms elevado (64.05 ms). Por qu es tan alto? Puede haber varias posibilidades pero posiblemente stas sean las tres ms importantes: 1. El disco contiene muchas solicitudes, por lo tanto el tiempo de servicio promedio es alto 2. El disco est utilizando el mximo de ancho de banda. 3. El disco es inherentemente lento. Al observar el output vemos que reads/sec y writes/sec es de 0.00 (no sucede prcticamente nada), por lo tanto podemos excluir la #1. La utilizacin tambin es de 0.00% (la ltima columna), por lo tanto podemos excluir la #2. As queda la #3. No obstante, antes de llegar a la conclusin de que el disco es inherentemente lento, necesitamos observar aquel disco un poco ms de cerca. Podemos examinar ese disco solo cada 5 segundos, unas 10 veces.
# iostat -x sdat 5 10

Si el output muestra el mismo porcentaje de tiempo de servicio, los mismos ndices de lectura, podemos concluir que el #3 es el factor ms probable. Si ellos cambian, entonces podemos obtener ms claves para comprender por qu el tiempo de servicio es alto para este dispositivo. De manera similar, podemos buscar en la columna de ndice de lectura para desplegar el disco bajo ndices constantes de lectura.
# iostat -x | sort -nrk6 sdj 0.00 0.00 1.86 0.03 10.69 9.99 2.46 sdah 0.00 0.00 1.66 0.02 10.69 10.00 2.18 sdd 0.00 0.00 1.26 0.01 3.57 3.52 0.61 ... and so on ... 0.61 0.52 0.48 56.78 50.54 38.18 12.80 10.94 11.49 28.39 25.27 19.09 6.40 5.47 5.75 28.22 28.17 28.48

La informacin lo ayuda a localizar un disco que est activoes decir, sujeto a muchas lecturas o escrituras. Si el disco se encuentra verdaderamente activo, usted debera identificar la razn de ello; tal vez un filesystem definido en el disco est sujeto a demasiadas lecturas. Si ese es el caso, usted debera considerar el hecho de descartar filesystem de los discos para distribuir la carga, minimizando as la posibilidad de que un disco especfico est activo.

sar
De los debates anteriores, surge un thread comn: Obtener mtricas en tiempo real no es lo ms importante; la tendencia histrica tambin es importante. Adems, tenga en cuenta esta situacin: cuntas veces alguien plantea un problema de desempeo y cuando usted comienza a investigar, todo vuelve a la normalidad? Los problemas de desempeo que han ocurrido en el pasado son difciles de diagnosticar si carece de datos especficos. Finalmente, usted decidir examinar el desempeo de los datos en los ltimos das para obtener algunos parmetros o para realizar algunos ajustes. El comando sar cumple con ese objetivo. sar significa System Activity Recorder, y registra las mtricas de los componentes clave del sistema LinuxCPU, Memoria, Discos, Redes, etc.en un lugar especial: directory /var/log/sa. Los datos se graban cada da en un archivo denominado sa<nn> en donde <nn> es el da de dos dgitos del mes. Por ejemplo, el archivo sa27 contiene los datos para el da 27 de ese mes. Estos datos pueden ser consultados por el comando sar.

La manera ms sencilla de utilizar sar es sin ningn argumento ni opcin. Por ejemplo:
# sar Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12:00:01 AM 12:10:01 AM 12:20:01 AM 12:30:01 AM 12:40:01 AM ... and so on ... CPU all all all all %user 14.99 14.97 15.80 10.26 %nice 0.00 0.00 0.00 0.00 12/27/2008 %system 1.27 1.20 1.39 1.25 %iowait 2.85 2.70 3.00 3.55 %idle 80.89 81.13 79.81 84.93

El output muestra las mtricas relacionadas con la CPU recogidas en intervalos de 10 minutos. Las columnas significan: CPU %user Identificador de CPU; all significa todas las CPU Porcentaje de CPU utilizado para los procesos de usuarios. Los procesos de Oracle se presentan en esta categora. El % de utilizacin de CPU mientras se ejecuta una prioridad nice

%nice

%system El % de CPU que ejecuta los procesos del sistema %iowait El % de CPU en espera para I/O %idle El % de CPU inactiva en espera de trabajos

En el output anterior, podemos ver que el sistema se encuentra bien balanceado; en realidad, por debajo del nivel infrautilizado (como se muestra en el alto grado de inactividad). Profundizando ms el output podemos ver lo siguiente:
... continued from above ... 03:00:01 AM CPU %user 03:10:01 AM all 44.99 03:20:01 AM all 44.97 03:30:01 AM all 45.80 03:40:01 AM all 40.26 ... and so on ... %nice 0.00 0.00 0.00 0.00 %system 1.27 1.20 1.39 1.25 %iowait 2.85 2.70 3.00 3.55 %idle 40.89 41.13 39.81 44.93

Esto nos muestra otra historia: el sistema fue cargado por algunos procesos de usuarios entre las 3:00 y las 3:40. Tal vez se estaba ejecutando una consulta extensa; o tal vez se estaba ejecutando un trabajo RMAN, consumiendo as toda esa CPU. Aqu es en donde el comando sar es til despliega los datos registrados que muestran informacin de un momento especfico, no del momento actual. Esto es exactamente lo que usted necesita para cumplir con los tres objetivos detallados al comienzo de esta seccin: obtener datos histricos, encontrar patrones de uso y comprender las tendencias. Si usted desea ver datos sar de un da especfico, simplemente abra sar con ese nombre de archivo, utilizando la opcin -f como se muestra abajo (para abrir los datos del da 26)
# sar -f /var/log/sa/sa26

Tambin se pueden desplegar datos en tiempo real, similar a vmstat o mpstat. Para obtener los datos cada 5 segundos, durante 10 veces, utilice:
# sar 5 10

Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 01:39:16 01:39:21 01:39:26 01:39:31 01:39:36 and so PM CPU PM all PM all PM all PM all on 10 times %user 20.32 23.28 29.45 16.32 %nice 0.00 0.00 0.00 0.00

12/27/2008 %system 0.18 0.20 0.27 0.20 %iowait 1.00 0.45 1.45 1.55 %idle 78.50 76.08 68.83 81.93

Not el valor all debajo el ttulo CPU? Esto significa que las estadsticas fueron cargadas para todas las CPU. Para un sistema de procesador nico, esto est bien; pero en sistemas con mltiples procesadores usted desea obtener las estadsticas tanto para cada CPU individual, como para el conjunto. La opcin -P ALL cumple con esto.
#sar -P ALL 2 2 Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 01:45:12 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:14 01:45:16 01:45:16 01:45:16 01:45:16 01:45:16 01:45:16 01:45:16 01:45:16 01:45:16 Average: Average: Average: Average: Average: Average: Average: Average: Average: Average: PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM PM CPU all 0 1 2 3 4 5 6 7 CPU all 0 1 2 3 4 5 6 7 CPU all 0 1 2 3 4 5 6 7 %user 22.31 8.00 99.00 6.03 3.50 4.50 54.50 2.96 0.50 %user 18.98 1.00 37.00 13.50 0.00 0.00 99.00 0.50 0.00 %user 20.64 4.50 68.00 9.77 1.75 2.25 76.81 1.74 0.25 %nice 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 %nice 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 %nice 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12/27/2008 %system 10.19 24.00 1.00 18.59 8.50 14.00 6.00 7.39 2.00 %system 7.05 31.00 5.50 19.00 0.00 0.50 1.00 0.00 0.00 %system 8.62 27.50 3.25 18.80 4.25 7.25 3.49 3.73 1.00 %iowait 0.69 0.00 0.00 0.50 0.00 0.00 0.00 2.96 2.00 %iowait 0.19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.49 %iowait 0.44 0.00 0.00 0.25 0.00 0.00 0.00 1.49 1.75 %idle 66.81 68.00 0.00 74.87 88.00 81.50 39.50 86.70 95.50 %idle 73.78 68.00 57.50 67.50 100.00 99.50 0.00 99.50 98.51 %idle 70.30 68.00 28.75 71.18 94.00 90.50 19.70 93.03 97.01

Esto muestra el identificador de CPU (comenzando con 0) y las estadsticas para cada uno. Al final del output usted ver el promedio de ejecuciones de cada CPU. El comando sar no solo es para estadsticas relacionadas con la CPU. Tambin es til obtener las estadsticas relacionadas con la memoria. La opcin -r muestra la utilizacin de memoria extensiva.
# sar -r Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12:00:01 AM kbmemfree kbmemused kbswpused %swpused kbswpcad 12:10:01 AM 712264 32178920 12/27/2008 kbcached kbswpfree 25430452 16681300

%memused kbbuffers 97.83 2923884

95908 12:20:01 95908 12:30:01 95908 12:40:01 95908 12:50:01 95908

380 32232096 0.57 380 AM 651416 32239768 0.57 380 AM 651840 32239344 0.57 380 AM 700696 32190488 0.57 380 AM 659088

0.57

98.00 98.02 98.02 97.87

2923884 2923920 2923920 2923920

25430968 25431448 25430416 25430416

16681300 16681300 16681300 16681300

Veamos el significado de cada columna: kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad Memoria libre disponible en KB en ese momento Memoria utilizada en KB en ese momento % de memoria utilizada % de memoria utilizado como buffers % de memoria utilizado como cach Espacio de swap libre en KB en ese momento Espacio de swap utilizado en KB en ese momento % de swap utilizado en ese momento Swap en cach en KB en ese momento

Al final del output, usted ver la cifra promedio para el perodo. Tambin puede obtener las estadsticas especficas relacionadas con la memoria. La opcin -B muestra la actividad relacionada con la paginacin.
# sar -B Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12:00:01 AM pgpgin/s pgpgout/s 12:10:01 AM 134.43 256.63 12:20:01 AM 122.05 181.48 12:30:01 AM 129.05 253.53 ... and so on ... fault/s 8716.33 8652.17 8347.93 12/27/2008 majflt/s 0.00 0.00 0.00

La columna muestra las mtricas en ese momento, no las actuales. pgpgin/s Cantidad de pginas en la memoria desde el disco, por segundo

pgpgout/s Cantidad de pginas fuera del disco, desde la memoria, por segundo fault/s majflt/s Fallos de pgina por segundos Principales fallos de pgina por segundo

Para obtener un output similar para la actividad relacionada con el swapping, usted puede utilizar la opcin -W.
# sar -W Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12:00:01 AM pswpin/s pswpout/s 12:10:01 AM 0.00 0.00 12:20:01 AM 0.00 0.00 12:30:01 AM 0.00 0.00 12:40:01 AM 0.00 0.00 ... and so on ... 12/27/2008

Las columnas probablemente se explican por si mismas; pero aqu se detalla la descripcin de cada una: pswpin/s Pginas de memoria que vuelven a intercambiarse en la memoria desde el disco, por segundo pswpout/ Pginas de la memoria intercambiadas al disco desde la memoria, por s segundo Si usted observa que el nivel de swapping es demasiado elevado, quizs podra estar quedndose sin memoria. No se trata de una conclusin anticipada, sino de una posibilidad. Para obtener las estadsticas de los dispositivos de disco, utilice la opcin -d:
# sar -d Linux 2.6.9-55.0.9.ELlargesmp (prolin3) 12:00:01 AM DEV 12:10:01 AM dev1-0 12:10:01 AM dev1-1 12:10:01 AM dev1-2 12:10:01 AM dev1-3 12:10:01 AM dev1-4 ... and so on ... Average: dev8-48 Average: dev8-64 Average: dev8-80 Average: dev8-96 Average: dev8-112 tps 0.00 5.12 3.04 0.18 1.67 4.48 0.00 2.00 0.00 2.22 rd_sec/s 0.00 0.00 42.47 1.68 18.94 100.64 0.00 47.82 0.00 49.22 12/27/2008 wr_sec/s 0.00 219.61 22.20 1.41 15.19 22.15 0.00 5.37 0.00 12.08

Aqu est la descripcin de las columnas. Nuevamente, ellas muestran las mtricas en ese momento. tps Transferencias por segundo. El trmino transferencias se refiere a las operaciones I/O. Nota: es solamente la cantidad de operaciones; cada operacin puede ser extensa o pequea. Por lo tanto, esto, por s mismo, no es la historia completa.

rd_se Cantidad de sectores ledos desde el disco por Segundo c/s

wr_s Cantidad de sectores escritos en el disco por Segundo ec/s Para obtener el historial de estadsticas de red, usted puede utilizar la opcin -n:
# sar -n DEV | more Linux 2.6.9-42.0.3.ELlargesmp (prolin3) 12:00:01 txcmp/s 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 12:10:01 0.00 and so Average: 0.00 Average: 0.00 Average: 0.00 Average: 0.00 AM IFACE rxmcst/s AM lo 0.00 AM eth0 0.99 AM eth1 0.00 AM eth2 0.00 AM eth3 0.00 AM eth4 0.99 AM eth5 0.00 AM eth6 0.00 AM eth7 0.00 AM bond0 1.98 on bond0 1.98 eth8 0.00 eth9 0.00 sit0 0.00 rxpck/s 4.54 2.70 0.00 0.00 0.00 143.79 0.00 0.00 0.00 146.49 128.73 0.00 3.52 0.00 txpck/s 4.54 0.00 0.00 0.00 0.00 141.14 0.00 0.00 0.00 141.14 121.81 0.00 6.74 0.00 12/27/2008 rxbyt/s 782.08 243.24 0.00 0.00 0.00 73032.72 0.00 0.00 0.00 73275.96 85529.98 0.00 251.63 0.00 txbyt/s 782.08 0.00 0.00 0.00 0.00 38273.59 0.00 0.00 0.00 38273.59 27838.44 0.00 10179.83 0.00 rxcmp/s 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

En resumen, usted tiene estas opciones para el comando sar a fin de obtener las mtricas para los componentes: Utilice esta opcin para obtener estadsticas sobre: -P CPU(s) Especfica(s) -d Discos -r Memoria -B Paginacin -W Intercambio -n Red

Qu sucede si usted desea tener todas las estadsticas disponibles en un solo output? En lugar de invocar sar con todas estas opciones, usted puede utilizar la opcin -A que muestra todas las estadsticas almacenadas en los archivos sar.

Conclusin
Para resumir, al utilizar estos grupos de comandos limitados usted puede manejar la mayora de las tareas que intervienen en la administracin de recursos en un entorno Linux. Sugiero que los practique en su entorno a fin de familiarizarse con estos comandos y con las opciones aqu descriptas. En las prximas entregas, aprender cmo monitorear y administrar la red. Tambin aprender varios comandos que lo ayudarn a administrar un entorno Linux: para descubrir quin se ha registrado para establecer procesos shell profile, realizar backups utilizando cpio y tar, entre otras cosas.

Gua para Maestra Avanzada en Comandos Linux, Parte 4: Administracin del Entorno Linux
por Arup Nanda Publicado en mayo de 2009 En esta serie, sepa cmo administrar el entorno Linux de manera efectiva a travs de estos comandos ampliamente utilizados.

ifconfig
El comando ifconfig muestra los detalles de la/s interfaz/interfaces de red definidas en el sistema. La opcin ms comn es -a , lo cual permite mostrar todas las interfaces.
# ifconfig -a

El nombre usual de la interfaz de red Ethernet primaria es eth0. Para encontrar los detalles de una interfaz especfica, por ej., eth0, puede utilizar:
# ifconfig eth0

A continuacin se muestra el output con su respectiva explicacin:

stas son algunas partes claves del output: Link encap: corresponde al tipo de medio de hardware fsico soportado por esta interfaz (Ethernet, en este caso) HWaddr: es el identificador exclusivo de la tarjeta NIC. Cada tarjeta NIC tiene un identificador exclusivo asignado por el fabricante, denominado MAC o direccin MAC. La direccin de IP se adjunta al MAC del servidor. Si esta direccin de IP cambia, o esta tarjeta se mueve desde este servidor a otro, el MAC contina siendo el mismo. Mask: corresponde a la mscara de red inet addr: es la direccin de IP que se adjunta a la interfaz RX packets: se refiere a la cantidad de paquetes recibidos por esta interfaz TX packets: se refiere a la cantidad de paquetes enviados errors: es la cantidad de errores de envo y recepcin El comando no se utiliza solamente para controlar los parmetros; tambin se utiliza para configurar y administrar la interfaz. A continuacin presentamos un breve listado de los parmetros y opciones de este comando: up/down activa o desactiva una interfaz especfica. Usted puede utilizar el parmetro down para desconectar una interfaz (o desactivarla):
# ifconfig eth0 down

De manera similar, para conectarla (o activarla), usted debera utilizar:


# ifconfig eth0 up

media establece el tipo de medio Ethernet como 10baseT, 10 Base 2, etc. Los valores comunes para el parmetro de medios son 10base2, 10baseT, y AUI. Si usted desea que Linux detecte el medio automticamente, puede especificar auto, como se muestra a continuacin:
# ifconfig eth0 media auto

add establece una direccin de IP especfica para la interfaz. Para determinar una direccin de IP 192.168.1.101 para la interfaz eth0, usted debera emitir lo siguiente:
# ifconfig eth0 add 192.168.1.101

netmask determina el parmetro de mscara de red de la interfaz. A continuacin se presenta un ejemplo en dnde puede establecer la mscara de red de la interfaz eth0 en 255.255.255.0

# ifconfig eth0 netmask

255.255.255.0

En un entorno Oracle Real Application Clusters usted debe establecer la mscara de red en cierto modo, utilizando este comando. En algunas configuraciones avanzadas, usted puede cambiar la direccin de MAC asignada a la interfaz de red. El parmetro hw lo hace posible. El formato general es:
ifconfig <Interface> hw <TypeOfInterface> <MAC>

<TypeOfInterface> muestra el tipo de interfaz, por ej., ether, para Ethernet. Aqu se muestra cmo la direccin MAC ha cambiado para eth0 a 12.34.56.78.90.12 (Nota: la direccin MAC que aqu se muestra es ficticia. En caso de ser igual a otra MAC real, es pura coincidencia):
# ifconfig eth0 hw ether 12.34.56.78.90.12

Esto es til cuando usted agrega una nueva tarjeta (con una nueva direccin MAC) pero no desea cambiar la configuracin relacionada con Linux como por ejemplo las interfaces de red.

Para Usuarios de Oracle


El comando, junto con nestat descripto anteriormente, es uno de los comandos ms frecuentemente utilizados para administrar Oracle RAC. El desempeo de Oracle RAC depende en gran medida de la interconexin utilizada entre los nodos del cluster. Si la interconexin se satura (es decir, que no puede soportar ms trfico adicional) o falla, usted podr observar una disminucin de desempeo. Lo mejor en este caso es observar el output ifconfig para detectar las fallas. Este es un ejemplo tpico:
# ifconfig eth9 eth9 Link encap:Ethernet HWaddr 00:1C:23:CE:6F:82 inet addr:10.14.104.31 Bcast:10.14.104.255 Mask:255.255.255.0 inet6 addr: fe80::21c:23ff:fece:6f82/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1204285416 errors:0 dropped:560923 overruns:0 frame:0 TX packets:587443664 errors:0 dropped:623409 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1670104239570 (1.5 TiB) TX bytes:42726010594 (39.7 GiB) Interrupt:169 Memory:f8000000-f8012100

Observe el texto resaltado en rojo. El conteo arrojado es extremadamente elevado; la cantidad ideal debera ser 0 o cercana a 0. Una cantidad mayor a medio milln implicara una interconexin defectuosa que rechaza los paquetes, provocando que la interconexin los reenvelo cual sera clave para el diagnstico de problemas.

netstat
El estado input y output a travs de una interfaz de red se evala por medio del comando netstat. Este comando puede brindar informacin completa sobre el desempeo de la interfaz de red, incluso por debajo del nivel de socket. Aqu vemos un ejemplo:
# netstat Active Internet connections (w/o Proto Recv-Q Send-Q Local Address tcp 0 0 prolin1:31027 tcp 4 0 prolin1l:1521 tcp 0 0 prolin1l:1522 tcp 0 0 prolin1l:3938 tcp 0 0 prolin1l:1521 and so on servers) Foreign Address prolin1:5500 applin1:40205 prolin1:39957 prolin1:31017 prolin1:21545 State TIME_WAIT ESTABLISHED ESTABLISHED TIME_WAIT ESTABLISHED

El output de arriba muestra todos los sockets abiertos. En trminos ms simples, un socket es similar a una conexin entre dos procesos. [Por favor tenga en cuanta que, estrictamente hablando, los conceptos sockets y conexiones son tcnicamente diferentes. Un socket podra existir sin una conexin. De todas maneras, el debate entre sockets y conexiones escapa del alcance de este artculo. Por eso simplemente me limit a presentar el concepto de una manera fcil de comprender]. Naturalmente, una conexin debe tener un origen y un destino, denominados direccin local y remota. Los puntos de destino podran estar en el mismo servidor o en servidores distintos. En muchos casos, los programas se conectan al mismo servidor. Por ejemplo, si dos procesos se comunican entre ellos, la direccin local y remota ser la misma, como puede observar en la primera lnea tanto la direccin local como la remota corresponden al servidor prolin1. No obstante, los procesos se comunican a travs de un puerto, que es diferente. El puerto se muestra luego del nombre de host, despus de los dos puntos :. El programa del usuario enva los datos que deben remitirse a travs del socket a una cola y el receptor los lee desde la cola de destino remoto. stas son las columnas del output: 1. la columna del extremo izquierdo denominada Proto muestra el tipo de conexin tcp en este caso. 2. La columna Recv-Q muestra los bytes de datos en cola a ser enviados al programa del usuario que estableci la conexin. Este valor debera ser un valor cercano a 0, preferentemente. En los servidores ocupados este valor ser mayor a 0 pero no debera ser demasiado alto. Una cantidad mayor no podra significar mucho, a menos que observe una cantidad elevada en la columna Send-Q, descripta a continuacin. 3. La columna Send-Q denota los bytes en cola a ser enviados al programa remoto, es decir, el programa remoto an no ha confirmado su recepcin. Esta cantidad debera ser cercana a 0. Una cantidad mayor podra indicar un cuello de botella en la red. 4. Local Address se refiere al origen de la conexin y el nmero de puerto del programa. 5. Foreign Address hace referencia al host de destino y el nmero de puerto. En la primera lnea, tanto el origen como el destino corresponden al mismo host: prolin1. La conexin se encuentra simplemente en espera. La segunda lnea muestra una conexin establecida entre el puerto 1521 de proiln1 hasta el puerto 40205 del host applin1. Lo ms probable es que una conexin de Oracle venga del applin1 cliente hasta el servidor prolin1. El listener de Oracle en prolin1 se ejecuta en el puerto 1521; de manera que el puerto de origen es 1521. En esta conexin, el servidor enva los datos solicitados al cliente. 6. La columna State muestra el estado de la conexin. Aqu vemos algunos valores comunes. ESTABLISHED implica que la conexin ha sido establecida. No significa que los datos fluyen entre los puntos de destino; simplemente que se ha establecido una comunicacin entre ellos. CLOSED la conexin se ha cerrado, es decir, no est siendo utilizada. TIME_WAIT la conexin se est cerrando pero an hay paquetes pendientes en la red. CLOSE_WAIT el destino remoto ha sido cerrado y se ha solicitado el cierre de conexin. Pues bien, a partir de las direcciones locales (local) y externas (foreign), y especialmente a partir de los nmeros de puertos, probablemente podamos deducir que las conexiones son conexiones relacionadas a Oracle, pero no sera mejor estar seguros? Por supuesto. La opcin -p tambin muestra la informacin del proceso:
# netstat -p Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 prolin1:1521 prolin1:33303 ESTABLISHED 1327/oraclePROPRD1

tcp 0 0 13827/oraclePROPRD1 tcp 0 0 32695/tnslsnr tcp 0 0 15251/oracle+ASM tcp 0 0 32695/tnslsnr

prolin1:1521 prolin1:1521 prolin1:1521 prolin1:1521

applin1:51324 prolin1:33298 prolin1:32544 prolin1:33331

ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED

Esto muestra claramente el IP del proceso y el nombre del proceso en la ltima columna, la cual confirma que corresponden a procesos del servidor de Oracle, al proceso listener, y a los procesos del servidor ASM. El comando netstat puede presentar varias opciones y parmetros. A continuacin se detallan los ms importantes: Para ver las estadsticas de red de las distintas interfaces, utilice la opcin -i.
# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 6860659 0 0 0 2055833 0 0 0 BMRU eth8 1500 0 2345 0 0 0 833 0 0 0 BMRU lo 16436 0 14449079 0 0 0 14449079 0 0 0 LRU

Esto muestra las distintas interfaces presentes en el servidor (eth0, eth8, etc.) y las mtricas relacionadas con la interfaz. RX-OK muestra la cantidad de paquetes que son exitosamente enviados (para esta interfaz) RX-ERR muestra la cantidad de errores RX-DRP muestra los paquetes rechazados que debieron ser reenviados (ya sea con xito o no) RX-OVR muestra un exceso de paquetes El prximo grupo de columnas (TX-OK, TX-ERR, etc.) muestra las stats (estadsticas) correspondientes a los datos enviados. La columna Flg expresa un valor compuesto de la propiedad de la interfaz. Cada letra indica una propiedad especfica presente. A continuacin se detalla el significado de las letras. B Broadcasting (Difusin) M Multicast (Multidifusin) R Running (En ejecucin) U Up (Activado) O ARP Off (ARP desactivado) P Point to Point Connection (Conexin Punto a Punto) L Loopback (Circuito cerrado) m Master s - Slave Usted pude utilizar la opcin --interface (nota: hay dos guiones, no uno) para desplegar una interfaz especfica.
# netstat --interface=eth0 Kernel Interface table

Iface OVR Flg eth0 0 BMsRU

MTU Met 1500

RX-OK

RX-ERR RX-DRP RX-OVR 0 0

TX-OK TX-ERR 0

TX-DRP TX0

0 277903459

0 170897632

De ms est decir que, el output es amplio y un poco difcil de captar de un solo intento. Si usted est realizando una comparacin entre interfaces, sera lgico tener un output tabular. Si desea examinar los valores en un formato ms legible, utilice la opcin -e para producir un output extendido:
# netstat -i -e Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:13:72:CC:EB:00 inet addr:10.14.106.0 Bcast:10.14.107.255 Mask:255.255.252.0 inet6 addr: fe80::213:72ff:fecc:eb00/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6861068 errors:0 dropped:0 overruns:0 frame:0 TX packets:2055956 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3574788558 (3.3 GiB) TX bytes:401608995 (383.0 MiB) Interrupt:169

El output le resulta conocido? Debera ser as ya que es el mismo que el output de ifconfig. Si prefiere que el output despliegue las direcciones de IP en lugar de los nombres del host, utilice la opcin -n. La opcin -s muestra el resumen de estadsticas de cada protocolo, en vez de mostrar los detalles de cada conexin. Esto puede combinarse con el flag especfico del protocolo, Por ejemplo, -u muestra las estadsticas relacionadas con el protocolo UDP.
# netstat -s -u Udp: 12764104 packets received 600849 packets to unknown port received. 0 packet receive errors 13455783 packets sent

Del mismo modo, para ver las stats de tcp, utilice -t y para raw, -r. Una de las opciones realmente tiles es desplegar la tabla de ruta, utilizando la opcin -r.
# netstat -r Kernel IP routing table Destination Gateway 10.20.191.0 * 172.22.13.0 * 169.254.0.0 * default 10.20.191.1 Genmask 255.255.255.128 255.255.255.0 255.255.0.0 0.0.0.0 Flags U U U UG MSS 0 0 0 0 Window 0 0 0 0 irtt 0 0 0 0 Iface bond0 eth9 eth9 bond0

La segunda columna del output netstat Gatewaymuestra el gateway de asignacin de ruta. Si no se utiliza ningn gateway, aparece un asterisco. La tercera columnaGenmaskmuestra la generalidad del enrutamiento, es decir, la mscara de red para esta ruta. Al dar una direccin de IP para encontrar una ruta adecuada, el kernel sigue el proceso de cada una de las entradas de enrutamiento, tomando el nivel de bits AND de la direccin y la mscara de red antes de compararlo con el destino de ruta. La cuarta columna, denominada Flags, despliega las siguientes etiquetas que describen la ruta: G significa que la ruta utiliza un gateway.

U implica que la interfaz a ser utilizada se encuentra activa (disponible). H implica que solo puede alcanzarse un nico host a travs de la ruta. Por ejemplo, el caso de la entrada de loopback (circuito cerrado) 127.0.0.1. D significa que esta ruta ha sido dinmicamente creada. ! significa que la ruta ha sido rechazada y se descartarn los datos. La siguientes tres columnas muestran los valores MSS, Window e irtt que se aplicarn a las conexiones TCP establecidas por medio de esta ruta. MSS representa la sigla Maximum Segment Size (Tamao de Segmento Mximo) es el tamao del datagrama ms amplio para realizar la transmisin a travs de esta ruta. Window se refiere a la cantidad mxima de datos que el sistema aceptar en modo single burst desde un host remoto y para esta ruta. irtt representa la sigla de Initial Round Trip Time (el Valor Inicial del Temporizador TCP). Es un poco difcil de explicar, pero lo har por separado. El protocolo TCP posee un control de fiabilidad incorporado. Si un paquete de datos falla durante la transmisin, ste es retransmitido. El protocolo lleva un registro de cunto tiempo tardan los datos en llegar a destino y en confirmarse su recepcin. Si la confirmacin no llega dentro de ese plazo de tiempo, el paquete es retransmitido. La cantidad de tiempo que el protocolo debe esperar antes de retransmitir los datos se establece solo una vez para la interfaz (la cual puede cambiarse) y ese valor es conocido como initial round trip time. Un valor de 0 implica que el valor por defecto es utilizado. Finalmente, el ltimo campo despliega la interfaz de red que utilizar esta ruta.

nslookup
Cada host accesible en una red debera tener una direccin de IP que le permita identificarse exclusivamente en la red. En Internet, que es una red extensa, las direcciones de IP permiten que las conexiones lleguen a los servidores que ejecutan sitios Web, por ej., www.oracle.com. Por lo tanto, cuando un host (como un cliente) desea conectarse a otro (como un servidor de base de datos) utilizando su nombre y no su direccin de IP cmo el browser cliente sabe a qu direccin conectarse? El mecanismo de traspaso del nombre de host a las direcciones de IP es conocido como resolucin de nombre. En el nivel ms rudimentario, el host tiene un archivo especial denominado hosts, que almacena la Direccin de IP Hostname. Este es un archivo de muestra:
# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.101 prolin1.proligence.com prolin1 192.168.1.102 prolin2.proligence.com prolin2

Esto muestra que el nombre del host prolin1.proligence.com se traduce a 192.168.1.101. La entrada especial con la direccin de IP 127.0.0.1 se denomina entrada loopback, la cual vuelve al servidor mismo por medio de una interfaz de red especial denominada lo (que se menciona anteriormente en los comandos ifconfig y netstat). Ahora bien, de todas formas, usted posiblemente no puede colocar todas las direcciones de IP del mundo en este archivo. Por lo que debera haber otro mecanismo que establezca la resolucin del nombre. Un servidor con un propsito especial denominado nameserver realiza esa funcin. Es como un directorio que provee su compaa telefnica; no su directorio personal. Pueden existir

varios nameservers disponibles dentro y fuera de la red privada. El host contacta a uno de estos nameservers primero, obtiene la direccin de IP del host de destino que desea contactar y luego intenta conectarse a la direccin de IP. Y cmo el host sabe cules son estos nameservers? Busca en un archivo especial llamado /etc/resolv.conf para obtener esa informacin. Aqu vemos un archivo resolv de ejemplo.
; generated by /sbin/dhclient-script search proligence.com nameserver 10.14.1.58 nameserver 10.14.1.59 nameserver 10.20.223.108

Pero cmo podemos estar seguros de que la resolucin del nombre est funcionando perfectamente para un nombre de host especfico? En otras palabras, usted quiere asegurarse de que cuando el sistema de Linux intente contactarse a un host denominado oracle.com, pueda encontrar la direccin de IP en el nameserver. El comando nslookup es til para eso. Vea a continuacin cmo utilizarlo:
# nslookup oracle.com Server: 10.14.1.58 Address: 10.14.1.58#53 ** server can't find oracle-site.com: NXDOMAIN

Analicemos el output. El output del Server (Servidor) es la direccin del nameserver. El nombre oracle.com establece la direccin de IP 141.146.8.66. El nombre fue definido por el nameserver prximo a la palabra Server en el output. Si usted escribe esta direccin de IP en un browserhttp://141.146.8.66 en lugar de http://oracle.com--el browser se dirigir al sitio oracle.com. Si usted cometi un error o busc un host equivocado:
# nslookup oracle-site.com Server: 10.14.1.58 Address: 10.14.1.58#53 ** server can't find oracle-site.com: NXDOMAIN

El mensaje es bastante claro: este host no existe.

dig
El comando nslookup ha cado en desuso. En su lugar debera utilizarse un comando nuevo y ms poderoso dig (domain information groper). En algunos servidores Linux ms nuevos, el comando nslookup podra no estar an disponible. Aqu vemos un ejemplo; para verificar la resolucin del nombre del host oracle.com, debera utilizar el siguiente comando:
# dig oracle.com ; <<>> DiG 9.2.4 <<>> oracle.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62512 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 8, ADDITIONAL: 8 ;; QUESTION SECTION: ;oracle.com. IN A

;; ANSWER SECTION: oracle.com. ;; AUTHORITY SECTION: oracle.com. oracle.com. oracle.com. oracle.com. oracle.com. oracle.com. oracle.com. oracle.com. ;; ADDITIONAL SECTION: ns1.oracle.com. ns4.oracle.com. u-ns1.oracle.com. u-ns2.oracle.com. u-ns3.oracle.com. u-ns4.oracle.com. u-ns5.oracle.com. u-ns6.oracle.com. ;; ;; ;; ;;

300 3230 3230 3230 3230 3230 3230 3230 3230 124934 124934 46043 46043 46043 46043 46043 46043

IN IN IN IN IN IN IN IN IN IN IN IN IN IN IN IN IN

A NS NS NS NS NS NS NS NS A A A A A A A A

141.146.8.66 ns1.oracle.com. ns4.oracle.com. u-ns1.oracle.com. u-ns2.oracle.com. u-ns3.oracle.com. u-ns4.oracle.com. u-ns5.oracle.com. u-ns6.oracle.com. 148.87.1.20 148.87.112.100 204.74.108.1 204.74.109.1 199.7.68.1 199.7.69.1 204.74.114.1 204.74.115.1

Query time: 97 msec SERVER: 10.14.1.58#53(10.14.1.58) WHEN: Mon Dec 29 22:05:56 2008 MSG SIZE rcvd: 328

Desde el output mammoth, se destacan varias cosas. Muestra que el comando ha enviado una consulta al nameserver y el host obtuvo una respuesta del nameserver. La resolucin del nombre tambin ha sido efectuada en otros nameservers como ns1.oracle.com. Esto demuestra que la consulta tard 97 milisegundos en ejecutarse. Si el tamao del output no es el adecuado, usted puede utilizar la opcin +short para eliminar las palabras redundantes del output:
# dig +short oracle.com 141.146.8.66

Tambin puede utilizar la direccin de IP para realizar una bsqueda inversa del nombre de host a partir de la direccin de IP. Para esto se utiliza la opcin -x.
# dig -x 141.146.8.66

El parmetro +domain es til cuando usted busca un host dentro de un dominio. Por ejemplo, supongamos que usted est buscando el host otn en el dominio oracle.com, usted puede utilizar:
# dig +short otn.oracle.com

O puede utilizar el parmetro +domain:


# dig +short +tcp +domain=oracle.com otn www.oracle.com. www.oraclegha.com. 141.146.8.66

Para Usuarios de Oracle


Se establece la conectividad entre el servidor de aplicaciones y el servidor de base de datos. El

archivo TNSNAMES.ORA, utilizado por SQL*Net puede parecerse a este:


prodb3 = (description = (address_list = (address = (protocol = tcp)(host = prolin3)(port = 1521)) ) (connect_data = (sid = prodb3) ) )

El nombre de host prolin3 debera ser determinado por el servidor de aplicaciones. En cualquiera de los casos, ste debera figurar en el archivo /etc/hosts; o el host prolin3 debera definirse en el DNS. Para asegurarse de que la resolucin del nombre funciona, y que funciona de manera correcta para dirigirse al host adecuado, usted puede utilizar el comando dig. Con estos dos comandos usted puede manejar la mayora de las tareas de red en un entorno Linux. En la que queda de esta presentacin, usted aprender a administrar un entorno Linux de manera efectiva.

uptime
Usted ha ingresado al servidor y ha observado que algunas cosas que deberan estar funcionando, en verdad no lo estn. Tal vez algunos procesos fueron cancelados o quizs todos los procesos han sido finalizados debido a un cierre del sistema. En lugar de hacer suposiciones, descubra si el servidor ha sido realmente reiniciado utilizando el comando uptime. El comando muestra el plazo de tiempo durante el cual el servidor ha estado funcionando desde su ltimo reinicio.
# uptime 16:43:43 up 672 days, 17:46, 45 users, load average: 4.45, 5.18, 5.38

El output muestra mucha informacin de utilidad. La primera columna muestra el momento real en que el comando fue ejecutado. La segunda parte activo 672 das, 17:46 muestra el tiempo en que el servidor ha estado activo. Las cifras 17:46 representan las horas y minutos. Por lo tanto, este servidor ha estado funcionando por 672 das, 17 horas y 46 minutos hasta el momento. El siguiente elemento 45 usuarios muestra la cantidad de usuarios que han iniciado sesin en el servidor justo en ese momento. Los ltimos bits del output muestran el promedio de carga del servidor en el ltimo minuto, y en los ltimo 5 y 15 minutos respectivamente. El trmino carga promedio es una cifra compuesta que representa la carga del sistema sobre la base de las mtricas de I/O y CPU. Cuanto mayor es el promedio de carga, mayor la carga en el sistema. No se basa en una escala; a diferencia de los porcentajes, no finaliza con una cantidad determinada, como 100. Adems, la carga promedio de dos sistemas no puede compararse entre s. Dicha cifra se utiliza para cuantificar la carga en un sistema y solo es relevante para ese nico sistema. Este output muestra que la carga promedio fue de 4,45 en el ltimo minuto, 5,18 en los ltimos 5 minutos y as sucesivamente. El comando no tiene ninguna opcin ni acepta ningn parmetro que no sea -V, el cual muestra la versin del comando.
# uptime -V procps version 3.2.3

Para Usuarios de Oracle


No existe un uso especfico de Oracle en torno a este comando, salvo que usted puede conocer la carga del sistema para explicar algunos problemas de desempeo. Si observa algunos problemas de desempeo en la base de datos, y stos surgen debido a la elevada carga de I/O o CPU, usted inmediatamente debera controlar las cargas promedio utilizando el comando uptime. Si observa un promedio de carga elevado, su prximo paso ser realizar un examen detallado para detectar la causa del problema. Para realizar este anlisis, usted cuenta con una gran cantidad de herramientas como mpstat, iostat y sar (descriptas en esta presentacin de la serie). Preste atencin al output que se muestra a continuacin:
# uptime 21:31:04 up 330 days, 7:16, 4 users, load average: 12.90, 1.03, 1.00

Es interesante ver cmo el promedio de carga era bastante elevado (12,90) en el ltimo minuto y luego ha disminuido bastante, incluso hasta niveles irrelevantes, llegando a 1,03 y 1,00 en los ltimos 5 y 15 minutos respectivamente. Qu significa esto? Esto demuestra que en menos de 5 minutos, se inici algn proceso que provoc que el promedio de carga subiera repentinamente en el ltimo minuto. Este proceso no estaba presente anteriormente ya que el promedio de carga era bastante bajo. Este anlisis nos lleva a concentrarnos en los procesos iniciados en los ltimos minutos acelerando as el proceso de resolucin. Lgicamente, como esto demuestra la cantidad de tiempo en que el servidor ha estado funcionando, tambin explica por qu la instancia ha estado activa desde aquel momento.

who
Quin ha ingresado en el sistema en este momento? Esa es una simple pregunta que usted podra hacerse especialmente si desea rastrear a algn usuario errante que est ejecutando algunos comandos que consumen recursos. El comando who responde esa pregunta. Observe aqu el uso ms simple de este comando, sin argumentos ni parmetros.
# who oracle oracle root root pts/2 pts/3 pts/1 :0 Jan 8 15:57 Jan 8 15:57 Dec 26 13:42 Oct 23 15:32 (10.14.105.139) (10.14.105.139) (:0.0)

El comando puede presentar varias opciones. La opcin -s es la opcin por defecto; que produce el mismo output que arriba. Observando el output, usted quizs est haciendo memoria para recordar lo que significan las columnas. Bueno, reljese. Puede utilizar la opcin -H para desplegar el encabezado:
# who -H NAME oracle oracle root root LINE pts/2 pts/3 pts/1 :0 TIME COMMENT Jan 8 15:57 (10.14.105.139) Jan 8 15:57 (10.14.105.139) Dec 26 13:42 (:0.0) Oct 23 15:32

Ahora el significado de las columnas es claro. La columna NAME muestra el nombre de usuario registrado. LINE muestra el nombre de terminal. En Linux cada conexin se denomina como una terminal con el convenio de denominacin pts/<n> en donde <n> es un nmero que comienza con 1. La terminal :0 es una denominacin para la terminal X. TIME muestra la primera vez en que se

registraron. Y COMMENTS muestra la direccin de IP desde donde se registraron. Pero qu sucede si usted solo quiere obtener un listado con los nombres de usuarios en lugar de ver todos esos detalles superfluos? La opcin -q logra eso. Despliega los nombres de usuarios en una sola lnea, ordenados alfabticamente. Tambin despliega la cantidad total de usuarios al final (45, en este caso):
# who -q ananda ananda jsmith klome # users=45 oracle oracle root root and so on for 45 names

Algunos usuarios podran haber iniciado sesin pero no estar realizando ninguna actividad en realidad. Usted puede controlar por cunto tiempo han estado inactivos utilizando la opcin -u, lo cual es realmente til, especialmente si usted es el jefe.
# who -uH NAME LINE oracle pts/2 oracle pts/3 root pts/1 root :0 TIME Jan 8 Jan 8 Dec 26 Oct 23 15:57 15:57 13:42 15:32 IDLE . 00:26 old ? PID 18127 18127 6451 24215 COMMENT (10.14.105.139) (10.14.105.139) (:0.0)

La nueva columna IDLE muestra el tiempo de inactividad con el formato hh:mm. Observa el valor old en esa columna? Implica que el usuario ha estado inactivo durante ms de 1 da. La columna PID muestra el ID del proceso de su conexin shell. Otra opcin til es -b que muestra cuando el sistema ha sido reiniciado.
# who -b system boot Feb 15 13:31

Muestra que el sistema ha sido reiniciado el 15 de febrero a la 1:31 p.m. Recuerda el comando uptime? Tambin muestra la cantidad de tiempo durante el cual el sistema ha estado activo. Usted puede restar los das que se observan en uptime para saber la fecha de reinicio. El comando -b facilita esto ya que directamente muestra la fecha de reinicio. Advertencia Importante: El comando who -b muestra el mes y la fecha nicamente, no el ao. De modo que si el sistema ha estado activo por ms de un ao, el output no reflejar el valor correcto. Por consiguiente el comando uptime siempre es el enfoque preferido, incluso si usted tiene que hacer algunos clculos. Aqu vemos un ejemplo:
# uptime 21:37:49 up 675 days, 22:40, 1 user, # who -b system boot Mar 7 22:58 load average: 3.35, 3.08, 2.86

Observe que la fecha de reinicio es el 7 de marzo. Eso fue en 2007 no en 2008! El uptime muestra la fecha correcta ha estado activo durante 675 das. Si las restas no son su fuerte, puede utilizar un simple SQL para obtener esa fecha, 675 das atrs:
SQL> select sysdate - 675 SYSDATE-6 --------07-MAR-07 from dual;

La opcin -l muestra los inicios de sesin al sistema:


# who -lH

NAME LOGIN LOGIN

LINE tty1 tty6

TIME Feb 15 Feb 15

13:32 13:32

IDLE

PID COMMENT 4081 id=1 4254 id=6

Para descubrir las terminales del usuario que ya no estn en uso, utilice la opcin -d:
# who -dH NAME LINE pts/1 pts/4 pts/3 pts/2 pts/5 pts/4 TIME Feb 15 Feb 15 Oct 10 Jan 11 Jun 29 Oct 4 Dec 30 Dec 30 IDLE 13:31 13:32 14:53 00:20 16:01 22:35 03:15 22:35 PID COMMENT EXIT 489 id=si term=0 exit=0 2870 id=l5 term=0 exit=0 31869 id=ts/1 term=0 exit=0 22155 id=ts/4 term=0 exit=0 0 id=/3 term=0 exit=0 8371 id=/2 term=0 exit=0 5026 id=ts/5 term=0 exit=0 0 id=/4 term=0 exit=0

Algunas veces el proceso init (el proceso que primero se ejecuta cuando se reinicia el sistema) inicia otros procesos. La opcin -p muestra todos esos inicios de sesin que estn activos.
# who -pH NAME LINE TIME Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Oct 4 13:32 13:32 13:32 13:32 13:32 23:14 PID 4083 4090 4166 4174 4255 13754 COMMENT id=2 id=3 id=4 id=5 id=x id=h1

Ms adelante en este documento, usted conocer un comando write que permite enviar y recibir mensajes en tiempo real. Tambin aprender a desactivar la capacidad de otros para escribir en su terminal (el comando mesg). Si desea saber qu usuarios permiten y no permiten a los dems escribir en sus terminales, utilice la opcin -T:
# who -TH NAME oracle + oracle + oracle root + root ? LINE pts/2 pts/3 pts/4 pts/1 :0 TIME Jan 11 Jan 11 Jan 11 Dec 26 Oct 23 12:08 12:08 12:08 13:42 15:32 COMMENT (10.23.32.10) (10.23.32.10) (10.23.32.10) (:0.0)

El signo + sign antes del nombre de la terminal implica que la terminal acepta los comandos de escritura de otros; el signo - significa que la terminal no lo permite. El signo ? en este campo significa que la terminal no soporta escrituras, por ejemplo, una sesin X-window. El nivel actual de ejecucin del sistema puede obtenerse a travs de la opcin -r:
# who -rH NAME LINE run-level 5 TIME Feb 15 IDLE 13:31 PID COMMENT last=S

Con la opcin -a (all) puede obtenerse un listado ms descriptivo. Esta opcin combina las opciones -b -d -l -p -r -t -T -u. De modo que estos dos comandos producen el mismo resultado:
# who -bdlprtTu # who -a

Aqu vemos un output de muestra (con el encabezado, para que usted puede comprender mejor las columnas):
# who -aH

NAME

LINE system boot run-level 5

LOGIN

tty1

LOGIN

tty6 pts/1 + pts/2 + pts/3 pts/4 pts/3 + pts/1 pts/2 ? :0 pts/5 pts/4

oracle oracle root root

TIME Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Feb 15 Oct 4 Oct 10 Jan 8 Jan 8 Dec 30 Jun 29 Dec 26 Oct 4 Oct 23 Dec 30 Dec 30

13:31 13:31 13:31 13:32 13:32 13:32 13:32 13:32 13:32 13:32 13:32 23:14 14:53 15:57 15:57 03:15 16:01 13:42 22:35 15:32 03:15 22:35

IDLE

PID COMMENT 489 id=si 2870 4081 4083 4090 4166 4174 4254 4255 13754 31869 18127 18127 5026 0 6451 8371 24215 5026 0

EXIT term=0 exit=0

. 00:18 old ?

last=S id=l5 term=0 exit=0 id=1 id=2 id=3 id=4 id=5 id=6 id=x id=h1 id=ts/1 term=0 exit=0 (10.14.105.139) (10.14.105.139) id=ts/4 term=0 exit=0 id=/3 term=0 exit=0 (:0.0) id=/2 term=0 exit=0 id=ts/5 id=/4 term=0 exit=0 term=0 exit=0

Para ver su propio inicio de sesin, utilice la opcin -m:


# who -m oracle pts/2 Jan 8 15:57 (10.14.105.139)

Observa el valor pts/2? Es el nmero de terminal. Usted puede encontrar su propia terminal a travs del comando tty:
# tty /dev/pts/2

En Linux existe una estructura de comando especial para mostrar su propio registro de inicio de sesin who am i. Produce el mismo output como en la opcin -m.
# who am i oracle pts/2 Jan 8 15:57 (10.14.105.139)

Los nicos argumentos permitidos son am i" y mom likes (si, aunque no lo crea!). Ambos producen el mismo output,

Original Instant Messenger System


Con la llegada de la mensajera instantnea o los programas de chat qued comprobado que hemos conquistado el desafo global de mantener un intercambio de informacin en tiempo real, sin olvidarnos de las comunicaciones de voz. Pero estos programas solo se encuentran en el mbito de los llamados programas atractivos? El concepto de chat o mensajera instantnea ha estado disponible durante bastante tiempo en *nix. De hecho, usted tiene un sistema IM seguro y completo incorporado en Linux. ste le permite conversar de manera segura con cualquier persona conectada al sistema; sin requerir conexin de internet. El chat es activado a travs de los comandos write, mesg, wall y talk. Examinemos cada uno de ellos. El comando write permite escribir en la terminal de un usuario. Si el usuario ha iniciado sesin en ms de una terminal, usted puede dirigirse a una direccin especfica. Aqu se muestra cmo

escribir el mensaje Cuidado con el virus para el usuario oracle que inici sesin en la terminal pts/3:
# write oracle pts/3 Beware of the virus ttyl <Control-D> #

La combinacin de teclas Control-D finaliza el mensaje, devuelve el shell prompt (#) al usuario final y lo enva a la terminal del usuario. Cuando ste se enva, el usuario oracle ver en la terminal pts/3 los mensajes:
Beware of the virus ttyl

Cada lnea aparecer a medida que el remitente presione ENTER despus de las lneas. Cuando el remitente presiona Control-D, finalizando la transmisin, el receptor ver EOF en la pantalla. El mensaje se desplegar independientemente de la actual accin del usuario. Si el usuario est editando un archivo en vi, el mensaje aparece y el usuario puede eliminarlo al presionar Control-L. Si el usuario se encuentra en SQL*Plus prompt, el mensaje an aparece pero no afecta los registros del teclado del usuario. Pero qu sucede si usted no quiere sufrir estas pequeas molestias? Usted no quiere que nadie le enve mensajes del tipo descuelga el telfono. Usted puede hacerlo a travs del comando mesg. Este comando desactiva la capacidad de los dems para enviarle mensajes. El comando sin ningn argumento muestra la siguiente capacidad:
# mesg is y

Muestra que otros pueden escribirle. Para desactivarlo:


# mesg n

Ahora para confirmar:


# mesg is n

Cuando usted intenta escribir en las terminales de los usuarios, quizs desee saber qu terminales han sido desactivadas para que otros no puedan escribir en ellas. El comando -T (descripto anteriormente en este documento) muestra que:
# who -TH NAME oracle + oracle + oracle root + root ? LINE pts/2 pts/3 pts/4 pts/1 :0 TIME Jan 11 Jan 11 Jan 11 Dec 26 Oct 23 12:08 12:08 12:08 13:42 15:32 COMMENT (10.23.32.10) (10.23.32.10) (10.23.32.10) (:0.0)

El signo + antes del nombre de terminal indica que sta acepta escribir comandos de otros; el signo - indica que esto no est permitido. El signo ? indica que la terminal no soporta escrituras en ella, por ej., una sesin X-window. Y qu ocurre cuando usted desea escribir a todos los usuarios que han iniciado sesin? En lugar de tipear cada uno, utilice el comando wall:
# wall hello everyone

Una vez que se enva, aparece el siguiente texto en las terminales de todos los usuarios que han iniciado sesin:
Broadcast message from oracle hello everyone (pts/2) (Thu Jan 8 16:37:25 2009):

Esto es muy til para los usuarios root. Cuando usted quiere cerrar el sistema, desmontar un sistema de archivos, o realizar funciones administrativas similares, quizs desee que todos los usuarios cierren su sesin. Utilice el comando para enviar un mensaje a todos. Finalmente, el programa talk le permite conversar en tiempo real. Simplemente tipee lo siguiente
# talk oracle pts/2

Si desea conversar con algn usuario en un servidor diferente prolin2 puede utilizar
# talk oracle@prolin2 pts/2

Esto abre una ventana de conversacin en la otra terminal y ahora usted puede conversar con esa persona en tiempo real. Es esto distinto a cualquier otro programa de conversacin profesional que actualmente utiliza? Probablemente no. A propsito, para que la conversacin funcione correctamente, asegrese de que el talkd daemon est ejecutndose, ya que ste podra estar desinstalado.

w
Si, es un comando a pesar de que tenga solo una letra! El comando w es una combinacin de los comandos uptime y who ejecutados uno inmediatamente luego del otro, en ese orden. Veamos un output muy comn sin argumentos ni opciones.
# w 17:29:22 up 672 days, 18:31, 2 users, load average: 4.52, 4.54, 4.59 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT oracle pts/1 10.14.105.139 16:43 0.00s 0.06s 0.01s w oracle pts/2 10.14.105.139 17:26 57.00s 3.17s 3.17s sqlplus sysdba and so on

as

El output tiene dos partes distintas. La primera parte muestra el output del comando uptime (descripto arriba en este documento) el cual muestra el tiempo en que el servidor ha esta activo, cuantos usuarios han iniciado sesin y el promedio de carga en el ltimo minuto y en los ltimos 5 y 15 minutos. Las partes del output han sido explicadas en el comando uptime. La segunda parte del output muestra el output del comando who con la opcin -H (tambin explicado en este documento). Nuevamente, las numerosas columnas tambin han sido explicadas en el comando who. Si usted prefiere no desplegar el encabezado, utilice la opcin -h.
# w -h oracle pts/1 10.14.105.139 16:43 0.00s 0.02s 0.01s w -h

Esto elimina el encabezado del output. Es til en los shell scripts en donde quiere leer y actuar en base al output sin la carga adicional de saltear el encabezado. La opcin -s produce una versin compacta (corta) del output, eliminando el tiempo de inicio de sesin, y los tiempos de JPCU y PCPU.
# w -s 17:30:07 up 672 days, 18:32, 2 users, load average: 5.03, 4.65, 4.63

USER oracle oracle

TTY pts/1 pts/2

FROM 10.14.105.139 10.14.105.139

IDLE WHAT 0.00s w -s 1:42 sqlplus

as sysdba

Usted podra encontrar que el campo FROM realmente no es muy til. Muestra la direccin de IP del mismo servidor, ya que los registros de inicio de sesin son todos locales. Para ahorrar espacio en el output, usted podra suprimir este campo. La opcin -f desactiva la impresin del campo FROM:
# w -f 17:30:53 up 672 days, 18:33, 2 users, load average: 4.77, 4.65, 4.63 USER TTY LOGIN@ IDLE JCPU PCPU WHAT oracle pts/1 16:43 0.00s 0.06s 0.00s w -f oracle pts/2 17:26 2:28 3.17s 3.17s sqlplus as sysdba

El comando acepta solo un parmetro: el nombre de un usuario. Por defecto muestra el proceso e inicio de sesin de todos los usuarios. Si usted coloca el nombre de usuario, se muestra el registro de inicio de sesin de ese usuario solamente. Por ejemplo, para mostrar solo el inicio de sesin de los usuarios root, debe emitir:
# w -h root root pts/1 :0.0 root :0 /usr/bin/gnome-session 26Dec08 13days 0.01s 0.01s bash 23Oct08 ?xdm? 21:13m 1.81s

La opcin -h fue utilizada para ocultar el encabezado.

kill
Un proceso se est ejecutando y usted desea que el proceso finalice. Qu debera hacer? El proceso se ejecuta en un segundo plano, de modo que no necesita ir a la terminal y presionar Control-C; o, tal vez el proceso pertenece a otro usuario (utilizando el mismo userid, como oracle) y usted desea que termine. El comando kill justamente va al rescate; hace lo que su nombre sugiere finaliza el proceso. Su uso ms comn es:
# kill <Process ID of the Linux process>

Supongamos que usted quiere finalizar un proceso denominado sqlplus emitido por el usuario oracle, usted debe conocer su processid, o PID:
# ps -aef|grep sqlplus|grep ananda oracle 8728 23916 0 10:36 pts/3 oracle 8768 23896 0 10:36 pts/2 00:00:00 sqlplus 00:00:00 grep sqlplus

Ahora para finalizar el PID 8728:


# kill 8728

Y as se finaliza el proceso. Por supuesto usted debe ser el mismo usuario (oracle) para finalizar un proceso iniciado por oracle. Para finalizar procesos iniciados por otros usuarios usted debe ser un super usuario root. Algunas veces usted puede querer simplemente detener el proceso en vez de finalizarlo. Puedo utilizar la opcin -SIGSTOP con el comando kill.
# kill -SIGSTOP 9790 # ps -aef|grep sqlplus|grep oracle oracle 9790 23916 0 10:41 pts/3 oracle 9885 23896 0 10:41 pts/2 00:00:00 sqlplus as sysdba 00:00:00 grep sqlplus

Esto es til para los trabajos que se realizan en segundo plano pero con procesos de primer plano. Simplemente detiene el proceso y le quita el control al usuario. De modo que, si usted verifica el proceso nuevamente luego de emitir el comando:
# ps -aef|grep sqlplus|grep oracle oracle 9790 23916 0 10:41 pts/3 oracle 10144 23896 0 10:42 pts/2 00:00:00 sqlplus as sysdba 00:00:00 grep sqlplus

Usted observa que el proceso an se est ejecutando. No ha finalizado. Para finalizar este proceso, y cualquier proceso que se resista a ser finalizado, debe enviar una nueva seal denominada SIGKILL. La seal por defecto es SIGTERM.
# kill -SIGKILL 9790 # ps -aef|grep sqlplus|grep oracle oracle 10092 23916 0 10:42 pts/3 oracle 10198 23896 0 10:43 pts/2 00:00:00 sqlplus as sysdba 00:00:00 grep sqlplus

Tenga en cuenta las opciones -SIGSTOP y -SIGKILL, que envan una seal especfica (detener y finalizar, respectivamente) al proceso. Del mismo modo hay otras seales que puede utilizar. Para obtener un listado de todas las seales disponibles, utilice la opcin -l (la letra L, no el nmero 1):
# kill -l 1) SIGHUP 5) SIGTRAP 9) SIGKILL 13) SIGPIPE 18) SIGCONT 22) SIGTTOU 26) SIGVTALRM 30) SIGPWR 36) SIGRTMIN+2 40) SIGRTMIN+6 44) SIGRTMIN+10 48) SIGRTMIN+14 52) SIGRTMAX-12 56) SIGRTMAX-8 60) SIGRTMAX-4 64) SIGRTMAX 2) 6) 10) 14) 19) 23) 27) 31) 37) 41) 45) 49) 53) 57) 61) SIGINT SIGABRT SIGUSR1 SIGALRM SIGSTOP SIGURG SIGPROF SIGSYS SIGRTMIN+3 SIGRTMIN+7 SIGRTMIN+11 SIGRTMIN+15 SIGRTMAX-11 SIGRTMAX-7 SIGRTMAX-3 3) 7) 11) 15) 20) 24) 28) 34) 38) 42) 46) 50) 54) 58) 62) SIGQUIT SIGBUS SIGSEGV SIGTERM SIGTSTP SIGXCPU SIGWINCH SIGRTMIN SIGRTMIN+4 SIGRTMIN+8 SIGRTMIN+12 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2 4) 8) 12) 17) 21) 25) 29) 35) 39) 43) 47) 51) 55) 59) 63) SIGILL SIGFPE SIGUSR2 SIGCHLD SIGTTIN SIGXFSZ SIGIO SIGRTMIN+1 SIGRTMIN+5 SIGRTMIN+9 SIGRTMIN+13 SIGRTMAX-13 SIGRTMAX-9 SIGRTMAX-5 SIGRTMAX-1

Tambin puede utilizar el numeral equivalente de la seal en lugar del verdadero nombre de la seal. Por ejemplo, en lugar de kill -SIGKILL 9790, usted puede utilizar kill -9 9790. A propsito, este es un comando interesante. Recuerde que casi todos los comandos Linux generalmente son archivos ejecutables localizados en /bin, /sbin/, /user/bin y directorios similares. El PATH ejecutable determina en dnde pueden encontrarse estos archivos de comando. Algunos otros comandos son en realidad comandos incorporados, es decir, son parte del shell mismo. Un ejemplo de esto es el comando kill. Para demostrarlo, observe lo siguiente:
# kill -h -bash: kill: h: invalid signal specification

Observe el output que arroja el bash shell. El uso es incorrecto ya que el argumento -h no era el adecuado. Ahora utilice el siguiente:
# /bin/kill -h usage: kill [ -s signal | -p ] kill -l [ signal ] [ -a ] pid ...

Esta versin del comando kill como ejecutable en el directorio /bin acept la opcin -h

adecuadamente. Ahora usted ya conoce esta sutil diferencia entre los comandos shell incorporados y sus utilidades homnimas (namesake) en la forma de archivos ejecutables. Por qu es importante conocer la diferencia? Es importante porque la funcionalidad vara de manera significativa entre estas dos formas. El comando kill incorporado tiene menos funcionalidad que su utilidad equivalente. Cuando usted emite el comando kill, en verdad est invocando el comando incorporado, no la utilidad. Para incorporar la otra funcionalidad, usted tiene que utilizar la utilidad /bin/kill. La utilidad kill tiene muchas opciones y argumentos. El ms conocido es el comando kill utilizado para finalizar los proceso con los nombres del proceso, en lugar de PIDs. Aqu vemos un ejemplo en el que usted puede finalizar todos los procesos con el nombre sqlplus:
# /bin/kill sqlplus [1] Terminated [2] Terminated [3] Terminated [4] Terminated [5] Terminated [6] Terminated [7]- Terminated [8]+ Terminated sqlplus sqlplus sqlplus sqlplus sqlplus sqlplus sqlplus sqlplus

Algunas veces usted quiere ver todos los IDs de los procesos que sern finalizados. La opcin -p logra esto. Imprime los PIDs que deberan finalizarse, sin realmente finalizarlos. Sirve como confirmacin previa a la accin:
# /bin/kill -p sqlplus 6798 6802 6803 6807 6808 6812 6813 6817

Algunas veces usted quiere ver todos los IDs de los procesos que sern finalizados. La opcin -p logra esto. Imprime los PIDs que deberan finalizarse, sin realmente finalizarlos. Sirve como confirmacin previa a la accin:
# man -k builtin . [builtins] : [builtins] [ [builtins] alias [builtins] bash [builtins] bg [builtins] y as (1) (1) (1) (1) (1) (1) bash bash bash bash bash bash built-in built-in built-in built-in built-in built-in commands, commands, commands, commands, commands, commands, see see see see see see bash(1) bash(1) bash(1) bash(1) bash(1) bash(1)

El output muestra los PIDs de los procesos que seran finalizados. Si usted reemite el comando sin la opcin -p, se finalizarn todos esos procesos. A esta altura usted quizs desee saber cules son los otros comandos incorporados en el shell, en lugar de las utilidades.
# /bin/kill perl rman perl dbca dbua java

Algunas entradas parecen conocidas alias, bg, entre otras. Algunas se encuentran meramente

incorporadas, por ej., alias. No existe ningn archivo ejecutable llamado alias.

Para Usuarios de Oracle


Finalizar un proceso ofrece muchos usos mayormente se utiliza para finalizar procesos fantasmas, procesos que se encuentran en segundo plano y otros que han sido detenidos en respuesta a un cierre normal de los comandos. Por ejemplo, cuando la instancia de base de datos de Oracle no se est cerrado debido a un problema de memoria. Usted debe cerrarla finalizando uno de los procesos clave como pmon o smon. Esto no debera realizarse todo el tiempo, solo cuando no haya opcin. Si quizs desee finalizar todas las sesiones sqlplus o todos los trabajos rman utilizando el comando de utilidad kill. Los procesos Oracle Enterprise Manager se ejecutan como procesos perl; o procesos DBCA o DBUA, los cuales quizs quiera finalizar rpidamente:
# /bin/kill perl rman perl dbca dbua java

Existe tambin un uso ms comn de este comando. Cuando usted quiere finalizar una sesin de usuario en la Base de Datos de Oracle, generalmente realiza alguna de las siguientes acciones: Busca el SID y Serial# de la sesin Finaliza la sesin utilizando el comando ALTER SYSTEM Veamos qu sucede cuando desea finalizar la sesin del usuario SH.
SQL> select sid, serial#, status 2 from v$session 3* where username = 'SH'; SID SERIAL# STATUS ---------- ---------- -------116 5784 INACTIVE SQL> alter system kill 2 / session '116,5784'

System altered. La sesin ha finalizado; no obstante cuando usted controla en estado de la sesin: SID SERIAL# STATUS ---------- ---------- -------116 5784 KILLED

Se muestra como KILLED (finalizada), pero no se ha eliminado por completo. Eso sucede porque Oracle espera hasta que el usuario SH inicie su sesin e intente hacer algo, en ese momento recibe el mensaje ORA-00028: su sesin ha sido finalizada. Luego de ese momento la sesin desaparece de V$SESSION. Una manera ms rpida de finalizar una sesin es eliminar el correspondiente proceso del servidor en el nivel de Linux. Para hacerlo, primero busque el PID del proceso del servidor:
SQL> select spid 2 from v$process 3 where addr = 4 ( 5 select paddr 6 from v$session 7 where username = 8 ); SPID ------------------------

'SH'

30986

El SPID es el ID de Proceso del proceso del servidor. Ahora puede finalizar este proceso:
# kill -9 30986

Ahora si verifica la visin V$SESSION, sta desaparecer inmediatamente. El usuario no recibir el mensaje instantneamente; pero si intenta realizar una consulta a la base de datos, el obtendr el siguiente mensaje:
ERROR at line 1: ORA-03135: connection lost contact Process ID: 30986 Session ID: 125 Serial number: 34528

Este en mtodo rpido para finalizar una sesin, no obstante hay ciertos inconvenientes. La base de datos de Oracle debe realizar una limpieza de sesin deshacer cambios (rollback), etc. Y esto debera realizarse solo cuando las sesiones se encuentran inactivas. Caso contrario, usted puede utilizar una de las dos otras maneras de finalizar una sesin inmediatamente:
alter system disconnect session alter system disconnect session '125,35447' immediate; '125,35447' post_transaction;

killall
A diferencia de la naturaleza dual del comando kill, killall es meramente una utilidad, es decir, es un programa ejecutable en el directorio /usr/bin. El comando es similar a kill en funcionalidad pero en vez de finalizar un proceso sobre la base de su PID, ste acepta el nombre del proceso como argumento. Por ejemplo, para finalizar todos los procesos sqlplus, emita:
# killall sqlplus

Esto finaliza todos los procesos denominados sqlplus (los cuales usted tiene permiso de finalizar, por supuesto). A diferencia del comando kill incorporado, usted no necesita conocer el ID de Proceso de los procesos a finalizar. Si el comando no finaliza el proceso o el proceso no responde a una seal TERM, usted puede enviar una seal SIGKILL explcita como pudo ver en el comando kill utilizando la opcin -s.
# killall -s SIGKILL sqlplus

Como en el comando kill, usted puede utilizar la opcin -9 en lugar de -s SIGKILL. Para obtener un listado de todas las seales disponibles, usted puede utilizar la opcin -l.
# killall -l HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED

Para obtener el output completo del comando killall, utilice la opcin -v:
# killall -v sqlplus Killed sqlplus(26448) Killed sqlplus(26452) Killed sqlplus(26456) Killed sqlplus(26457) and so on with with with with signal signal signal signal 15 15 15 15

Algunas veces usted quizs quiera examinar el proceso antes de finalizarlo. La opcin -i le permite

ejecutarlo interactivamente. Esta opcin solicita su input antes de finalizarlo:


# killall -i sqlplus Kill sqlplus(2537) ? Kill sqlplus(2555) ? Kill sqlplus(2555) ? Killed sqlplus(2555) (y/n) n (y/n) n (y/n) y with signal 15

Qu sucede cuando usted aprueba un nombre de proceso equivocado?


# killall wrong_process wrong_process: no process killed

No existe ningn proceso de ejecucin denominado wrong_process entonces no se ha finalizado nada y el output lo ha mostrado claramente. Para eliminar este reclamo no process killed, utilice la opcin -q. Esa opcin es muy til en shell scripts en donde usted no puede analizar el output. En cambio, si usted desea capturar el cdigo de retorno del comando:
# killall -q wrong_process # echo $? 1

El cdigo de retorno (que se muestra en la variable shell $?) es 1, en vez de 0, lo cual indica una falla. Usted puede controlar el cdigo de retorno para examinar si el proceso killall result exitoso, es decir, si el cdigo de retorno es 0. Algo interesante en torno a este comando es que no se finaliza por si mismo. Por supuesto hace finalizar otros comandos killall en otro sitio pero no en si mismo.

Para Usuarios de Oracle


Al igual que el comando kill, el comando killall tambin es utilizado para finalizar procesos. La mayor ventaja de killall es la capacidad de desplegar el processid y la naturaleza interactiva que posee. Supongamos que usted desea finalizar todos los procesos perl, java, sqlplus, rman y dbca pero no de manera interactiva; usted puede emitir:
# killall -i -p perl sqlplus java rman dbca Kill sqlplus(pgid 7053) ? (y/n) n Kill perl(pgid 31233) ? (y/n) n ... and so on ...

Esto le permite ver el PID antes de finalizarlos, lo cual puede ser muy til.

Conclusion
En este documento usted conoci los siguientes comandos (mostrados alfabticamente) dig ifconfig kill killall Una nueva versin de nslookup Para desplegar informacin en las interfaces de red Para finalizar un proceso especfico Para finalizar un proceso especfico, un grupo de procesos y los nombres que coinciden con un patrn

mesg

Para activar o desactivar la capacidad de los dems para desplegar algo en la terminal de uno. Para desplegar estadsticas y otras mtricas sobre el uso de la interfaz de red

netstat

nslookup Para buscar el nombre de host de su direccin de IP o buscar la direccin de IP para su nombre de host en DNS talk Para establecer un sistema de Mensajera Instantnea entre dos usuarios para lograr una conversacin en tiempo real Para saber por cunto tiempo ha estado funcionando el sistema y conocer su carga promedio en 1, 5 y 15 minutos Es una combinacin de uptime y who Para desplegar texto en las terminales de todos los usuarios que han iniciado sesin Para desplegar a todos los usuarios que han iniciado sesin en el sistema y para saber lo que estn haciendo Para desplegar instantneamente algo en la sesin de la terminal de un usuario especfico

uptime

w wall

who

write

Como he mencionado anteriormente, no es mi intencin presentarles cada comando disponible en los sistemas Linux. Usted debe conocer solo algunos de ellos para administrar un sistema de manera efectiva y esta serie le muestra los ms importantes. Practquelos en su entorno para comprenderlos mejor con sus parmetros y opciones. En el prximo documento, el ltimo de ellos, usted aprender a administrar un entorno Linux en una mquina comn, en una mquina virtual, y en la nube.

S-ar putea să vă placă și