Sunteți pe pagina 1din 69

ORACLE CON LINUX (por: Diana Di Tolla)

1. Cambios Sencillos a Propietarios, Grupos y Permisos


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
Fjese que el grupo, y el propietario, han cambiado.

70 Aug 132 Aug

4 04:02 file1 4 04:02 file2

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.

1.1

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 4096 Inodes: Total: 12222464 Free: 12093976
Otra opcin, -t, brinda exactamente la misma informacin pero en una sola lnea:

Size:

# 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.

2.1

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.

3.1

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 ejecutado. En este caso, 0, lo cual implica que los archivos 1 y 2 son idnticos.

# cmp -s file1 file2 # echo $? 1


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.

Consejo para Usuarios Oracle


Recuerde de un consejo anterior, cuando vuelve a conectar los ejecutables Oracle, la versin ms antigua se guarda antes 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 $ORACLE_HOME/bin. Entonces cmo se asegura de que el sqlplus que se cre recientemente es diferente? Simplemente utilice:

# cmp sqlplus sqlplusO sqlplus sqlplusO differ: byte 657, line 7


Si verifica el tamao:

# ls -l sqlplus* -rwxr-x--x 1 oracle -rwxr-x--x 1 oracle

dba dba

8851 Aug 8851 Nov

4 05:15 sqlplus 2 2005 sqlplusO

A pesar de que el tamao es el mismo en ambos casos, cmp demostr que los dos programas son diferentes. comm. El comando comm es similar a los otros pero el output se genera en tres columnas, separadas por etiquetas. Ejemplo:

# comm file1 file2 In file1 and file2 In file1 only In file1 and file2 In file2 only

Resumen de Comandos de este Documento


Commando chmod Uso Para cambiar permisos de un archivo, usando el parmetro de referencia - -

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

chown

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

chgrp

Para cambiar el grupo de un archivo, usando el parmetro de referencia - -

stat

Para conocer los atributos extendidos de un archivo, como fecha de ltimo acceso

file

Para conocer el tipo de archivo, como ASCII, datos, etc.

diff

Para ver la diferencia entre dos archivos

cmp

Para comparar dos archivos

comm

Para ver qu tienen en comn dos archivos, con el output en tres columnas

md5sum

Para calcular el valor arbitrario MD5 de los archivos, usado para determinar si un archivo ha cambiado

# 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 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' 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 1.1
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 apex assistants

has hs install

mesg mgw network

precomp racg rdbms

... output snipped ...


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 1 oracle 1 oracle 1 oracle oinstall oinstall oinstall 10M Apr 6 2006 rmanO 10M Sep 23 23:48 rman 89M Apr 6 2006 oracleO

-rwx------

1 oracle

oinstall

89M Sep 23 23:49 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 -ltr ls -ltr alert_DBA102.log dba102_cjq0_14493.trc -rw-r----1 oracle dba 738 Aug 10 19:18 dba102_cjq0_14493.trc -rw-r--r-1 oracle dba 2410225 Aug 13 05:31 alert_DBA102.log ls -ltr dba102_mmnl_14497.trc dba102_reco_14491.trc -rw-r----1 oracle dba 5386163 Aug 10 17:55 dba102_mmnl_14497.trc -rw-r----1 oracle dba 6808 Aug 13 05:21 dba102_reco_14491.trc ls -ltr dba102_rvwr_14518.trc -rw-r----1 oracle dba 2087 Aug 10 04:30 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
oldnamenewnamerename

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 All rights reserved.

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 $
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% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2% Mem: 1026912k av, 999548k used, 27364k free, 0k shrd, 116104k buff 758312k actv, 145904k in_d, 16192k in_c Swap: 2041192k av, 122224k used, 1918968k free 590140k cached PID USER 451 oracle 8991 oracle 1 root 2 root 3 root 4 root ksoftirqd/0 7 root 5 root 6 root 8 root kupdated 9 root mdrecoveryd PRI 15 15 19 15 15 34 15 15 15 15 25 NI 0 0 0 0 0 19 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 SW SW SW SW 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 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 0:01 0:33 0:14 0:00 0:00 0 bdflush 0 kswapd 0 kscand 0 0

0 SW

... output snipped ...


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, cached

26224k free, 146872k in_d, 1918716k free

0k shrd, 113624k buff 14460k in_c 591776k

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 SIZE RSS SHARE STAT 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 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 %MEM TIME CPU COMMAND Porcentaje de CPU utilizado por este proceso Porcentaje de memoria utilizado por este proceso Tiempo total de CPU utilizado por este proceso Si este es un proceso de procesadores mltiples, esta columna indica el ID de la CPU sobre la cual se est ejecutando este proceso. 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 16143 oracle 15 oraclePRODB2... 5 root 15 NI SIZE 0 39280 0 0 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

... output snipped ...


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.serial#, s.username, s.program from v$session s, v$process p where spid = 17797 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.

SELECT c.sid, c.status, d.piece, c.serial#, c.username, d.sql_text FROM v$session c, v$sqltext d WHERE c.sql_hash_value = d.hash_value and c.sid=643;

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 cancelarlo usando 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

USER root oracle oracle oracle

PRI 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

TIME CPU COMMAND 0:00 0 kapmd 0:00 0 oracle 0:00 0 oracle 0:00 0 oracle

13689 13695 13698 13701

oracle oracle oracle oracle

15 15 15 15

0 10004 9640 7820 0 9984 9620 7800 0 10064 9700 7884 0 22204 21M 16940

T T T T

0.0 0.0 0.0 0.0

0.9 0.9 0.9 2.1

0:00 0:00 0:00 0:00

0 0 0 0

