29/04/2011
Oigo en la TV a Rubalcaba, el Vicepresidente del Gobierno decir:
"Es el peor momento". "Esta EPA marca un máximo", "a partir de aquí, el paro bajará".
El que esta a su lado, el Ministro de trabajo Valeriano Gomez "yo creo que lo normal es pensar que hemos tocado techo".
Pues yo creo que deberían aportar algún dato objetivo que confirme su optimismo porque según la encuesta de población activa (EPA) que estaban analizando, en el primer trimestre del año 2011 se ha destruido mas empleo (256.500) que en todo el año 2010, así que imaginaros como es la gráfica.
"El paro ha llegado ya al nivel mas alto" dijo el presidente Zapatero el 27 de abril de 2010!!!!!
¿¿¿aquí no dimite nadie???
sábado, abril 30, 2011
miércoles, abril 20, 2011
Permitir el uso del crontab
Por defecto en HP-UX un usuario no tiene permitido el uso del cron.
Si intenta programar una tarea le suele dar un mensaje educado que dice: You are not authorized to use cron. Sorry.
Nos validamos como root.
Editamos /var/adm/cron/cron.allow
Y añadimos el usuario al que queremos permitir.
Si la cosa sigue sin funcionar podemos intentar reiniciar el demonio...
ps -ef|cron
kill -9 NumProceso
/usr/sbin/cron
Saludos,
Si intenta programar una tarea le suele dar un mensaje educado que dice: You are not authorized to use cron. Sorry.
Nos validamos como root.
Editamos /var/adm/cron/cron.allow
Y añadimos el usuario al que queremos permitir.
Si la cosa sigue sin funcionar podemos intentar reiniciar el demonio...
ps -ef|cron
kill -9 NumProceso
/usr/sbin/cron
Saludos,
Etiquetas:
documentacion,
hp-ux
lunes, abril 18, 2011
Comandos Cisco, encontrar un elemento a partir de una IP
No debería ocurrir, pero ocurre hasta en las mejores familias.
Vas a utilizar una IP, pero ves que está siendo utilizada por algún elemento, y no la tienes en tu base de datos de IP-s.
Identificar el elemento es prioritario ya que puede puede ser un punto de ataque a tu red.
Tanto en un escritorio Windows, como en Linux para obtener la dirección MAC a partir de la IP podemos hacer:
ping IP
arp -a
Luego iremos al switch y nos conectamos por Telnet:
telnet xx.xx.xx.xx
Password: yyyyyy
switch1: enable
Password: zzzzzz
#
Ahora ya podemos introducir multitud de comandos del switch Cisco que corresponda.
En esta URL podemos descargarnos los 12 Mb del manual PDF de un switch Cisco Catalyst 2960 (la que tenemos nosotros en el trabajo). También lo tenemos en formato HTML aquí.
El viejo Cisco Catalyst 2948 es otro de los que tenemos en el trabajo. Aquí en formato HTML.
Y ahora que nos hemos conectado al switch ¿qué hacemos?
En Ciscos viejos como el 2948, de esta forma:
sh cam direccionMAC
sh arp direccionIP
Nos darán el puerto al que está conectado el elemento.
En los Ciscos nuevos como el 2960:
show mac address
Nos dará la tabla de correspondencias entre MAC y puerto.
Si tenemos clara la MAC a buscar:
sh mac-address-table address direccionMAC
teniendo la dirección MAC el formato xxxx.xxxx.xxxx
Otros comandos de interés:
?
Muestra los comandos disponibles.
show int
show int status
sh etherchannel 6 detail
sh lacp 6 internal
sh lacp 6 neighbor
Saludos.
Vas a utilizar una IP, pero ves que está siendo utilizada por algún elemento, y no la tienes en tu base de datos de IP-s.
Identificar el elemento es prioritario ya que puede puede ser un punto de ataque a tu red.
Tanto en un escritorio Windows, como en Linux para obtener la dirección MAC a partir de la IP podemos hacer:
ping IP
arp -a
Luego iremos al switch y nos conectamos por Telnet:
telnet xx.xx.xx.xx
Password: yyyyyy
switch1: enable
Password: zzzzzz
#
Ahora ya podemos introducir multitud de comandos del switch Cisco que corresponda.
En esta URL podemos descargarnos los 12 Mb del manual PDF de un switch Cisco Catalyst 2960 (la que tenemos nosotros en el trabajo). También lo tenemos en formato HTML aquí.
El viejo Cisco Catalyst 2948 es otro de los que tenemos en el trabajo. Aquí en formato HTML.
Y ahora que nos hemos conectado al switch ¿qué hacemos?
En Ciscos viejos como el 2948, de esta forma:
sh cam direccionMAC
sh arp direccionIP
Nos darán el puerto al que está conectado el elemento.
En los Ciscos nuevos como el 2960:
show mac address
Nos dará la tabla de correspondencias entre MAC y puerto.
Si tenemos clara la MAC a buscar:
sh mac-address-table address direccionMAC
teniendo la dirección MAC el formato xxxx.xxxx.xxxx
Otros comandos de interés:
?
Muestra los comandos disponibles.
show int
show int status
sh etherchannel 6 detail
sh lacp 6 internal
sh lacp 6 neighbor
Saludos.
jueves, abril 14, 2011
Enteros en C++
Hola,
Hoy (y los próximos días) vamos a ver unas cosas asombrosas, pero que han sido siempre así, aunque la mayoría no lo sepa.
Todos los lenguajes de programación son imperfectos en cierto sentido.
1.-Tenemos una memoria finita.
2.-Los tipos de datos numéricos están limitados.
3.-Nuestros programitas quieren hacer uso de números no limitados.
Esto hace que explorando los límites obtengamos resultados inesperados.
EJEMPLO EN C++:
1.-Normalmente los tipos int (enteros) son de 4 bytes (32 bits).
2.-Si elegimos utilizar un entero con signo (para representar números negativos y positivos) podremos representar este rango:
Desde -2^31 hasta 2^31-1
O lo que es lo mismo:
Desde -2.147.483.648 hasta 2.147.483.647
3.-La representación interna es en complemento a dos.
¿Cómo son los números positivos en complemento a dos?
Los positivos son como siempre:
5 en decimal = 0000 0101 en binario.
¿Cómo son los números negativos en complemento a dos?
Se invierten los 0-s y 1-s (realmente sería sumar un 1 a todos los dígitos ya que 1+1 es 0 igual que 6+4=0 al hacer una suma decimal sin tener en cuenta la llevada).
y después de la inversión se suma un 1.
4 en decimal = 0000 0100
complemento de 4: 1111 1011
complemento más suma: 1111 1100
¿Y la gran ventaja?
Por ejemplo la resta 5 - 4 = 1 se hace por medio de una suma:
0000 0101 + 1111 1100 = 0000 0001
¡Magia!
¿y qué pasa cuando llegamos al límite de los 4 bytes?
supongamos que en nuestro programa numero = 2.147.483.646
hacemos numero++ y obtenemos 2.147.483.647 que es exactamente el límite que hemos indicado antes (2^31-1).
Ahora que estamos en el límite hacemos numero++ y...
nos da -2.147483648.
Explicación:
2.147.483.647 en decimal es 0111 1111 1111.........................1111 en binario.
Recordad que en complemento a dos que el primer dígito sea 0 indica que es un número positivo.
Ahora bien, al sumar un uno obtenemos (¡¡¡Ahora es un número negativo!!!)
1000 0000 0000............................................0000
-2.147.483.648 en complemento a dos.
La prueba:
El programita:
Saludos.
Hoy (y los próximos días) vamos a ver unas cosas asombrosas, pero que han sido siempre así, aunque la mayoría no lo sepa.
Todos los lenguajes de programación son imperfectos en cierto sentido.
1.-Tenemos una memoria finita.
2.-Los tipos de datos numéricos están limitados.
3.-Nuestros programitas quieren hacer uso de números no limitados.
Esto hace que explorando los límites obtengamos resultados inesperados.
EJEMPLO EN C++:
1.-Normalmente los tipos int (enteros) son de 4 bytes (32 bits).
2.-Si elegimos utilizar un entero con signo (para representar números negativos y positivos) podremos representar este rango:
Desde -2^31 hasta 2^31-1
O lo que es lo mismo:
Desde -2.147.483.648 hasta 2.147.483.647
3.-La representación interna es en complemento a dos.
¿Cómo son los números positivos en complemento a dos?
Los positivos son como siempre:
5 en decimal = 0000 0101 en binario.
¿Cómo son los números negativos en complemento a dos?
Se invierten los 0-s y 1-s (realmente sería sumar un 1 a todos los dígitos ya que 1+1 es 0 igual que 6+4=0 al hacer una suma decimal sin tener en cuenta la llevada).
y después de la inversión se suma un 1.
4 en decimal = 0000 0100
complemento de 4: 1111 1011
complemento más suma: 1111 1100
¿Y la gran ventaja?
Por ejemplo la resta 5 - 4 = 1 se hace por medio de una suma:
0000 0101 + 1111 1100 = 0000 0001
¡Magia!
¿y qué pasa cuando llegamos al límite de los 4 bytes?
supongamos que en nuestro programa numero = 2.147.483.646
hacemos numero++ y obtenemos 2.147.483.647 que es exactamente el límite que hemos indicado antes (2^31-1).
Ahora que estamos en el límite hacemos numero++ y...
nos da -2.147483648.
Explicación:
2.147.483.647 en decimal es 0111 1111 1111.........................1111 en binario.
Recordad que en complemento a dos que el primer dígito sea 0 indica que es un número positivo.
Ahora bien, al sumar un uno obtenemos (¡¡¡Ahora es un número negativo!!!)
1000 0000 0000............................................0000
-2.147.483.648 en complemento a dos.
La prueba:
El programita:
Saludos.
Etiquetas:
algoritmos,
cpp,
programacion
miércoles, abril 13, 2011
Objetos inválidos en Oracle
Una base de datos con un tamaño importante acaba lleno de objetos inválidos.
Son sinónimos huérfanos, procedimientos que no llegaron a compilarse, etc. etc.
Para sacar una lista de objetos inválidos podemos hacer:
select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from dba_objects
where OWNER not in ('SYS','SYSTEM') and status = 'INVALID'
order by OWNER,OBJECT_TYPE,OBJECT_NAME;
Podemos intentar la compilación, a ver que tal va:
Esta select prepara una sentencia por cada objeto inválido:
select 'alter '||object_type||' '||owner||'.'||object_name||' compile;'
from dba_objects where status = 'INVALID'
order by owner, object_name;
Saludos.
Son sinónimos huérfanos, procedimientos que no llegaron a compilarse, etc. etc.
Para sacar una lista de objetos inválidos podemos hacer:
select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from dba_objects
where OWNER not in ('SYS','SYSTEM') and status = 'INVALID'
order by OWNER,OBJECT_TYPE,OBJECT_NAME;
Podemos intentar la compilación, a ver que tal va:
Esta select prepara una sentencia por cada objeto inválido:
select 'alter '||object_type||' '||owner||'.'||object_name||' compile;'
from dba_objects where status = 'INVALID'
order by owner, object_name;
Saludos.
Etiquetas:
documentacion,
oracle
martes, abril 12, 2011
Extender un File System
Tenemos dos formas de extender un File System:
bdf
/dev/vgprueba/lvdatos .........................80% /datos
Luego vemos que posibilidades de ampliación tenemos en el VG (Volume Group):
vgdisplay -v /dev/vgprueba
VG Name: /dev/vgprueba
...
PE Size (Mbytes): 32
Total PE: 8692
Alloc PE: 3820
Free PE: 4872
...
LV Name: /dev/vgprueba/lvdatos
LV Size (Mbytes): 25024
Current LE (logical extend): 782
...
Aumentamos hasta coger 1000 LE:
lvextend -l 1000 /dev/vgprueba/lvdatos
Como el PE Size es 32 Mb el comando anterior es equivalente a:
lvextend -L 32000 /dev/vgprueba/lvdatos
Ahora viene la diferencia entre los dos métodos que decíamos antes:
1.-Desmontando el File System
umount /datos
extendfs -F vxfs /dev/vgprueba/rlvdatos
mount /dev/vgprueba/lvdatos /datos
2.-Sin desmontar el File System (con online JFS)
Hay que indicarle el tamaño total que tiene el File System (el tamaño que tenía más el que hemos ampliado). Lo obtenemos fácilmente con el comando vgdisplay -v
En nuestro ejemplo el LVSize (Mb) era 25.024 Mb.
y le hemos añadido 32.000 Mb.
Por lo tanto el nuevo tamaño es 57.024 Mb.
fsadm -b 57024M /datos
Saludos.
- Desmontando el File System
- Con Online JFS (requiere licencia).
bdf
/dev/vgprueba/lvdatos .........................80% /datos
Luego vemos que posibilidades de ampliación tenemos en el VG (Volume Group):
vgdisplay -v /dev/vgprueba
VG Name: /dev/vgprueba
...
PE Size (Mbytes): 32
Total PE: 8692
Alloc PE: 3820
Free PE: 4872
...
LV Name: /dev/vgprueba/lvdatos
LV Size (Mbytes): 25024
Current LE (logical extend): 782
...
Aumentamos hasta coger 1000 LE:
lvextend -l 1000 /dev/vgprueba/lvdatos
Como el PE Size es 32 Mb el comando anterior es equivalente a:
lvextend -L 32000 /dev/vgprueba/lvdatos
Ahora viene la diferencia entre los dos métodos que decíamos antes:
1.-Desmontando el File System
umount /datos
extendfs -F vxfs /dev/vgprueba/rlvdatos
mount /dev/vgprueba/lvdatos /datos
2.-Sin desmontar el File System (con online JFS)
Hay que indicarle el tamaño total que tiene el File System (el tamaño que tenía más el que hemos ampliado). Lo obtenemos fácilmente con el comando vgdisplay -v
En nuestro ejemplo el LVSize (Mb) era 25.024 Mb.
y le hemos añadido 32.000 Mb.
Por lo tanto el nuevo tamaño es 57.024 Mb.
fsadm -b 57024M /datos
Saludos.
Etiquetas:
documentacion,
hp-ux
Gestionar una EVA de HP en modo comando
Primero nos conectamos al appliance por escritorio remoto.
Hay que ir a C:\Program Files\Hewlett-Packard\Sanworks\Element Manager for StorageWorks HSV donde se encuentra el SSSU.EXE
Ejecutamos el sssu.exe y nos pedirá:
manager: ponemos localhost
Username: normalmente será Administrator
Password:
Nos aparecerá un prompt indicando NoSystemSelected
Hacemos:
select system "EVA8100"
Ya podemos ejecutar los comandos. Para ver la lista de comandos introducimos ?
Para consultar las opciones dentro de un comando ponemos comando ?
El comando LS es el antiguo SHOW. Nos permitirá sacar un listado de cualquier cosa que se nos ocurra:
LS ?
LS LUN
LS DISK
LS DISKGROUP
LS TIME
LS VDISK
LS LICENSES
Saludos.
Hay que ir a C:\Program Files\Hewlett-Packard\Sanworks\Element Manager for StorageWorks HSV donde se encuentra el SSSU.EXE
Ejecutamos el sssu.exe y nos pedirá:
manager: ponemos localhost
Username: normalmente será Administrator
Password:
Nos aparecerá un prompt indicando NoSystemSelected
Hacemos:
select system "EVA8100"
Ya podemos ejecutar los comandos. Para ver la lista de comandos introducimos ?
Para consultar las opciones dentro de un comando ponemos comando ?
El comando LS es el antiguo SHOW. Nos permitirá sacar un listado de cualquier cosa que se nos ocurra:
LS ?
LS LUN
LS DISK
LS DISKGROUP
LS TIME
LS VDISK
LS LICENSES
Saludos.
Etiquetas:
cabina-discos,
documentacion,
hardware
lunes, abril 11, 2011
Quitar retorno de carro y salto de línea con editor VI
Hace tiempo expliqué cómo quitar los molestos caracteres de retorno de carro (CR) y salto de línea (LF) de Windows estando en Linux, UNIX, etc.
Sin embargo cuanto tenemos el problema en un fichero de texto encriptado con VI no podemos aplicar ese método. Tenemos que quitar los caracteres desde el propio editor VI.
Aplicamos el siguiente comando de sustitución:
ESC:%s/CV CM//g
donde ESC es la tecla de escape
CV es Control + V
CM es Control + M.
Nota importante: entre CV y CM no tiene que haber ningún espacio.
Saludos.
Sin embargo cuanto tenemos el problema en un fichero de texto encriptado con VI no podemos aplicar ese método. Tenemos que quitar los caracteres desde el propio editor VI.
Aplicamos el siguiente comando de sustitución:
ESC:%s/CV CM//g
donde ESC es la tecla de escape
CV es Control + V
CM es Control + M.
Nota importante: entre CV y CM no tiene que haber ningún espacio.
Saludos.
Etiquetas:
documentacion,
hp-ux,
linux,
unix
martes, abril 05, 2011
Empieza la siguiente guerra informática
La noticia surgía el pasado día 22 de marzo en la web oficial de ORACLE (ver pantallazo de arriba).
Oracle paraliza el desarrollo sobre la plataforma INTEL ITANIUM.
Lógicamente la noticia ha corrido como la pólvora entre los clientes de HP, el principal fabricante de servidores Itanium.
Oracle compró Sun por abril de 2009. Entonces comenzó a fabricar sus propios servidores Oracle que realmente son los SPARC de Sun customizados para sus bases de datos.
Personalmente creo que Oracle está haciendo demasiados enemigos. En agosto de 2010 publiqué cómo Oracle demandaba a Google por violación de patentes. Esto fue consecuencia de la compra de Sun anterior, ya que además de cacharrería, se convirtió en el nuevo propietario de Java.
Tal vez viéndolas venir aparece un nuevo "fork" del proyecto OpenOffice (cuyo mayor patrocinador era Sun) llamado LibreOffice.
Y ahora se enfrenta a INTEL y HP, y ya de paso con una gran parte de sus clientes anunciando que no habrá nuevas versiones de Oracle sobre estas plataformas.
En esta nota de HP tenemos la respuesta oficial:
- HP garantiza el desarrollo de la plataforma itanium durante 10 años.
- El comportamiento de Oracle es perjudicial para sus propios clientes, ya que impide la libre competencia.
- INTEL sigue apostando por el Itanium, lo cual contradice la nota de Oracle.
- La nueva estrategia de Oracle responde a la pérdida de cuota de mercado de servidores, desde la adquisición de Sun, que a su vez, ya llevaba años perdiendo cuota.
La discusión legal está garantizada:
Oracle argumentará que no tiene por qué desarrollar bases de datos para plataformas que no le interesan. De hecho Microsoft por ejemplo ha dejado de desarrollar el Windows 64 bits para Itanium.
HP argumentará que un porcentaje importantísimo de sus clientes son también clientes de Oracle y que la medida está destinada a ganar cuota de mercado por prácticas monopolísticas.
Saludos.
Etiquetas:
curiosidades,
hp-ux,
noticias,
oracle,
sistemas operativos
lunes, abril 04, 2011
Mejora el prompt en tu UNIX
Los que hayáis manejado el viejo MS/DOS ya sabréis que era introduciendo la siguiente opción en el autoexec.bat podrías mejorar el prompt del sistema:
Autoexec.bat:
PROMPT $p $g
$p introducía el directorio donde nos encontrábamos.
$g era para el símbolo >
Así, en lugar de un triste >,
Teníamos algo como c:\juegos\tetris>
También se podía cambiar el color del prompt, poner la fecha y otras virguerías, pero hoy en día no lo veo demasiado útil.
¿Cómo añadir el directorio actual en el prompt de HP-UX?
Y lo que es mejor cuando manejamos varios servidores a la vez...
¿Cómo ver el servidor en el que estamos ubicados?
Editamos el fichero .profile
Añadimos la variable PS1:
PS1="$(hostname):\$PWD\# "
Así en lugar del triste #
tendremos por ejemplo:
bonito1:/datos/produccion#
A otros les gusta más:
PS1=`date -u +%c `:`echo $LOGNAME@``hostname`' $PWD[!#] '
Otra opción:
PS1=`whoami`'@'`/usr/bin/hostname`': $PWD # '
Para gustos, pero no te olvides de modificar el prompt por defecto para evitar errores humanos como:
- Hacer algo en un servidor cuando piensas que estás en otro.
- Eliminar los ficheros de un directorio cuando realmente estás en un sitio que no creías.
- Etc.
Saludos.
Etiquetas:
documentacion,
hp-ux,
unix
Suscribirse a:
Entradas (Atom)