miércoles, 30 de marzo de 2016

Articulo 1

prueba de blog para facebok

jueves, 4 de noviembre de 2010

Shell Script

Ok ahora veamos como hacer un ciclo o bucle en shell, al igual que en programación tenemos la sentencia WHILE , veamos acerca de ella.

el while tiene una condicionante que funciona parecido al if, en ella podemos utilizar evaluaciones echas con el test, veamos la sintaxis

while [ condición ]
do
comandos
done

el comando se repetirá hasta que la condición sea verdadera .

veamos un ejemplo sencillo

echo " indtroduzca numero"
read x
while test $x != 20
do
echo " introduzca el numero correcto"
echo " intente de nuevo"
read x

done

esto lo hará hasta que sea el numero que se ingrese sea 20

también podemos redirecciona información

veamos un pequeño ejemplo

ls -la | while read w x y z
do
echo $w , $x , $y , $z.
done


las letras se convertirán en cada columna y se cortaran en cada espacio vació.


ls | while read x
do
if [ -d "$x" ]
then
echo $x es directorio
break
elif [ -e $x ]
then
echo $x es archivo
continue
fi

done

este script identifica si la listado es archivo o directorio . si es directorio rompe el ciclo


como evaluar expresiones matemáticas en el shell utilizamos expr

veamos un ejemplo

# expr 2 \* 3

este comando puede ejecutar múltiples operaciones matemáticas , es recomendable que vean el manual completo

ahora veremos la sentencia for .

la sentencia for sirve para hace ciclos al igual que el while . veamos como es la sintaxis

# for x in argumentos do comandos done

veamos un ejemplo pequeño, re nombremos todos los archivos de un directorio .

# for x in *.conf; do y=${x/.conf/.old}; mv $x $y; done

veamos otro ejempo de como hacer un contador con el for

# for ((i=0;$i<100;i= `expr $i + 2`)) do echo $i; done;


como notaron , utilice un tipo de comillas para denotar la expresión, esto permite utilizar comandos en las lineas de ejecución . veamos otro ejemplo

miércoles, 3 de noviembre de 2010

Shell Script

Muchas ocasiones nos toca hacer un pequeño script en pantalla para ejecutar alguna operación que puede ser automatizada , el editor "vi"

No voy a entrar mucho a detalle en esto pero daré algunas tips que pueden ayudarnos

1. en el editor vi , en ocasiones es necesario realizar búsquedas se hacen con la /
2. Para ejecutar algún comando de sistema operativo son salir se realiza con !
3. para ejecutar el mismo comando sin repetir la instrucción !!
4. Para hacer referencia al nombre del script utilizamos %
5. si queremos correr el script sin salirmos hacemos lo siguiente !%
6. Para grabar utilizamo la w
7. para grabar y salir usarmos x
8. para moverte al principio del archivo es con 1G
9. Para moverte al final del archivo es G
10. Para moverte al principio de la linea es 0
11. Para moverte al final de la linea es $
12. Para hacer un UNDO es con la letra u
13. Para remplazar caracteres utilizamos la r o R
14. Con dd, borras toda la linea , con D borras el resto de la linea a partir del cursor.

Con esos basicos pasos podemos hacer uso eficiente te nuestro editor.

Uso de variables, el sistema tiene variables de ambiente que no debemos cambiar , pero podemos, estas las podemos consultar

# env

para asignar un valor a una variable lo hacemos de la sig manera

# hola="hola Mundo"
# echo $hola

estas variables solo se pueden usar en el script que se realiza , para que puedan ser utilizadas por diferentes aplicaciones tendremos que exportarlas

# export hola

Podemos agrupar la ejecucion de comandos utilizando paréntesis

# (
> ls
> df
> who
> )



Control de ejecución de comandos , para esto utilizaremos

# ls; df; who;

esto ejecutara un comando despues de otro .

una ejecución de comandos la podemos dividir con \

# ls ; \
> df; \
> who

existe también el re direccionamiento de resultados .

# ls &

manda el comando a back ground

Para redireccionar el resultado de un comando utilizamo |

# ps axu | grep sendmail

este comando redirecciona el resultado del ps al grep para ser filtrados

# ps axu > resultado

redirecciona el resultado del ps a un archivo llamado resultado

# ps axu >> resultado

redirecciona el resultado y lo concatena con el resultado ya existente en el archivo

# ps axu >/dev/null 2>&1

redirecciona el resultado a la nada (el resultado y el error ) &1 significa que utilizara el mismo archivo .


el argumento 2> redirecciona los errores así que podemos dividirlo

# ps aux > resultado 2> errores



tenemos también las condicionantes para ejecución de comandos que utilizaremos && y ||

