Documente Academic
Documente Profesional
Documente Cultură
1 1 1 1 1 1
4 4 4 4 4 4
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:
users dba
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
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:
users dba
# 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.
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
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.
# 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
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:
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:
< >
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 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:
# 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:
0, si los archivos son idnticos 1, si difieren Algn otro nmero que no sea cero, si la comparacin no pudo realizarse Un ejemplo:
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.
dba dba
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
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
chgrp
stat
Para conocer los atributos extendidos de un archivo, como fecha de ltimo acceso
file
diff
cmp
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
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:
# 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.
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.
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 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:
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.
has hs install
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:
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.
oinstall
1 1 1 1
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
$ 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:
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:
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
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
$ 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 -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:
$
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 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
$ mv oldname newname
oldnamenewnamerename
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 "*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.
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:
$ 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):
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.
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
18:46:13
up 11 days, 21:50,
5 users,
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:
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
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:
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
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:
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
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
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:
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 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:
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:
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
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:
<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):
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.
# 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
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
# 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
Flags U U U UG
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:
oracle-site.com: NXDOMAIN
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 -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:
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.
45 users,
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.
7:16,
4 users,
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.
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:
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):
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.
TIME
IDLE
PID COMMENT
. 00:26 old ?
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.
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
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:
from dual;
13:32 13:32
IDLE
Para descubrir las terminales del usuario que ya no estn en uso, utilice la opcin -d:
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.
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:
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:
TIME Feb 15
IDLE 13:31
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:
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
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
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.
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,
# 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:
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:
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
Si desea conversar con algn usuario en un servidor diferente prolin2 puede utilizar
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:
:0.0 -
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:
# 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:
# 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
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
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
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:
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:
[ -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
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
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.
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.
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'
'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:
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 -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
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)
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 -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 ''$ '':
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:
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:
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:
# export CDPATH=/opt/oracle/product/11gR2/db1
Ahora, si usted emite el comando cd desde cualquier directorio:
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
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:
# 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'':
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.
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:
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:
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 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.
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.
-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:
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''.
Una vez creado, usted puede enumerar los contenidos de un fichero utilizando la opcin t.
# tar tvf myfiles.tar -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba -rw-r----- oracle/dba
Para extraer archivos del fichero, utilice la opcin x. Aqu vemos un ejemplo (la opcin v ha sido utilizada para mostrar el output completo):
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 -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%)
# 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 -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:
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:
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
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:
------
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):
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
ID 1 0
Los dems comandos disponibles en xm se muestran a continuacin. Muchos de estos comandos pueden tambin ejecutarse a travs de GUI.
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
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 ... ... ... ... ... ... ... ...
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-----
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.