oracle oracle oracle 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. Arup Nanda ( arup@proligence.com) ha sido DBA de Oracle durante ms de 12 aos, ocupndose de todos los aspectos de la administracin de base de datosdesde el ajuste de desempeo hasta la seguridad y recuperacin ante desastres. Es coautor de PL/SQL for DBAs (O'Reilly Media, 2005), fue DBA del Ao de Oracle Magazine en 2003, y es un ACE de Oracle.

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. 2.

la columna del extremo izquierdo denominada Proto muestra el tipo de conexin tcp en este caso. 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 SendQ, descripta a continuacin. 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. Local Address se refiere al origen de la conexin y el nmero de puerto del programa. 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

3.

4. 5.

puerto 1521; de manera que el puerto de origen es 1521. En esta conexin, el servidor enva los datos solicitados al cliente.

6.
7.

La columna State muestra el estado de la conexin. Aqu vemos algunos valores comunes.

1. 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.

2. CLOSED la conexin se ha cerrado, es decir, no est siendo utilizada. 3. TIME_WAIT la conexin se est cerrando pero an hay paquetes pendientes en la red. 4. 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 prolin1:1521 applin1:51324 ESTABLISHED 13827/oraclePROPRD1 tcp 0 0 prolin1:1521 prolin1:33298 ESTABLISHED 32695/tnslsnr tcp 0 0 prolin1:1521 prolin1:32544 ESTABLISHED 15251/oracle+ASM tcp 0 0 prolin1:1521 prolin1:33331 ESTABLISHED 32695/tnslsnr
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 6436 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 MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 277903459 0 0 0 170897632 0 0 0 BMsRU
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 Window irtt Iface 0 0 0 bond0 0 0 0 eth9 0 0 0 eth9 0 0 0 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 columna Genmaskmuestra 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. ;; 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 IN A 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, 5.38

45 users,

load average: 4.45,

5.18,

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 and so on for # users=45 45 names

oracle oracle root root

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

TIME

IDLE

PID COMMENT

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

. 00:26 old ?

18127 (10.14.105.139) 18127 (10.14.105.139) 6451 (:0.0) 24215

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 LINE LOGIN tty1 LOGIN 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

TIME Feb 15 Feb 15 Oct 10 Jan 11 Jun 29 Oct 4 Dec 30

IDLE 13:31 13:32 14:53 00:20 16:01 22:35 03:15

PID 489 2870 31869 22155 0 8371 5026

COMMENT id=si id=l5 id=ts/1 id=ts/4 id=/3 id=/2 id=ts/5

EXIT term=0 term=0 term=0 term=0 term=0 term=0 term=0

exit=0 exit=0 exit=0 exit=0 exit=0 exit=0 exit=0

pts/4

Dec 30

22:35

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 exit=0 system boot run-level 5 tty1

TIME Feb 15 13:31 Feb 15 13:31 Feb 15 13:31 Feb 15 13:32 Feb Feb Feb Feb Feb 15 15 15 15 15 13:32 13:32 13:32 13:32 13:32

IDLE

PID COMMENT EXIT 489 id=si term=0 last=S 2870 id=l5 4081 4083 4090 4166 4174 id=1 id=2 id=3 id=4 id=5

term=0

exit=0 LOGIN

LOGIN

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

exit=0 oracle oracle exit=0 exit=0 root exit=0 root exit=0 exit=0

Feb 15 13:32 Feb 15 13:32 Oct 4 23:14 Oct 10 14:53 Jan 8 15:57 Jan 8 15:57 Dec 30 03:15 Jun 29 16:01 Dec 26 13:42 Oct 4 22:35 Oct 23 15:32 Dec 30 03:15 Dec 30 22:35 old ? . 00:18

4254 4255 13754 31869

id=6 id=x id=h1 id=ts/1

term=0

18127 (10.14.105.139) 18127 (10.14.105.139) 5026 id=ts/4 term=0 0 id=/3 6451 (:0.0) 8371 id=/2 24215 5026 id=ts/5 0 id=/4 term=0 term=0 term=0 term=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

(pts/2) (Thu Jan

8 16:37:25 2009):

hello everyone
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.

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 as sysdba and so on

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, USER TTY FROM IDLE WHAT oracle pts/1 10.14.105.139 0.00s w -s

4.65, 4.63

oracle

pts/2

10.14.105.139

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 root :0

:0.0 -

26Dec08 13days 0.01s 23Oct08 ?xdm? 21:13m

0.01s bash 1.81s /usr/bin/gnome-session

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
Ahora para finalizar el PID 8728:

00:00:00 sqlplus 00:00:00 grep sqlplus

# 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 / System altered.
La sesin ha finalizado; no obstante cuando usted controla en estado de la sesin:

session '116,5784'

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 -----------------------30986

'SH'

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 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

mesg

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. Arup Nanda ( arup@proligence.com) ha sido DBA exclusivo de Oracle durante ms de 12 aos, con experiencia en todas las reas de tecnologa de Base de Datos de Oracle, y fue nombrado "DBA del Ao" por Oracle Magazine en 2003. Arup es disertante en eventos relacionados con Oracle, escritor frecuente en publicaciones de Oracle, adems de desempearse como Director de Oracle ACE . Asimismo ha sido coautor de cuatro libros, con inclusin de RMAN Recipes for Oracle Database 11g: A Problem Solution Approach .

Gua para Maestra Avanzada en Comandos Linux, Parte 5: Administracin del Entorno Linux - Continuacin
por Arup Nanda En esta quinta y ltima presentacin de la serie, describiremos ms comandos y tcnicas para administrar un entorno Linux incluyendo un entorno virtualizado.

VARIABLES

DE LAS

PALABRAS CLAVES

DE

SHELL

Cuando se encuentra en la lnea de comando, usted utiliza un ''shell'' generalmente el bash shell. En un shell usted puede definir una variable y fijar un valor para luego ser recuperado. Aqu vemos un ejemplo de una variable denominada ORACLE_HOME: # export ORACLE_HOME=/opt/oracle/product/11gR2/db1/ Posteriormente puede referirse a la variable colocando el prefijo ''$'' delante del nombre de la variable, por ej.:

## cd $ORACLE_HOME
Esto se denomina variable definida por el usuario. Asimismo, existen numerosas variables definidas en el shell mismo. Estas variables cuyos nombres han sido predefinidos en el shell controlan la manera en que usted interacta con el shell. Usted debera conocer estas variables (al menos algunas de las ms importantes) para mejorar la calidad y eficiencia de su trabajo.

PS1
Esta variable establece el command prompt de Linux. A continuacin se muestra un ejemplo en donde el comando cambia el prompt ''# '' establecido por defecto, a ''$ '':

''# '' to ''$ '': # export PS1="$ " $


Observa cmo el prompt cambi a $? Usted puede colocar aqu cualquier caracter para cambiar el prompt que establezca por defecto. Las comillas dobles no son necesarias pero como queremos colocar un espacio despus del signo ''$'', debemos escribir las comillas al comienzo y al final. Entonces eso es todo para mostrar el prompt en un caracter predefinido o una cadena de caracteres? En realidad no. Usted tambin puede incluir smbolos especiales en la variable para mostrar valores especiales. Por ejemplo, el smbolo \u muestra el nombre de usuario que ha iniciado sesin y \h muestra el nombre de host. Si utilizamos estos dos smbolos, el prompt puede personalizarse para mostrar quin ha iniciado sesin y dnde:

$export PS1="\u@\h# " oracle@oradba1#


Esto muestra el prompt tal como Oracle inici sesin en el servidor: oradba1 y es suficiente para recordarle quin es y en dnde se encuentra. Tambin puede personalizar el prompt utilizando otro smbolo, \W, que muestra el basename del directorio actual. Aqu vemos como aparece el prompt ahora:

# export PS1="\u@\h \W# "

oracle@oradba1 ~#
El directorio actual es HOME; por lo tanto ste se muestra como ''~''. Cuando usted cambia a un directorio distinto, ste tambin cambia. Agregar el directorio actual es una buena manera de recordarle en dnde se encuentra y cules son las consecuencias de sus acciones. Ejecutar rm * produce un impacto diferente en /tmp que si usted se encontrara en /home/oracle no es as? Existe tambin otro smbolo - \w. Pero tenga en cuenta que hay una gran diferencia entre \w y \W. La ltima produce el basename del directorio actual mientras que la anterior muestra todo el directorio:

oracle@oradba1 11:59 AM db1# export PS1="\u@\h \@ \w# " oracle@oradba1 12:01 PM /opt/oracle/product/11gR2/db1#
Nota la diferencia? En el prompt anterior, en donde se utiliz \W, se mostr solo el directorio db1, que es el basename. En el siguiente prompt, en donde se utiliz \w, se despleg el directorio completo /opt/oracle/product/11gR2/db1. En muchos casos mostrar el nombre del directorio completo en el prompt puede resultar de gran ayuda. Supongamos que usted tiene tres Oracle Homes. Cada una tendr un subdirectorio denominado db1. Cmo sabr entonces en dnde se encuentra exactamente si solo se despliega ''db1''? Mostrar el directorio completo no dejar lugar a dudas. No obstante, mostrar el directorio completo har que el prompt sea ms largo, lo cual podra generar ciertos inconvenientes. El smbolo ''\@'' muestra el tiempo real con el formato horas:minutos AM/PM:

# export PS1="\u@\h \@ \W# " oracle@oradba1 11:59 AM db1#


Aqu vemos algunos otros smbolos que usted puede utilizar en la variable shell PS1: \! \d \H \T \A \t El nmero de comando en el historial (se explicar ms adelante) La fecha en formato Da y Mes El nombre del host con el nombre de dominio. \h es el nombre de host sin el dominio Lo mismo que \@ pero incluyendo segundos. El tiempo en horas:minutos, como en el formato \@, pero en un formato de 24 horas Lo mismo que \A pero incluyendo los segundos incluidos

IFS
Esta variable ordena al shell tratar a las variables del shell como un conjunto o por separado. Si desea hacerlo por separado, el valor establecido para la variable IFS se utiliza como separador. De ah el nombre Input Field Separator (IFS). Para demostrarlo, definamos una variable como se muestra a continuacin.

# pfiles=initODBA112.ora:init.ora
En realidad, stos son dos archivos: initODBA112.ora e init.ora. Ahora, si quiere desplegar la primera lnea de cada uno de estos archivos, deber utilizar el comando head -1.

# head -1 $pfiles head:cannot open `initODBA112.ora:init.ora' for reading: No such file or directory
El output lo dice todo; el shell interpret la variable en su totalidad: `initODBA112.ora:init.ora', que no corresponden al nombre de ningn archivo. Por eso el comando head falla. Si el shell interpret el '':'' como algn tipo de separador, tendra que haber realizado el trabajo adecuadamente. Por lo tanto, eso es lo que debemos hacer al establecer la variable IFS:

# export IFS=":" # head -1 $pfiles ==> initODBA112.ora <== # first line of file initODBA112.ora ==> init.ora <== # first line of file init.ora
Ahora s. El shell expandi el comando head -1 $pfiles a head -1 initODBA112.ora y head -1 init.ora, y por lo tanto, el comando se ejecut correctamente.

PATH
Cuando usted utiliza un comando en Linux, este se encuentra en un shell -como puedo observarse en el comando kill, de la Parte 4- o puede tratarse de un archivo ejecutable. Si es un archivo ejecutable, cmo saber en dnde se encuentra? Tome por ejemplo el comando rm, el cual elimina algunos archivos. El comando puede obtenerse desde cualquier directorio. Por supuesto que el archivo ejecutable rm no existe en todos los directorios, entonces cmo sabe Linux en dnde buscar? La variable PATH mantiene las localizaciones en donde el shell debe buscar ese ejecutable. Aqu vemos un ejemplo de una configuracin PATH:

# echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:.


Cuando usted ejecuta un comando como rm, el shell buscan un archivo rm en estas localizaciones, en el siguiente orden:

/usr/kerberos/bin /usr/local/bin /bin /usr/bin /usr/X11R6/bin . (the current directory)


Si el archivo no se encuentra en ninguna de estas localizaciones, el shell devuelve un mensaje de error -bash: rm: command not found. Si usted desea agregar ms localizaciones a la variable PATH, hgalo utilizando '':'' como separador. Nota algo interesante arriba? La localizacin ''directorio actual'' se establece al final, no al comienzo. El sentido comn puede sugerirle que lo coloque al principio para que el shell busque primero un archivo ejecutable en el directorio actual, antes de buscarlo en otro lado. Colocarlo al final har al shell busque en el directorio actual, al finalizar el proceso. Pero hay alguna alternativa mejor?

Los expertos recomiendan que usted coloque el directorio actual (.) al final del comando PATH, no al comienzo. Por qu? Esta prctica es para una mayor seguridad. Supongamos que usted quiera experimentar algunas ideas para mejorar los comandos shell comunes y sin advertirlo deja ese archivo en su directorio de origen. Cuando usted inicie sesin, se encontrar en el directorio de origen y cuando ejecute ese comando, usted no ejecutar el comando comn sino el archivo ejecutable en su directorio de origen. Esto podra ser desastroso en algunos casos. Supongamos que usted est utilizando una nueva versin del comando ''cp'' y hay un archivo llamado cp en su directorio de origen. Este archivo posiblemente haga algn dao. Si usted tipea ''cp somefile anotherfile'', su versin del archivo cp ser ejecutada, causando daos. Colocando el directorio actual al final, se ejecuta el comando ''cp'' normal, evitando dicho riesgo. Tambin evita el riesgo de que algn hacker coloque algn archivo de comando maligno como comando comn. Algunos expertos incluso sugieren eliminar el ''.'' del PATH para evitar cualquier ejecucin involuntaria. Si usted ha ejecutado algo en el directorio actual, simplemente utilice la anotacin ./ como en este caso:

# ./mycommand
Esto ejecuta un archivo denominado mycommand en el actual directorio.

CDPATH
Es muy similar a PATH, esta variable extiende el alcance del comando cd ms all del directorio actual. Por ejemplo, cuando usted tipea el comando cd como se muestra abajo:

# cd dbs -bash: cd: dbs: No such file or directory


Tiene sentido ya que el directorio dbs no existe en el directorio actual. Se encuentra bajo /opt/oracle/product/11gR2/db1. Es por ese motivo que el comando cd falla. Usted puede por supuesto ir al directorio /opt/oracle/product/11gR2 y luego ejecutar con xito el comando cd. Si desea incrementar el alcance para incluir /opt/oracle/product/11gR2/db1, puede emitir:

# export CDPATH=/opt/oracle/product/11gR2/db1
Ahora, si usted emite el comando cd desde cualquier directorio:

# cd dbs /opt/oracle/product/11gR2/db1/dbs # pwd /opt/oracle/product/11gR2/db1/dbs


El comando cd ahora busca otros directorios para ese subdirectorio. Existen otras variables; pero stas son las ms utilizadas y usted debera saber dominarlas.

SET

Este comando controla el comportamiento del shell. Tiene muchas opciones y argumentos pero explicar los ms importantes. Un error muy comn que las personas cometen cuando sobrescriben comandos como cp y mv es sobrescribir los archivos correctos sin darse cuenta. Usted puede evitar ese riesgo al utilizar un ''alias'' (como se muestra en la Parte 1 de esta serie), por ej., utilizando mv i en vez de mv. No obstante, cmo puede evitar que alguien o algn script sobrescriba los archivos utilizando el operador de re-direccionamiento (''>'')?

Veamos un ejemplo. Supongamos que usted tiene un archivo denominado very_important.txt. Alguien (o algn script) involuntariamente utiliz algo como:

# ls -l > very_important.txt
El archivo inmediatamente se sobrescribi y usted pierde los contenidos originales del archivo. Para evitar este riesgo, usted puede utilizar el comando set con la opcin -o noclobber como se muestra abajo:

# set -o noclobber
Luego de este comando, si alguien intenta sobrescribir el archivo:

# ls -l > very_important.txt -bash: very_important.txt: cannot overwrite existing file


El shell ahora evita que se sobrescriba un archivo existente. Qu sucedera si desea sobrescribirlo? Usted puede utilizar el operador >|.

# ls -l >| very_important.txt
Para desactivarlo:

# set +o noclobber
El comando set es tambin muy til para utilizar el editor vi para editar comandos. Ms adelante, en este documento aprender a controlar los comandos que usted ha generado y cmo pueden ser reejecutados. Una manera rpida de reejecutar el comando es repitiendo los comandos utilizando el editor vi. Para que ste ejecute este comando primero:

# set -o vi
Ahora supongamos que usted est buscando un comando que contenga la letra ''v'' (como en vi, o vim, etc.). Para buscar el comando, ejecute estas teclas. Las teclas que deben presionarse se encuentran dentro del corchete:

# [Escape Key][/ key][v key][ENTER Key]


Esto muestra el ltimo comando ejecutado que contenga la letra ''v''. El ltimo comando en este caso fue set o vi; por lo tanto eso aparece en el command prompt.

# set -o vi
Si ese no es el comando que usted est buscando, presione la tecla ''n'' para obtener el siguiente comando ms reciente. De esta manera usted puede recorrer todos los comandos ejecutados con la letra ''v''. Cuando usted ve el comando, puede presionar [tecla ENTER] para ejecutarlo. La bsqueda puede ser explcita si lo desea. Supongamos que usted est buscando un comando mpstat ejecutado anteriormente. Todo lo que tiene que hacer es ingresar esta cadena de bsqueda ''mpstat'':

# [Escape Key][/ key]mpstat[ENTER Key]


Supongamos que el comando de arriba muestra mpstat 5 5 y usted realmente desea ejecutar mpstat 10 10. En vez de retipearlo, puede editar el comando en el editor vi. Para hacerlo, presione [Tecla Escape] y la tecla [v], la cual colocar el comando en el editor vi. Ahora puede editar el comando que desee. Cuando lo guarda en vi presionando :wq, el comando modificado ser ejecutado.

TYPE

En la Parte 4 usted conoci al comando kill, que es un comando especial ya que es tanto una utilidad (un ejecutable en algunos directorios) y un shell incorporado. Adems, usted ya aprendi acerca de los alias en el documento anterior. Algunas veces hay ciertos comandos utilizados en shell scripts ''do'', ''done'', ''while'', por mencionar algunos, que no son realmente comandos. Ellos son denominados shell keywords. Pero cmo puede saber qu tipo de comando es? El comando type muestra eso precisamente. Aqu vemos cmo debemos utilizarlo para mostrar los tipos de comandos mv, do, fc y oh.

# type mv do fc oh mv is /bin/mv do is a shell keyword fc is a shell builtin oh is aliased to `cd $ORACLE_HOME'


Muestra claramente que mv es una utilidad (junto con su ubicacin), do es una clave utilizada dentro de los scripts, fc es un shell built-in y oh es un alias (y muestra el elemento al que se lo asocia).

HISTORY

Cuando usted inicia sesin en el sistema Linux generalmente ejecuta una variedad de comandos en el command prompt. Pero cmo sabe usted qu comandos ha ejecutado? Quizs quiera saberlo por varias razones desea reejecutarlo sin volver a tipearlo, quiere asegurarse de haber ejecutado el comando adecuado (por ej., elimin el archivo adecuado), quiere verificar qu comandos fueron emitidos, entre otros motivos. El comando history le brinda un historial de los comandos ejecutados.

# history 1064 cd dbs 1065 export CDPATH=/opt/oracle/product/11gR2/db1 1066 cd dbs 1067 pwd 1068 env 1069 env | grep HIST y as
Observe los nmeros antes de cada comando. Este es el nmero de comando o evento. Usted aprender a utilizar esta caracterstica ms adelante. Si desea desplegar solo unas pocas lneas del historial en vez de todas las que se encuentran disponibles, por ej., los cinco comandos ms recientes:

# history 5
La mayor utilidad del comando history realmente proviene de su capacidad de reejecutar un comando sin volver a tipearlo. Para ello, ingrese la marca ! seguida del evento o nmero de comando que precede al nombre del comando en el output del historial. Para reejecutar el comando cd dbs que se muestra en el nmero 1066, usted puede emitir:

# !1066 cd dbs /opt/oracle/product/11gR2/db1/dbs


El comando !! (doble signo de exclamacin) ejecuta el ltimo comando ejecutado. Tambin puede agregar una cadena luego del comando !, lo cual reejecuta el ltimo comando con el patrn como la cadena en la posicin inicial. El siguiente comando reejecuta el comando ms reciente que comienza con cd:

# !cd cd dbs /opt/oracle/product/11gR2/db1/dbs

Qu sucede si desea reejecutar un comando que contiene una cadena (y no que comienza con una)? El modificador ? realiza una asociacin de patrones en los comandos. Para buscar un comando que se relacione con l, emita:

# !?network? cd network /opt/oracle/product/11gR2/db1/network


Tambin puede modificar el comando a ser reejecutado. Por ejemplo, supongamos que anteriormente haba establecido un comando cd /opt/oracle/product/11gR2/db1/network y desea reejecutarlo luego de agregar /admin al final, usted emitir:

# !1091/admin cd network/admin /opt/oracle/product/11gR2/db1/network/admin

FC

Este comando es un shell built-in utilizado para mostrar el historial del comando, como en history. La opcin ms comn es -l (la letra ''L'', no el nmero ''1'') que muestra los 16 comandos ms recientes:

# fc -l 1055 echo $pfiles 1056 export IFS= ... and so on ... 1064 cd dbs 1065 export CDPATH=/opt/oracle/product/11gR2/db1 1066 cd dbs
Tambin puede pedir a fc mostrar unos pocos comandos dando un rango de los nmeros de eventos, por ej., 1060 y 1064:

# fc -l 1060 1064 1060 pwd 1061 echo CDPATH 1062 echo $CDPATH 1063 cd 1064 cd dbs
La opcin -l tambin requiere de otros dos parmetros la cadena para realizar una asociacin de patrones. Aqu vemos un ejemplo en donde usted puede desplegar el historial de comandos que comienza con la palabra echo hasta el comando ms reciente que comienza con pwd.

# fc -l echo pwd 1062 echo $CDPATH 1063 cd 1064 cd dbs 1065 export CDPATH=/opt/oracle/product/11gR2/db1 1066 cd dbs 1067 pwd
Si desea reejecutar el comando cd dbs (nmero de comando 1066), puede simplemente ingresar ese nmero despus de fc con la opcin -s:

# fc -s 1066 cd dbs

/opt/oracle/product/11gR2/db1/dbs
Otro importante uso del comando fc -l es la sustitucin de comandos. Supongamos que usted desea ejecutar un comando similar a 1066 (cd dbs) pero desea emitir cd network, no cd dbs, puede utilizar el argumento de sustitucin como se muestra a continuacin:

# fc -s dbs=network 1066 cd network /opt/oracle/product/11gR2/db1/network


Si omite la opcin -s, como se muestra abajo:

# fc 1066
Se abre el archivo vi con el comando cd dbs dentro, el cual puede editar y ejecutar.
CPIO

Considere esta situacin: usted desea enviar un grupo de archivos a alguien o a alguna parte y no quiere correr el riesgo de que sus archivos se pierdan. Qu puede hacer para asegurarse de que eso no suceda? Es simple. Si usted pone todos estos archivos en uno solo y enva este nico archivo a su destino, puede estar seguro de que todos los archivos van a llegar de manera segura. El comando cpio tiene tres opciones principales:

-o (create) para crear un fichero (archive) -i (extract) para extraer archivos de un fichero -p (pass through) para copiar archivos a un directorio diferente Cada opcin tiene su propio grupo de subopciones. Por ejemplo, la opcin -c se aplica para el caso de -i y -o pero no en caso de -p. Veamos los grupos de opciones ms importantes y cmo se utilizan. La opcin -v se utiliza para desplegar un output completo, lo cual puede ser til en casos en que desee obtener un feedback definido sobre lo que est sucediendo. Primero, veamos cmo crear un fichero a partir de un grupo de archivos. Aqu colocamos todos los archivos con la extensin ''trc'' en un directorio especfico y luego los colocamos en un archivo denominado myfiles.cpio:

$ ls *.trc | cpio -ocv > myfiles.cpio +asm_ora_14651.trc odba112_ora_13591.trc odba112_ora_14111.trc odba112_ora_14729.trc odba112_ora_15422.trc 9 blocks
La opcin -v fue utilizada para obtener el output completo y cpio nos mostr cada archivo que fue incorporado al fichero. La opcin -o se utiliz para crear un fichero. La opcin -c se utiliz para que cpio escriba la informacin del encabezado en ASCII, lo cual facilita el traspaso entre plataformas. Otra opcin es -O que acepta el output archive file como parmetro.

# ls *.trc | cpio -ocv -O mynewfiles.cpio


Para extraer los archivos:

$ cpio -icv < myfiles.cpio +asm_ora_14651.trc

cpio: odba112_ora_13591.trc not created: newer or same age version exists odba112_ora_13591.trc
Aqu las opciones -v y i son utilizadas para obtener un output completo y para la extraccin de archivos desde los ficheros. La opcin c ha sido utilizada para ordenar a cpio a que lea la informacin del encabezado como ASCII. Cuando cpio extrae un archivo y ste ya existe (como en el caso de odba112_ora_13591.trc), no sobrescribe el archivo; sino que simplemente lo pasa por alto con un mensaje. Para que lo sobrescriba, utilice la opcin -u.

# cpio -icvu < myfiles.cpio


Para desplegar solamente los contenidos sin tener que extraerlos, utilice la opcin t junto con i (extraccin):

# cpio -it < myfiles.cpio +asm_ora_14651.trc odba112_ora_13591.trc odba112_ora_14111.trc


Qu sucede si usted extrae un archivo que ya existe? Y an as desea extraerlo pero tal vez con un nombre distinto. Un ejemplo sera cuando usted intenta recuperar un archivo denominado alert.log (que es un archivo log para una instancia Oracle) y no quiere sobrescribir el archivo alert.log actual. Una de las opciones muy tiles es r, que le permite reasignar un nombre a los archivos que se extraen, de manera interactiva.

# cpio rename rename rename

-ir < myfiles.cpio +asm_ora_14651.trc -> a.trc odba112_ora_13591.trc -> b.trc odba112_ora_14111.trc -> [ENTER] which leaves the name alone

Si usted cre un fichero cpio de un directorio y desea extraer la misma estructura de directorio, utilice la opcin d mientras lo extrae. Mientras lo crea, puede agregar archivos a un fichero existente (append) utilizando la opcin -A como se muestra debajo:

# ls *.trc | cpio -ocvA -O mynewfiles.cpio


Los comandos tienen muchas otras opciones; no obstante, usted solo necesita conocer algunas de stas para poder utilizarlas de manera efectiva.

TAR

Otro mecanismo para crear un fichero es tar. Originalmente creado para archivar unidades de cinta (de ah el nombre Tape Archiver), tar es un comando muy conocido por su simplicidad. Ofrece tres opciones principales

-c para crear un fichero (archive) -x para extraer archivos de un fichero -t para desplegar los archivos de un fichero De esta forma es como se crea un fichero tar. La opcin f le permite asignar un nombre a un output file que tar crear como fichero. En este ejemplo estamos creando un fichero denominado myfiles.tar a partir de todos los archivos con extensin ''trc''.

# tar -cf myfiles.tar *.trc

Una vez creado, usted puede enumerar los contenidos de un fichero utilizando la opcin t.

# tar tf myfiles.tar +asm_ora_14651.trc odba112_ora_13591.trc odba112_ora_14111.trc odba112_ora_14729.trc odba112_ora_15422.trc


Para mostrar el detalle de los archivos, utilice la opcin v (completa):

# tar tvf myfiles.tar -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba

1150 654 654 654 654

2008-12-30 2008-12-26 2008-12-26 2008-12-26 2008-12-26

22:06:39 15:17:22 15:19:29 15:21:36 15:24:32

+asm_ora_14651.trc odba112_ora_13591.trc odba112_ora_14111.trc odba112_ora_14729.trc odba112_ora_15422.trc

Para extraer archivos del fichero, utilice la opcin x. Aqu vemos un ejemplo (la opcin v ha sido utilizada para mostrar el output completo):

# tar xvf myfiles.tar

ZIP

La compresin es una parte muy importante de la administracin de Linux. Quizs usted tenga que comprimir varios archivos para hacer espacio a otros nuevos, o para enviarlos por email y as sucesivamente. Linux ofrece numerosos comandos de compresin; aqu examinaremos los ms comunes: zip y gzip. El comando zip produce un archivo nico al consolidar otros archivos y comprimirlos en un archivo zip. Aqu vemos un ejemplo del comando:

# zip myzip *.aud


Se genera un archivo denominado myzip.zip con todos los archivos en el directorio asignado con la extensin a .aud. El zip acepta varias opciones. La ms comn es -9, que ordena al zip realizar la mayor compresin, mientras se sacrifican los ciclos del CPU (y por lo tanto es el proceso ms largo). La otra opcin, -1, ordena justamente lo contrario: realizar la compresin lo ms rpido posible aunque se sacrifique la capacidad de compresin. Tambin puede proteger el archivo zip al encriptarlo con una contrasea. Sin la contrasea adecuada, el archivo zip no puede ser desencriptado ( unzip). Esto se realiza con la opcin e (encriptar):

# zip -e ze *.aud Enter password: Verify password: adding: odba112_ora_10025_1.aud (deflated 32%) adding: odba112_ora_10093_1.aud (deflated 31%) ... y as ..
La opcin -P permite dar una contrasea a la lnea de comando. Debido a que esto permite a otros usuarios ver la contrasea en plaintext al controlar los procesos o en el historial de comandos, la opcin -e no es muy recomendada.

# zip -P oracle zp *.aud updating: odba112_ora_10025_1.aud (deflated 32%) updating: odba112_ora_10093_1.aud (deflated 31%)

updating: odba112_ora_10187_1.aud (deflated 31%) y as ..


Tambin puede controlar la integridad de los archivos zip utilizando al opcin -T. Si el zipfile se encript con una contrasea, debe proporcionarla.

# zip -T ze [ze.zip] odba112_ora_10025_1.aud password: test of ze.zip OK


Por supuesto que cuando usted comprime (zip) archivos, luego es necesario descomprimirlos (unzip). Y el comando es unzip. Aqu vemos un simple ejemplo del uso del comando unzip para descomprimir el archivo zip, ze.zip.

# unzip myfiles.zip
Si el archivo zip ha sido encriptado con una contrasea, se le pedir esta contrasea. Cuando la ingrese, sta no se repetir en la pantalla.

# unzip ze.zip Archive: ze.zip [ze.zip] odba112_ora_10025_1.aud password: password incorrect--reenter: password incorrect--reenter: replace odba112_ora_10025_1.aud? [y]es, [n]o, [A]ll, [N]one, [r]ename: N
En el ejemplo de arriba, usted ingres la contrasea incorrecta primero; por lo tanto el sistema volvi a pedrsela. Luego de ingresarla correctamente, el comando unzip descubri que ya existe un archivo denominado odba112_ora_10025_1.aud; por lo tanto unzip requiere de su accin. Vea las alternativas tambin tiene la posibilidad de asignar un nuevo nombre para renombrar el archivo descomprimido. Recuerda el zip protegido con contrasea que fue trasmitido en la lnea de comando con el comando zip P? Usted puede descomprimir este archivo al trasmitir el comando en la lnea de comando tambin, utilizando la misma opcin P.

# unzip -P mypass zp.zip


La opcin -P difiere de la opcin -p. La opcin -p ordena la descompresin para descomprimir archivos del output estndar, el cual puede luego ser redirigido a otro archivo o programa. Lo atractivo del comando zip es que es el ms porttil. Usted puede comprimirlo en Linux y descomprimirlo en OS X o Windows. La utilidad de descompresin est disponible para varias plataformas. Supongamos que usted ha comprimido varios archivos en varios subdirectorios que se encuentran en un directorio. Cuando usted descomprime este archivo, se crean los subdirectorios que sean necesarios. Si desea ver todos los archivos a ser descomprimidos en el actual directorio, utilice en cambio la opcin -j.

# unzip -j myfiles.zip
Una de las combinaciones ms tiles es utilizar el comando tar para consolidar los archivos y comprimir el archive file resultante por medio del comando zip. En lugar de realizar un proceso de dos pasos con tar y zip, puede pasar el output de tar a zip como se muestra a continuacin:

# tar cf - . | zip myfiles adding: - (deflated 90%)


El caracter especial ''-'' en zip representa el nombre del archivo. El comando tar de arriba crea un zip llamado myfiles.zip. De manera similar, mientras descomprime el archivo descomprimido y extrae los archivos del fichero zip, usted puede eliminar el proceso de dos pasos y realizar ambos en uno solo:

# unzip -p myfiles | tar xf -

GZIP

El comando gzip (denominacin corta de GNU zip), es otro comando para comprimir archivos. Intenta reemplazar la antigua utilidad de compresin UNIX. La principal diferencia prctica entre zip y gzip es que la primera crea un archivo zip a partir de un conjunto de archivos mientras que la ltima crea un archivo comprimido para cada archivo input. Vemos aqu un ejemplo:

# gzip odba112_ora_10025_1.aud
Observe que no pide un nombre para el archivo zip. El comando gzip toma cada archivo (por ej., odba112_ora_10025_1.aud) y simplemente crea un archivo zip denominado odba112_ora_10025_1.aud.gz. Asimismo, observe cuidadosamente este punto, se elimina el archivo original odba112_ora_10025_1.aud. Si usted pasa un grupo de archivos como parmetros al comando:

# gzip *
Se crea un archivo zip con la extensin .gz para cada uno de estos archivos presentes en el directorio. Al principio, el directorio contena estos archivos:

a.txt b.pdf c.trc


Despus de utilizar el comando gzip *, los contenidos del directorio sern:

a.txt.gz b.pdf.gz c.trc.gz


Tambin se utiliza el mismo comando para descomprimir (o uncompress, o decompress). La opcin es, intuitivamente, -d para descomprimir los archivos comprimidos por gzip Para verificar los contenidos del archivo comprimido con gzip y el ndice de compresin, puede utilizar la opcin -l. En verdad no comprime ni descomprime nada, simplemente muestra los contenidos.

# gzip -l * compressed 698 464 466 466 463 2557

uncompressed 1150 654 654 654

ratio 42.5% 35.2% 34.9% 34.9%

uncompressed_name +asm_ora_14651.trc odba112_ora_13591.trc odba112_ora_14111.trc odba112_ora_14729.trc

654 35.3% odba112_ora_15422.trc 3766 33.2% (totals

Tambin puede comprimir los archivos en un directorio, utilizando la opcin (-r). Para comprimir todos los archivos que se encuentran en el directorio log, utilice:

# gzip -r log
Para controlar la integridad de un archivo comprimido con gzip, utilice la opcin -t:

# gzip -t myfile.gz

Cuando desea crear un nombre distinto para el archivo comprimido con gzip, no el .gz establecido por defecto, debera utilizar la opcin c. Esto ordena al comando gzip escribir el output estndar al cual puede ser direccionado el archivo. Puede utilizar la misma tcnica para colocar ms de un archivo en el mismo archivo comprimido con gzip. Aqu vemos dos archivos comprimidos - odba112_ora_14111.trc, odba112_ora_15422.trc en el mismo archivo comprimido denominado 1.gz.

# gzip -c

odba112_ora_14111.trc odba112_ora_15422.trc > 1.gz

Observe cuando se despliega el contenido del archivo comprimido:

# gzip -l 1.gz compressed

uncompressed ratio uncompressed_name 654 -35.9% 1

El ndice de compresin mostrado simplemente se aplica al ltimo archivo en el listado (es por eso que muestra un tamao menor para el original que para el comprimido). Cuando usted descomprime este archivo, ambos archivos originales se despliegan uno tras otro y ambos se descomprimen adecuadamente. La opcin -f obliga al output a sobrescribir los archivos, si ese es el caso. La opcin v muestra el output de manera ms completa. Aqu vemos un ejemplo:

# gzip -v *.trc +asm_ora_14651.trc: odba112_ora_13591.trc: odba112_ora_14111.trc: odba112_ora_14729.trc: odba112_ora_15422.trc:

42.5% 35.2% 34.9% 34.9% 35.3%

------

replaced replaced replaced replaced replaced

with with with with with

+asm_ora_14651.trc.gz odba112_ora_13591.trc.gz odba112_ora_14111.trc.gz odba112_ora_14729.trc.gz odba112_ora_15422.trc.gz

Un comando relacionado es el comando zcat. Si desea desplegar el contenido del archivo comprimido con gzip sin descomprimirlo primero, utilice el comando zcat:

# zcat 1.gz
El comando zcat es similar a gzip -d | cat en el archivo; pero no descomprime verdaderamente el archivo. Como el comando zip, gzip tambin acepta opciones para los grados de compresin:

# gzip -1 myfile.txt Least compression consuming least CPU and fastest # gzip -9 myfile.txt Most compression consuming most CPU and slowest
El comando gunzip est disponible, y es equivalente a gzip -d (para descomprimir un archivo comprimido con gzip)

ADMINISTRACIN

DE

LINUX

EN UN

ENTORNO VIRTUAL

Linux se utiliza en los centros de datos de todo el mundo. Tradicionalmente, el concepto de servidor se relaciona con una mquina fsica distinta de otras mquinas fsicas. Esto ha sido as hasta la llegada de la virtualizacin, en donde un nico servidor poda ser dividido para as convertirse en varios servidores virtuales, cada uno como si funcionaran de manera independientes con la red. Contrariamente, un ''grupo'' de servidores integrado por varios servidores fsicos puede dividirse a medida que sea necesario. Debido a que ya no existe una relacin uno-a-uno entre un servidor fsico y uno lgico o virtual, algunos conceptos podran resultar confusos. Por ejemplo, qu es la memoria disponible? Es la memoria disponible de: (1) el servidor virtual, (2) el servidor fsico individual desde donde el servidor virtual se ha dividido, o (3) el grupo total de servidores del que el servidor virtual es parte? Es as entonces que los comandos de Linux pueden comportarse de manera un poco distinta cuando se ejecutan en un entorno virtual. Adems, el entorno virtual tambin debe ser administrado, y para ello existen algunos comandos que se

especializan en la administracin de infraestructuras virtualizadas. En esta seccin usted conocer los comandos especializados y las actividades relacionadas al entorno virtual. Utilizaremos una Oracle VM como ejemplo. Uno de los componentes clave de la virtualizacin en un entorno Oracle VM es Oracle VM Agent, el cual debe estar activo para que Oracle VM funcione completamente. Para controlar si el agente est activo, debe ir al servidor de Administracin (provm1, en este caso) y utilizar el comando service:

[root@provm1 vnc-4.1.2]# service ovs-agent status ok! process OVSMonitorServer exists. ok! process OVSLogServer exists. ok! process OVSAgentServer exists. ok! process OVSPolicyServer exists. ok! OVSAgentServer is alive.
El output muestra claramente que todos los procesos clave se encuentran activos. Si no estn activos es porque pueden haberse desconfigurado y quizs usted quiera volver a configurarlos (o configurarlos por primera vez):

# service ovs-agent configure


El mismo comando service tambin se utiliza para iniciar, reiniciar y frenar los procesos del agente:

service ovs-agent start service ovs-agent restart service ovs-agent stop


No obstante, la mejor manera de administrar el entorno es por medio de la consola GUI, la cual se basa en la Web. Manager Webpage est disponible en el servidor Admin, en el puerto 8888, por defecto. Usted puede obtenerlo al ingresar lo siguiente en cualquier navegador de Web (suponiendo que el nombre del servidor admin es oradba2).

http://oradba2:8888/OVS Inicie sesin como admin y la contrasea que usted cre durante la instalacin. Esto le trae la siguiente pantalla:

La parte inferior de la pantalla muestra los servidores fsicos del grupo de servidores. Aqu el grupo de servidores se denomina provmpool1 y el IP del servidor es 10.14.106.0. Desde esta pantalla, usted puede reiniciar el servidor, apagarlo, quitarlo del grupo y editar los detalles del servidor. Tambin puede agregar un nuevo servidor fsico a este grupo al hacer click en el botn Add Server.Al hacer click en la direccin de IP del servidor, aparecen los detalles de ese servidor fsico, como se muestra debajo:

Tal vez lo ms til sea la etiqueta Monitor. Si hace click en ella, se muestra la utilizacin de los recursos del servidor CPU, disco y memoria, como se muestra abajo. Desde esta pgina usted puede controlar visualmente si los recursos estn siendo desaprovechados o si se estn utilizando en exceso, o si usted necesita agregar ms servidores fsicos, entre otras cosas:

Volviendo a la pgina principal, la etiqueta Server Pools muestra los numerosos grupos de servidores definidos. Aqu puede definir otro grupo, finalizarlo, restablecer el grupo y as sucesivamente:

Si desea agregar un usuario u otro administrador, usted debe hacer click en la etiqueta Administration. Existe un administrador por defecto denominado ''admin''. Usted puede controlar todos los admins aqu y establecer sus prioridades, como las direcciones de email, los nombres, etc.:

Tal vez la actividad ms frecuente que usted realice sea la administracin de mquinas virtuales. Casi todas las funciones se encuentran el la etiqueta Virtual Machines en la pgina principal. sta muestra las VM creadas hasta el momento. Aqu vemos una captura de pantalla que muestra dos mquinas denominadas provmlin1 y provmlin2:

La VM denominada provmlin2 se muestra como ''powered off'', es decir, aparece como inactivo para los usuarios finales. La otra provmlin1 presenta algn tipo de error. Primero comencemos con VM provmlin2. Seleccione el botn radio cerca de ste y haga click en el botn Power On. Despus de un momento se mostrar como ''Running'', tal como se ve abajo:

Si hace click en el nombre VM, podr ver los detalles de VM, como se observa debajo:

Desde la pantalla de arriba podemos saber qu VM ha sido asignada con 512MB de RAM; ejecuta Oracle Enterprise Linux 5; solo presenta un ncleo, etc. La pgina tambin brinda informacin clave, por ejemplo, que el puerto VNC port: 5900. Utilizando esto, usted puede poner en funcionamiento la terminal VNC de esta mquina virtual. Aqu he utilizado un visualizador VNV, con el nombre de host provm1 y el puerto 5900:

Esto inicia la sesin VNC en el servidor. Ahora puede iniciar una sesin terminal:

Debido a que el puerto VNC 5900 apunta a la mquina virtual denominada provmlin4, aparece la terminal en esa VM. Ahora usted puede emitir sus comandos Linux en esta terminal.

XM

En el servidor sobre el que se ejecutan las mquinas virtuales, los comandos de medicin de desempeo como uptime (descriptos en la Parte 3) y top (descriptos en la Parte 2) tienen distintos significados en comparacin con sus contrapartes del servidor fsico. En un servidor fsico el uptime se refiere a la cantidad de tiempo en que el servidor ha estado activo, mientras que en un mundo virtual podra ser ambiguo refirindose a los servidores virtuales individuales en ese servidor. Para medir el desempeo del grupo de servidores fsicos, utilice un comando distinto, xm. Los comandos son emitidos desde este comando principal. Por ejemplo, para enumerar los servidores virtuales, puede utilizar la lista del comando xm:

[root@provm1 ~]# xm list Name 22_provmlin4 Domain-0 [root@provm1 ~]# xm uptime Name 22_provmlin4 Domain-0

ID 1 0

Mem VCPUs 512 1 532 2

State Time(s) -b---27.8 r----- 4631.9

Para medir el uptime, usted podra utilizar xm uptime:

ID 1 0

Uptime 0:02:05 8:34:07

Los dems comandos disponibles en xm se muestran a continuacin. Muchos de estos comandos pueden tambin ejecutarse a travs de GUI.

console create new delete destroy dump-core

Adjunta un elemento a la consola de <Domain>. Crea un dominio basado en <ConfigFile>. Agrega un dominio a la gestin de dominio Xend Elimina un dominio desde la gestin de dominio Xend. Finaliza un dominio inmediatamente. Aplica

dump core para un dominio especfico. help Despliega este mensaje.

list mem-set migrate pause reboot restore resume save shell shutdown start suspend top unpause uptime vcpu-set dominio.

Enumera la informacin sobre todos/algunos dominios. Establece el uso de memoria actual para un dominio. Migra un dominio a otra mquina. Pausa la ejecucin de un dominio. Reinicia un dominio. Restablece un dominio desde el estado guardado. Reanuda un dominio administrado por Xend. Guarda el estado de un dominio para restablecerlo luego. Lanza un shell interactivo. Cierra un dominio. Inicia un dominio administrado por Xend. Suspende un dominio administrado por Xend. Monitorea un host y los dominios en tiempo real. Reanuda un dominio en pausa. Imprime el tiempo de actividad para un dominio. Establece la cantidad de VCPUs activos permitidos para el

Veamos los ms utilizados. Adems de uptime, usted tambin puede estar interesado en el desempeo del sistema por medio del comando top. Este comando xm top acta como el comando top en el shell del servidor regular se actualiza automticamente, tiene algunas claves para mostrar distintos tipos de mediciones como CPU, I/O, Red, etc. Aqu vemos el output del comando xm top bsico:

xentop - 02:16:58 Xen 3.1.4 2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown Mem: 1562776k total, 1107616k used, 455160k free CPUs: 2 @ 2992MHz NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k)MAXMEM(%) VCPUS NETS 22_provmlin4 --b--27 0.1 524288 33.5 1048576 67.1 1 . .. Domain-0 -----r 4647 23.4 544768 34.9 no limit n/a 2 . .. 22_provmlin4 --b--Domain-0 -----r 1 8 9 68656 154 2902548 1 0 06598 0 1207 0 0 0

Muestra estadsticas como el porcentaje de CPU utilizado, la memoria utilizada, etc., para cada Mquina Virtual. Si presiona N, ver las actividades de red como se muestra a continuacin:

xentop - 02:17:18 Xen 3.1.4 2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown Mem: 1562776k total, 1107616k used, 455160k free CPUs: 2 @ 2992MHz Net0 RX: 180692bytes 2380pkts 0err 587drop TX: 9414bytes Domain-0 -----r 4650 22.5 544768 34.9 no limit n/a 2 8 68665 2902570 0 0 0 0 0 Net0 Net1 Net2 Net3 Net4 Net5 Net6 Net7 RX:2972232400bytes RX: 0bytes RX: 0bytes RX: 0bytes RX: 0bytes RX: 0bytes RX: 0bytes RX: 0bytes 2449735pkts 0pkts 0pkts 0pkts 0pkts 0pkts 0pkts 0pkts 0err 0err 0err 0err 0err 0err 0err 0err 0drop 0drop 0drop 0drop 0drop 0drop 0drop 0drop TX:70313906bytes TX: 0bytes TX: 0bytes TX: 0bytes TX: 0bytes TX: 0bytes TX: 0bytes TX: 0bytes ... ... ... ... ... ... ... ...

Net0 Net1 Net2 Net3 Net4 Net5 Net6 Net7

RX: RX: RX: RX: RX: RX: RX: RX:

1017641pkts 0pkts 0pkts 0pkts 0pkts 0pkts 0pkts 0pkts

0err 0err 0err 0err 0err 0err 0err 0err

0drop 0drop 0drop 0drop 0drop 0drop 0drop 0drop

Presionando V se ven las estadsticas de VCPU (CPU Virtual).

xentop - 02:19:02 Xen 3.1.4 2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown Mem: 1562776k total, 1107616k used, 455160k free CPUs: 2 @ 2992MHz NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS ... 22_provmlin4 --b--28 0.1 524288 33.5 1048576 67.1 ... NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID 1 1 9 282 1 06598 1220 0 VCPUs(sec): 0: 28s Domain-0 -----r 4667 n/a 2 8 68791 2902688 0 VCPUs(sec): 0: 2753s 1.6 00 1: 544768 0 1913s 34.9 0 no limit

Examinemos algunas actividades bastante comunes una de las cuales es la distribucin de la memoria disponible entre las VM. Supongamos que usted quiera tener cada VM de 256 MB de RAM, debera utilizar el comando xm mem-set como se muestra abajo. Luego debera utilizar el comando xm list para confirmarlo.

[root@provm1 ~]# xm mem-set 1 256 [root@provm1 ~]# xm mem-set 0 256 [root@provm1 ~]# xm list Name ID Mem VCPUs 22_provmlin4 1 256 1 Domain-0 0 256 2

State -b---r-----

Time(s) 33.0 4984.4

CONCLUSION
Con esto concluimos la extensa serie de cinco presentaciones sobre comandos avanzados de Linux. Como mencion al comienzo de esta serie, Linux tiene numerosos comandos que son tiles en muchos casos, y nuevos comandos que van desarrollndose e incorporndose gradualmente. Conocer todos los comandos disponibles no es tan importante como saber cules se adaptan mejor a sus necesidades. En esta serie he presentado y explicado algunos comandos necesarios para realizar la mayora de sus tareas diarias. Si usted practica estos pocos comandos, junto con sus opciones y argumentos, podr manejar cualquier infraestructura de Linux con facilidad. Gracias por leer esta serie y mucha suerte.

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