tenemos el siguiente ejemplo

# mv file.txt file2.txt && echo " Si se armo"

el resultado es , si el comando fue ejecutado correctamente y con status 0 , enviara el mensaje "Si se armo" en caso contrario enviara el error y no correrá el segundo comando

# mv file.txt file2.txt || echo " ya lo habias echo "

este enviara el mensaje si al ejecutar el primer comando se ejecuta correctamente pero su estatus es diferente de 0 o con error .

haa pero surge la pregunta como saber si es un 0 o 1 , cuando se ejecuta un comando el sistema guarda en la variable $? el estatus de la ejecución del comando anterior

ejemplo

# ls a
# echo $?


Sentencia condicional if

la estructura es

if comando
then
comando
comando
comando
elif comando
then
comando
else
comando

fi


un ejemplo sencillo de esto

if ls usuarios.txt > /dev/null 2>&1
then
echo " Ya existe el archivo"
elif who > usuario.txt
echo "Archivo creado
else
echo "No se pudo crear"
if


para auxiliarnos en la evaluación de expresiones utilizaremos el comando test

el comando test regresa un 1 si la evaluación es verdadera y un 0 si es falsa , este cuenta con operadores para hacer multiples evaluaciones veamos alguna de ellas

1. exp1 -a exp2 # ambas epreciones verdaderas
2. !exp # negar la expresion
3. exp1 -o exp2 # es las expresion o logica
4. -n string # si la cadena es diferente de 0
5. -z string # si la cadena es 0
6. cadena1 = cadena2 # compara 2 cadenas iguales
7. cadena1 != cadena2 # compara 2 cadenas diferentes
8. val1 -eq val2 # valores iguales
9. val1 -ge val2 # mayor o igual que
10 val1 -gt val2 # el valor es mayor que
11 val1 -le val2 # menor o igual a
12. val1 -lt val2 # menor que
13. val1 -ne val2 # no son iguales
14. archivo -ef archivo1 #
15. archivo -nt archivo1 # arvhivo es mas nuevo que
16. archivo -ot archivo1 # archivo es mas viejo que
17. -e archivo # el archivo existe
18. -d archivo # existe y es directorio
19. -f archivo # existe y es un archivo regular
20 -xwr archivo # cada una de las letras por separado indica que existe y es ejecutable , escribible, o lecura


Sentencia case para evaluar multiples

case $valor in

valor) comando ;;
valor1) comando ;;
*) valor_default ;;
esac

se utiliza como if anidados ..

miércoles, 29 de septiembre de 2010

Curso RHCT Modificacion de Modulos sin Compilar el Kernel

En esta ocacion veremos como manejar Modulos del Kernel sin necesidad de compilar el Kernel ,
en algunos casos ( no se si actualmente se haga por que ya no lo he hecho ) al instalar algunos programas como VMWARE, era necesario recompilar un Kernel , para agregar los modulos .

Cuando el Sistema operativo Linux inicia, lee el archivo /etc/rc.sysinit . el cual es el encargado de leer los modulos configurados al Kernel . este archivo no lo editaremos.

También contamos con el archivo /etc/modeprove.conf , el cual contiene los ALIAS de los modulos

===========================

alias scsi_hostadapter ata_piix
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
options snd-intel8x0 index=0
remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0
alias eth0 pcnet32
==========================

Los Alias estandar del sistema esta en el directorio /etc/modeprobe.d

==========================
-rw-r--r-- 1 root root 810 Sep 27 2009 blacklist
-rw-r--r-- 1 root root 833 Sep 3 2009 blacklist-compat
-rw-r--r-- 1 root root 83 Mar 17 2010 blacklist-firewire
-rw-r--r-- 1 root root 6111 Sep 3 2009 modprobe.conf.dist
=========================

el archivo modprobe.conf.dist incluye una gran cantidad de alias estandar para el sistema . que seran cargdos automaticamente , a difierencia de los archivos blacklist que no son cargado automaticamente.

Hagamos un ejemplo

el comando lsmode , nos sirve para listar los modulos que han sido cargados al kernel

# lsmod

===========================

Module Size Used by
pcnet32 35269 0
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2

.
.
.
=====================================

para ver un ejemplo claro , removeremos un modulo existente cargado al kernel con el comando rmmod

# rmmod pcnet32

# lsmod

===========================

Module Size Used by
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2
.
.
.
=====================================
# modeprobe pcnet32

# lsmod

===========================

Module Size Used by
pcnet32 35269 0
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2
.
.
.
=====================================

los modulos son lehidos del directorio cd /lib/modules/`uname -r` donde el uname -r es la version del kernel actuamente cargado

# cd /lib/modules/`uname -r`

# ls
=====================
build modules.dep modules.pcimap updates
extra modules.ieee1394map modules.seriomap weak-updates
kernel modules.inputmap modules.symbols
modules.alias modules.isapnpmap modules.usbmap
modules.ccwmap modules.ofmap source
=========================

existen módulos que dependen de otros , el comando depmod , regenera el archivo de módulos y dependencias , modules.dep .

# depmod -a

esta opción regenerara todas las dependencias .

existen también comando que nos ayudaran a localizar módulos por dispositivos:

# lsusb

despliega información sobre los dispositivos conectados al USb

# lspci

despliega información sobre los dispositivos conectados al PCI

# lspmcia

espliega información sobre los dispositivos conectados al pmcia

lunes, 29 de marzo de 2010

Network Support Services RHCE

En esta seccion veremos algunos temas importantes de como linux realiza la resolucion de nombres .
Basicamente trabaja utilizando los siguientes metodos

1. caching y salve dns
2. nsswitch.conf
3. host.conf

el orden de la búsqueda de un equipo depende del orden que se encuentre configurado en el archivo
nsswitch.conf, en las versiones mas nueva y host.conf en las versiones antiguas , veamos a lo que nos referimos .

=====nsswitch.conf========

#hosts: db files ldap nis dns
hosts: files dns
==========================

=====host.conf===========

order hosts,bind

========================

el orden determinado por default es verificar el archivo de hosts y posterior verificar la información en el dns . en el cual explicaremos mas adelante como configurar un dns cache.

==========hosts============

127.0.0.1 localhost.localdomain localhost
10.10.1.33 spectra.dominio spectra
10.10.1.6 mail534.dominio mail534

===========================

es importante no borrar la primer linea ya que múltiples servicios verifican esta información para funciona correctamente. Si el host solicitado no es encontrado en el archivo hosts, imendiatamente toma la segunda opcion configurada en el archivo nsswitch.conf, que por default es "dns" el cual es definido en el archivo /etc/resolv.conf

======== resolv.conf =====

nameserver 192.168.1.254
nameserver 192.168.1.253

==========================

miércoles, 24 de marzo de 2010

Network Configuration and Security RHCE

Esta parte , es muy interesante ya que nos muestra la forma adecuada de configurar nuestras interfaces de red , veamos entonces .

el primer archivo importante en esta seccion es el /etc/hosts

en el cual agregaremos el nombre de nuestro nuevo sistema , y también agregaremos los hosts que se encuentran en nuestra red veamos un ejemplo

===============================
127.0.0.1 localhost.localdomain localhost

10.10.1.33 spectra.xxxxxxxxxx spectra
10.10.1.6 mail534.xxxxxxxxxx mail534
==============================

lo siguiente es definir el Fully Qualified Domain Name (FQDN) en el archivo /etc/sysconfig/network, veamos el ejemplo

============================
NETWORKING=yes
HOSTNAME=spectra.xxxxxxxxxx
==============================

lo siguiente es definir correctamente los parametros de red esto lo haremos /etc/sysconfig/network-scripts/ifcfg-ethX, para el caso de ip statica , el parámetro "USERCTL=no" indica que los usuarios podrán tener el control del dispositivo de red

=========================
DEVICE=eth0
BOOTPROTO=none
BROADCAST=10.10.1.255
HWADDR=00:1E:C9:28:CE:53
IPADDR=10.10.1.33
NETMASK=255.255.255.0
NETWORK=10.10.1.0
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=10.10.1.1
==========================

en el caso de ip dinámica quedara un archivo como el siguiente .

=======================
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
========================

el siguiente archivo a verificar es el /etc/resolv.conf en el cual colocaremos los dns .

=======================
search gateway.2wire.net
nameserver 10.10.1.254
=======================

reiniciamos el servicio de red

# serivice network restart

y verificamos la tabla de enrutamiento

#route -A inet6 -n //ipv6

# route -n

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0


agregamos la ruta correcta de la siguiente forma .


# route -A inet6 add default gw ipv6 //para ipv6
# route add default gw 10.10.1.1 eth0
# route -n

Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.10.1.1 0.0.0.0 UG 0 0 0 eth0


si requerimos que la ruta sea grabada podemos guárdala de la siguiente manera y al reiniciar se aplicara automáticamente

# echo 'default via 10.10.1.1 dev eth0' /etc/sysconfig/network-scripts/route-eth0

para configurar esto

teniendo listo esto , podemos permitir el forward en nuestro equipo editando el archivo /etc/sysctl.conf y cambiamos net.ipv4.ip_forward de 0 a 1 .

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

para realizar el mismo cambio pero de forma temporal hacemos lo siguiente

# echo "1" > /proc/sys/net/ipv4/ip_forward

ahora si queremos saver el trafico que corre en nuestro sistema podemos hacerlo utilizando herramientas como

# iptraf
# tcpdump

o podemos hacerlo analizando el archivo

# watch tail /proc/net/ip_conntrack

en la parte de seguridad veremos básico como podemos hacer funciona iptables .

para ver las reglas en iptables corremos el siguiente comando

# iptables -L

o podemos ver directamente el archivo de configuraciones

# more /etc/sysconfig/iptables

para facilitar la configuración de netfilter podemos utilizar el comando

# system-config-securitylevel-tui

en el caso de control de acceso por medio de tcpwrappers , como su nombre lo dice solo esta enfocado a conexiones tipo TCP , estas las podemos encontrar en /etc/hosts.deny y /etc/hosts.allow , en este caso debemos tener cuidado ya que primero es lehido el archivo allow y despues el deny, la cual su sintaxis es de la siguiente manera

Servicio:cliente:comando

ejemplo :

in.telnetd:10.10.1.2:twits /sbin/echo

System Service Analysis RHCE

Básicamente tenemos los siguiente , al iniciar nuestro sistema , después de descomprimir el kernel, cargas los módulos y montar el sistema de archivos sigue arrancar los servicios , dependiendo el nivel de corrida , son los servicios que serán ejecutados , los niveles de corrida 0 y 6 , corresponden al shutdown y restart, veamos como funciona

Iniciamos con el archivo inittab

============================

id:3:initdefault: # en esta linea indicamos que nivel de corrida sera

# inicializacion del sistema
si::sysinit:/etc/rc.d/rc.sysinit

# estas lineas indican que servicios serán leídos en los niveles de corrida de inicio , por
# ejemplo en el nivel de corrida 3 sera cargado el contenido del folder /etc/rc3.d/

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# esta line indica que accion tomara al presinar las teclas ctr + lalt + del
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# esta linea ejecuta el shutdown cuando el UPS indica que ya esta llegando al punto de fallo

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# cancela la accion de apagado .

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# enciende las terminales disponibles para linea de comando de la f1 al f6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# indica que la terminal 5 es para el entorno grafico
x:5:respawn:/etc/X11/prefdm -nodaemon

=================================

veamos el folder /etc.rc0.d/

=================

lrwxrwxrwx 1 root root 19 Feb 15 2008 K99readahead -> ../init.d/readahead
lrwxrwxrwx 1 root root 25 Feb 15 2008 K99readahead_early -> ../init.d/readahead_early
lrwxrwxrwx 1 root root 17 Sep 26 13:52 S00killall -> ../init.d/killall
lrwxrwxrwx 1 root root 14 Sep 26 13:52 S01halt -> ../init.d/halt

================

como vemos hay servicios que comienzan con K y otros con S , esto significa que los K no seran cargados y los S si seran ejecutados, en el nivel de corrida 0, vemos que corre el Killall y el halt , que son los procesos para apagar el sistema , lo mismo ocurren con los demas folders .

ahora podemos consultar los servicios que se ejecutaran al nivel de corrida 3

# ntsysv --level 3

si queremos ver en que niveles de corrida esta algun servicio ejecutamos lo siguiente

# chkconfig --list smb
smb 0:off 1:off 2:on 3:on 4:on 5:on 6:off

si queremos cambiar las configuración en algún nivel de corrida podemos utilizar ambas herramientas

# # chkconfig smb off --level 3
# chkconfig --list smb
smb 0:off 1:off 2:on 3:off 4:on 5:on 6:off

Si requerimos saber el estatus actual de algún servicio , podemos hacerlo de la siguiente manera

# service --status-all

o podemos hacerlo de algun servicio en especifico

# service smb status

si requerimos que algún script corra al iniciar el sistema podemos colocarlo dentro del archivo
/etc/rc.local, podemos utilizar el & para enviar la ejecucion a back ground , y pueden ser llamadas por los comando fg y bg y el respectivo job.

un ejemplo podria ser

# ejemplo.sh &

precionamos ctrl + c

hacemos la busqueda del PID

# ps axu | grep ejemplo.sh
# fg 44527

y tendremos de nuevo nuestra ejecución.


estando en el tema de ejecuciones de códigos , podemos hacer que una aplicación se ejecute al momento que un usuario se logue, esto lo podemos lograr ingresando una linea de código en el archivo /etc/profile , si es especifica la aplicación para un usuario esto lo logramos editando el archiv ~/.bash_profile .

espero les sirva la informacion que comparto hoy con ud