#!/bin/bash
#
# By Jose Luis Ramirez 2014/10/10
# Shell Script para transferencia de archivos via FTP
#
# ruta del log que registrara cada paso de esta shell
vLog=/home/monitoreo_alarmas/DetallesTotalesNavegacion/Log/LogEnvioFtp.log
#ejecutamos el archivo jar
echo "ejecutando archivo DetalleTotalesNavegacion.jar">> $vLog
java -jar DetalleTotalesNavegacion.jar >> $vLog
# datos del servidor FTP remoto
HOST='x.x.x.x'
USER='user'
PASS='*****'
#sacamos la fecha de hoy
TODAY=$(date)
echo "---------------------------------------" >> $vLog
echo "| Lectura de archivos |" >> $vLog
echo "| Date: $TODAY |" >> $vLog
echo "| Shell para enviar archivos via FTP. |" >> $vLog
echo "| Comando < PUT > de FTP. |" >> $vLog
echo "---------------------------------------" >> $vLog
echo " " >> $vLog
#El archivo a enviar tiene el siguiente nombre (archivo dinamico, generado por el proceso java que se ejecuto anteriormente):
#TotalesxAplicacion_ + la fecha de ayer
#ejemplo: TotalesxAplicacion_20141022
fechaActual=$(date --date="yesterday" +"%Y-%m-%d")
#nombre del archivo
archivo=TotalesxAplicacion_$fechaActual
echo "archivo enviado via FTP [$archivo] " >> $vLog
echo " " >> $vLog
echo "--------------------------------------------------" >> $vLog
echo "| Transferencia de Archivos via FTP |" >> $vLog
echo "| Iniciando Transferencia de archivos |" >> $vLog
echo "| Maquina Local ---> Maquina Remota) Via vFTP ...|" >> $vLog
echo "--------------------------------------------------" >> $vLog
sleep 3;
#sftp $USER@HOST << end
ftp -ivn <<end
open $HOST
user $USER $PASS
cd /opt/JONAS_4_10_9/logs/DetalleIvrTotales/
lcd /home/monitoreo_alarmas/DetallesTotalesNavegacion/Log/
bin
mput ${archivo}
rename ${archivo} ${archivo}.txt
quit
end
#Mueve archivos a carpeta de respaldo
#mv EPA* respaldo
echo " " >> $vLog
echo "-----------------------------" >> $vLog
echo "|Fin de la Transferencia ...|" >> $vLog
echo "-----------------------------" >> $vLog
echo " " >> $vLog
sleep 3;
exit 0
martes, 21 de octubre de 2014
Shell que ejecuta llava y envía archivo por ftp
martes, 30 de septiembre de 2014
Scrip shell consulta base de datos y guarda resultados a un archivo
En el siquiente ejemplo veremos como hacer consultas mediante un archivo bash y guardar los resultados en un archivo de texto plano, para esto ocuparemos Mysql y 4 tablas: Emrpesa, Llamadas, Opciones y Transacciones. Este archivo bash sacará en 3 archivos de texo la info de cada Llamada.
La estructura de cada tabla seria así:
Tabla Empresa
Descripción: Aquí se guardaran las distintas empresas telefónicas como Claro, Entel, Movistar, etc. y por cada una se hara un informe el cual tendra 3 archivos: Llamadas, Opciones y Transacciones.
id_empresa (autoincremental),
nombre_empresa
Tabla Llamadas:
Descripción: Registra cada llamda hecha al menú de autoatención de cada empresa.
id_llamada (autoincremental),
id_empresa,
duracion_total,
numero_origen,
numero_destino,
fecha_inicio,
fecha_fin
Tabla Opciones:
Descripción: Registra las opciones presinadas por el cliente al momento de llamar a la central (Menú de autoatención como por ejemplo Entel 103)
id_opcion (autoincremental)
id_llamada,
opcion_presionada
Tabla Transacciones:
Descripción : Cuando se presiona una opción del menú de autoatención, se gatillan transacciones, las cuales se registran en esta tabla.
id_trx (autoincremental),
id_llamada,
nombre_trx,
resultado,
duracion
nota: los campos que estan en negrita son referencias de otras tablas, por lo que la relacion entre estas tablas es de 1 a muchas.
Generamos el archivo bash que se guarda con extención .sh, ejemplo: informe.sh y se puede ejecutar así:
1) ./informe.sh
2) sh informe.sh
3) bash informe.sh
Nota: este codigo fue testeado en un Shell, pero se cambiaron las tablas de las consultas, las cuales no estan testeadas, por lo que puede existir un error de consultas.
La estructura de cada tabla seria así:
Tabla Empresa
Descripción: Aquí se guardaran las distintas empresas telefónicas como Claro, Entel, Movistar, etc. y por cada una se hara un informe el cual tendra 3 archivos: Llamadas, Opciones y Transacciones.
id_empresa (autoincremental),
nombre_empresa
Tabla Llamadas:
Descripción: Registra cada llamda hecha al menú de autoatención de cada empresa.
id_llamada (autoincremental),
id_empresa,
duracion_total,
numero_origen,
numero_destino,
fecha_inicio,
fecha_fin
Tabla Opciones:
Descripción: Registra las opciones presinadas por el cliente al momento de llamar a la central (Menú de autoatención como por ejemplo Entel 103)
id_opcion (autoincremental)
id_llamada,
opcion_presionada
Tabla Transacciones:
Descripción : Cuando se presiona una opción del menú de autoatención, se gatillan transacciones, las cuales se registran en esta tabla.
id_trx (autoincremental),
id_llamada,
nombre_trx,
resultado,
duracion
nota: los campos que estan en negrita son referencias de otras tablas, por lo que la relacion entre estas tablas es de 1 a muchas.
Generamos el archivo bash que se guarda con extención .sh, ejemplo: informe.sh y se puede ejecutar así:
1) ./informe.sh
2) sh informe.sh
3) bash informe.sh
#!/bin/bash
user="usuario"
pass="xxxxxx"
db="BaseDeDatoAConectarMysql"
#opcines de columnas en Mysql
opc="--skip-column-names"
#Se necesita que el archivo tenga en su nombre la fecha de ayer
fecha=$(date --date="yesterday" +"%Y%m%d")
#Se quiere 3 informes que sean del dia anterior, ejemplo si hoy es 02/08/2014, entonces#se requiere un informe de todo el día de ayer de '01/08/2014' hasta '01/08/2014 23:59:59'#ponermos el intervalo de dias en -1 para restar un dia
intervalo="-1"
#se crea consulta y conexion a mysql. Esta obtiene todas las empresas que seran consultadas #empresa de telefonia (Tabla Empresa).
dbquery=$(mysql -u $user -p$pass $opc -e "use $db;SELECT id_empresa FROM Empresa ")
#se guardan los resultados en un array
arrayApp=($(for i in $dbquery;do echo $i;done))
#corroboramos que esten todos los datos en el array. Descomentar la siguiente linea
#echo ${arrayApp[@]};
#se recorre el array para ejecutar las querys
for i in ${arrayApp[@]}
do
nameFile1="_llamadas_$fecha.txt";
query="SELECT LLA.id_llamada ID_LLAMADA,
LLA.id_empresa ,
LLA.duracion_total ,
LLA.numero_origen,
LLA.numero_destino,
LLa.fecha_inicio,
LLA.fecha_fin,
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile1' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM LLAMADAS LLA
WHERE LLA.fecha_inicio>= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin<= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)
AND LLA.id_empresa='$i'
ORDER BY LLa.fecha_inicio ASC;";
mysql -u $user -p$pass -e "use $db;$query"
nameFile2="_opciones_$fecha.txt";
query="SELECT OPC.id_llamada ID_LLAMADA,
OPC.OPCION OPCION
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile2' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM OPCIONES OPC,
LLAMADAS LLA
WHERE LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)AND LLA.id_empresa='$i'
AND LLA.id_llamada=OPC.id_llamadaORDER BY LLA.fecha_inicio ASC;";
mysql -u $user -p$pass -e "use $db;$query";
nameFile3="_transac_$fecha.txt";
query="SELECT TRX.id_llamada ID_LLAMADA,
TRX.nombre_trx,
TRX.resultado,
TRX.duracion
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile3' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM Llamadas LLA,
Transacciones TRX
WHERE LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)AND LLA.id_empresa='$i'
AND LLA.id_llamada=TRX.id_llamada
ORDER BY LLA.fecha_inicio ASC";
mysql -u $user -p$pass -e "use $db;$query";
done
Nota: este codigo fue testeado en un Shell, pero se cambiaron las tablas de las consultas, las cuales no estan testeadas, por lo que puede existir un error de consultas.
jueves, 8 de mayo de 2014
Permisos en archivos
En el siguiente apartado trataré de explicar como funciona el sistema de permisos para los archivos en Linux. Comenzaremos con ejemplos, ya que así es más fácil de entender:
Supongamos que en la consola de linux hacemos el siguiente comando: ls -l
Esto nos mostrará una lista de archivos y sus permisos:
Explicaremos el significado de cada símbolo...
La primera columna, (-rwxrwxr--) es el tipo de archivo y sus permisos.
La segunda columna, (1) es el número de enlaces al archivo.
La tercera columna (sergio), se refiere al propietario del archivo.
La cuarta columna (ventas), es al grupo que pertenece el archivo.
Las siguientes son el tamaño, la fecha y hora de la última modificación y por último el nombre del archivo o carpeta.
Refiriendonos a la primera columna (-rwxrwxr--) de la primera fila, tenemos el primer caracter que en este caso y en la segunda fila es un guión (-) , en la tercera es una d. Este caracter tiene un significado y podemos tener los siguientes tipos de valores:
Entonces tenemos (ejemplo de la ultima fila drwxr-xr-x)
d rwx -xr x
tipo archivo usuario grupo otros
En cuanto a las letras, su significado es el siguiente:
r = lectura (read)
w= escritura (write). En los archivos, significa que se pueden modificar y en los directorios o carpetas significa que puede crear archivos dentro del dir.
x= ejecución (execution)
Estas letras en realidad funcionan como una especie de switch, de encendido y apagado, por ejemplo:
rwxrw-r--
Indicaría que los permisos del propietario (rwx) puede leer, escribir y ejecutar el archivo, el grupo (o sea los usuarios que estén en mismo grupo del archivo) (rw-) podrá leer y escribir pero no ejecutar el archivo, y cualquier otro usuario del sistema (r--), solo podrá leer el archivo, ya que los otros dos bits de lectura y ejecucción no se encuentran encendidos o activados.
Permisos en formato numérico octal
La cambinación de valores de cada grupo de los usuarios forma un número octal, el bit x es 20 es decir 1, el bit w es 21 es decir 2, el bit r es 22 es decir 4, tenemos entonces:
r = 4
w = 2
x = 1
La combinación de bits encendidos o apagados en cada grupo da ocho posibles combinaciones de valores, es decir la suma de los bits encendidos:
- - - = 0 no se tiene ningún permiso
- - x = 1 solo permiso de ejecución
- w - = 2 solo permiso de escritura
- w x = 3 permisos de escritura y ejecución
r - - = 4 solo permiso de lectura
r - x = 5 permisos de lectura y ejecución
r w - = 6 permisos de lectura y escritura
r w x = 7 todos los permisos establecidos, lectura, escritura y ejecución
Cuando se combinan los permisos del usuario, grupo y otros, se obtienen un número de tres cifras que conforman los permisos del archivo o del directorio. Esto es más fácil visualizarlo con algunos ejemplos:
Estableciendo los permisos con el comando chmod
Habiendo entendido lo anterior, es ahora fácil cambiar los permisos de cualquier archivo o directorio, usando el comando chmod (change mode), cuya sintaxis es la siguiente:
chmod [opciones] permisos archivo[s], algunos ejemplos:
$> chmod 755 reporte1
$> chmod 511 respaldo.sh
$> chmod 700 julio*
$> chmod 644 *
Los ejemplos anterior establecen los permisos correspondientes que el usuario propietario desea establecer, el tercer ejemplo (chmod 700 julio*) cambiará los permisos a todos los archivos que empiezen con julio (julio01, julio02, julio_respaldo, etc.) debido al caracter '*' que es parte de las expresiones regulares que el shell acepta, e indica lo que sea. El último ejemplo por lo tanto cambiará los permisos a los archivos dentro del directorio actual.
Una opción común cuando se desea cambiar todo un árbol de directorios, es decir, varios directorios anidados y sus archivos correspondientes, es usar la opción -R, de recursividad:
$> chmod -R 755 respaldos/*
Esto cambiará los permisos a 755 (rwxr-xr-x) del directorio respaldos y de todos los subdirectorios y archivos que estén contenidos dentro de este.
Estableciendo permisos en modo simbólico
Otra manera popular de establecer los permisos de un archivo o directorio es a través de identificadores del bit (r,w, o x) de los permisos, como ya se vió anteriormente, pero ahora identificando además lo siguiente:
La sintaxis es muy simple chmod augo[+|-]rwx[,...] archivo[s], asi por ejemplo, si queremos que otros tengan permiso de escritura sería chmod o+w archivo, todos los usuarios con permisos de ejecución chmod a+x archivo.
En este modo de establecer permisos, solo hay que tomar en cuenta que partiendo de los permisos ya establecidos se agregan o se quitan a los ya existentes.Veámoslo con ejemplos su manera de trabajar:
Cambiando propietario y grupo
Volviendo a mostrar el listado al inicio de este artículo:
$> ls -l
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
-rw-rw-r-- 1 sergio sergio 2825990 sep 7 16:36 reporte1
drwxr-xr-x 2 sergio sergio 4096 ago 27 11:41 videos
Vemos en la tercera y cuarta columna al usuario propietario del archivo y al grupo al que pertence, es posible cambiar estos valores a través de los comandos chown (change owner, cambiar propietario) y chgrp (change group, cambiar grupo). La sintaxis es muy sencilla: chown usuario archivo[s] y chgrp grupo archivo[s]. Además al igual que con chmod, también es posible utilizar la opción -R para recursividad.
#> ls -l presentacion
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
#> chown juan presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan ventas 9090 sep 9 14:10 presentacion
#> chgrp gerentes presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan gerentes 9090 sep 9 14:10 presentacion
Solo el usuario root puede cambiar usuarios y grupos a su voluntad sobre cualquier usuario, queda claro que habiendo ingresado al sistema como usuario normal, solo podrá hacer cambios de grupos, y eso solo a los que pertenezca.
Una manera rápida para el usuario root de cambiar usuario y grupo al mismo tiempo, es con el mismo comando chown de la siguiente manera:
#> chown juan.gerentes presentacion (o en vez de punto, con : puntos)
#> chown juan:gerentes presentacion
Así, cambiará el usuario.grupo en una sola instrucción.
Bits SUID, SGID y de persitencia (sticky bit)
Aún hay otro tipo de permisos que hay que considerar. Se trata del bit de permisos SUID (Set User ID), el bit de permisos SGID (Set Group ID) y el bit de permisos de persistencia (sticky bit). Para entender los dos primeros el SUID y el SGID veamos los permisos para un comando de uso común a todos los usuarios, que es el comando passwd, que como se sabe sirve para cambiar la contraseña del usuario, y puede ser invocado por cualquier usuario para cambiar su propia contraseña, si vemos sus permisos observaremos un nuevo tipo de permiso:
#> ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd
SUID
En vez de la 'x' en el grupo del usuario encontramos ahora una 's' (suid). passwd es un comando propiedad de root, pero sin embargo debe de poder ser ejecutado por otros usuarios, no solo por root. Es aqui donde interviene el bit SUID, donde al activarlo obliga al archivo ejecutable binario a ejecutarse como si lo hubiera lanzado el usuario propietario y no realmente quien lo lanzó o ejecutó. Es decir, es poder invocar un comando propiedad de otro usuario (generalmente de root) como si uno fuera el propietario.
SGID
El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo del archivo. Es decir si el usuario pertenece al grupo 'ventas' y existe un binario llamado 'reporte' que su grupo es 'ventas' y tiene el bit SGID activado, entonces el usuario que pertenezca al grupo 'ventas' podrá ejecutarlo. También se muestra como una 's' en vez del bit 'x' en los permisos del grupo.
STICKY BIT (Bit de persistencia)
Este bit se aplica para directorios como en el caso de /tmp y se indica con una 't':
#> ls -ld /tmp
drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp
Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo pueda eliminarlo del directorio. Es decir cualquier otro usuario va a poder leer el contenido de un archivo o ejecutarlo si fuera un binario, pero sólo el propietario original podrá eliminarlo o modificarlo. Si no se tuviera el sticky bit activado, entonces en estas carpetas públicas, cualquiera podría eliminar o modificar los archivos de cualquier otro usuario.
Estableciendo los permisos especiales
Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número octal (1 al 7) extra al principio de los permisos, ejemplo:
#> ls -l /usr/prog
-r-x--x--x 24 root root 4096 sep 25 18:14 prog
#>chmod 4511 /usr/prog
#> ls -l /usr/prog
-r-s--x--x 24 root root 4096 sep 25 18:14 prog
Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'.
Los posibles valores serían los siguientes:
- - - - - - - - - = 0 Predeterminado, sin permisos especiales. No se requiere indicar.
- - - - - - - - t = 1 Bit de persistencia, sticky bit
- - - - - s - - - = 2 Bit sgid de grupo
- - - - - s - - t = 3 Bit sgid y sticky
- - s - - - - - - = 4 Bit suid
- - s - - - - - t = 5 Bit suid y sticky
- - s - - s - - - = 6 Bit suid y sgid
- - s - - s - - t = 7 Bit suid, sgid y sticky
MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de esta manera, cualquier usuario podrá ejecutarlos como si fueran el propietario original de ese programa. Y esto puede tener consecuencias de seguridad severas en tu sistema. Siempre considera y reconsidera si conviene que un usuario normal ejecute aplicaciones propias de root a través del cambio de bits SUID o SGID. Mejores alternativas pueden ser los comandos sudo y su, en este tip de LinuxTotal.com.mx encuentras una manera de identificar archivos y ejecutables con estos bits establecidos.
Permisos preestablecidos con umask
El comando umask establece la máscara de permisos de directorio y de archivos. Es decir los nuevos directorios y archivos que se crean obtienen el valor de los permisos a partir de los valores de umask.
$> umask
0002
(o en formato simbólico con la opción -S)
$> umask -S
u=rwx,g=rwx,o=rx
Lo anterior indica que un directorio y archivos ejecutables se crearán con los permisos 775 y los archivos comunes con los permisos 664. Esto se logra restando de 777 el valor de umask (777-002) y (666-002) respectivamente. El primer valor de umask corresponde para valores de Sticky bit, GUID o SUID, que por default es 0.
$> umask
0002
(Creamos un archivo y según la máscara debemos de tener 666-002=664 o rw-rw-r--)
$> touch archivo
$> ll archivo
-rw-rw-r-- 1 sergio sergio 0 sep 25 20:14 archivo
(Ahora creamos un directorio y según la máscara debemos de tener 777-002=775 o rwxrwxr-x)
$> mkdir dir
$> ls -ld dir
drwxrwxr-x 2 sergio sergio 4096 sep 25 20:20 dir
Para establecer el valor de la máscara, simplemente se usa el mismo comando umask seguido del valor de máscara que se desee:
$> umask 0022
Para dejarlo fijo en la sesión, entonces conviene agregarlo a .bash_profile o .bash_rc de nuestro directorio de inicio.
Supongamos que en la consola de linux hacemos el siguiente comando: ls -l
Esto nos mostrará una lista de archivos y sus permisos:
$> ls -l -rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion -rw-rw-r-- 1 sergio sergio 2825990 sep 7 16:36 reporte1 drwxr-xr-x 2 sergio sergio 4096 ago 27 11:41 videos
Explicaremos el significado de cada símbolo...
La primera columna, (-rwxrwxr--) es el tipo de archivo y sus permisos.
La segunda columna, (1) es el número de enlaces al archivo.
La tercera columna (sergio), se refiere al propietario del archivo.
La cuarta columna (ventas), es al grupo que pertenece el archivo.
Las siguientes son el tamaño, la fecha y hora de la última modificación y por último el nombre del archivo o carpeta.
Refiriendonos a la primera columna (-rwxrwxr--) de la primera fila, tenemos el primer caracter que en este caso y en la segunda fila es un guión (-) , en la tercera es una d. Este caracter tiene un significado y podemos tener los siguientes tipos de valores:
- - un guión representa un archivo común (de texto, html, mp3, jpg, etc.)
- d representa un directorio o carpeta.
- l link, es decir un enlace de acceso directo.
- b binario, un archivo generalmente ejecutable.
Entonces tenemos (ejemplo de la ultima fila drwxr-xr-x)
d rwx -xr x
tipo archivo usuario grupo otros
En cuanto a las letras, su significado es el siguiente:
r = lectura (read)
w= escritura (write). En los archivos, significa que se pueden modificar y en los directorios o carpetas significa que puede crear archivos dentro del dir.
x= ejecución (execution)
Estas letras en realidad funcionan como una especie de switch, de encendido y apagado, por ejemplo:
rwxrw-r--
Indicaría que los permisos del propietario (rwx) puede leer, escribir y ejecutar el archivo, el grupo (o sea los usuarios que estén en mismo grupo del archivo) (rw-) podrá leer y escribir pero no ejecutar el archivo, y cualquier otro usuario del sistema (r--), solo podrá leer el archivo, ya que los otros dos bits de lectura y ejecucción no se encuentran encendidos o activados.
Permisos en formato numérico octal
La cambinación de valores de cada grupo de los usuarios forma un número octal, el bit x es 20 es decir 1, el bit w es 21 es decir 2, el bit r es 22 es decir 4, tenemos entonces:
r = 4
w = 2
x = 1
La combinación de bits encendidos o apagados en cada grupo da ocho posibles combinaciones de valores, es decir la suma de los bits encendidos:
- - - = 0 no se tiene ningún permiso
- - x = 1 solo permiso de ejecución
- w - = 2 solo permiso de escritura
- w x = 3 permisos de escritura y ejecución
r - - = 4 solo permiso de lectura
r - x = 5 permisos de lectura y ejecución
r w - = 6 permisos de lectura y escritura
r w x = 7 todos los permisos establecidos, lectura, escritura y ejecución
Cuando se combinan los permisos del usuario, grupo y otros, se obtienen un número de tres cifras que conforman los permisos del archivo o del directorio. Esto es más fácil visualizarlo con algunos ejemplos:
| Permisos | Valor | Descripción |
|---|---|---|
| rw------- | 600 | El propietario tiene permisos de lectura y escritura. |
| rwx--x--x | 711 | El propietario lectura, escritura y ejecución, el grupo y otros solo ejecución. |
| rwxr-xr-x | 755 | El propietario lectura, escritura y ejecución, el grupo y otros pueden leer y ejecutar el archivo. |
| rwxrwxrwx | 777 | El archivo puede ser leido, escrito y ejecutado por quien sea. |
| r-------- | 400 | Solo el propietario puede leer el archivo, pero ni el mismo puede modificarlo o ejecutarlo y por supuesto ni elgrupo ni otros pueden hacer nada en el. |
| rw-r----- | 640 | El usuario propietario puede leer y escribir, el grupo puede leer el archivo y otros no pueden hacer nada. |
Estableciendo los permisos con el comando chmod
Habiendo entendido lo anterior, es ahora fácil cambiar los permisos de cualquier archivo o directorio, usando el comando chmod (change mode), cuya sintaxis es la siguiente:
chmod [opciones] permisos archivo[s], algunos ejemplos:
$> chmod 755 reporte1
$> chmod 511 respaldo.sh
$> chmod 700 julio*
$> chmod 644 *
Los ejemplos anterior establecen los permisos correspondientes que el usuario propietario desea establecer, el tercer ejemplo (chmod 700 julio*) cambiará los permisos a todos los archivos que empiezen con julio (julio01, julio02, julio_respaldo, etc.) debido al caracter '*' que es parte de las expresiones regulares que el shell acepta, e indica lo que sea. El último ejemplo por lo tanto cambiará los permisos a los archivos dentro del directorio actual.
Una opción común cuando se desea cambiar todo un árbol de directorios, es decir, varios directorios anidados y sus archivos correspondientes, es usar la opción -R, de recursividad:
$> chmod -R 755 respaldos/*
Esto cambiará los permisos a 755 (rwxr-xr-x) del directorio respaldos y de todos los subdirectorios y archivos que estén contenidos dentro de este.
Estableciendo permisos en modo simbólico
Otra manera popular de establecer los permisos de un archivo o directorio es a través de identificadores del bit (r,w, o x) de los permisos, como ya se vió anteriormente, pero ahora identificando además lo siguiente:
- al usuario con la letra u
- al grupo con la letra g
- a otros usuarios con la letra o
- y cuando nos referimos a todos (usuario, grupo, otros) con la letra a (all, todos en inglés)
- el signo + para establecer el permiso
- el signo - para eliminar o quitar el permiso
La sintaxis es muy simple chmod augo[+|-]rwx[,...] archivo[s], asi por ejemplo, si queremos que otros tengan permiso de escritura sería chmod o+w archivo, todos los usuarios con permisos de ejecución chmod a+x archivo.
En este modo de establecer permisos, solo hay que tomar en cuenta que partiendo de los permisos ya establecidos se agregan o se quitan a los ya existentes.Veámoslo con ejemplos su manera de trabajar:
| Actual | chmod | Resultado | Descripción |
|---|---|---|---|
| rw------- | a+x | rwx--x--x | Agregar a todos (all) permisos de escritura. |
| rwx--x--x | go-x | rwx------ | Se eliminan permiso de ejecución para grupo y otros. |
| rwxr-xr-x | u-x,go-r | rw---x--x | Al usuario se le quita ejecución, al grupo y otros se le quita lectura. |
| rwxrwxrwx | u-x,go-rwx | rw------- | Al usuario se le elimina ejecución, al grupo y otros se eliminan todos los permisos. |
| r-------- | a+r,u+w | rw-r--r-- | A todos se les agrega lectura, al usuario se le agrega escritura. |
| rw-r----- | u-rw,g+w,o+x | ---rw---x | Al usuario se le eliminan lectura y escritura, al grupo se le agrega lectura y otros se le agrega ejecución. |
Cambiando propietario y grupo
Volviendo a mostrar el listado al inicio de este artículo:
$> ls -l
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
-rw-rw-r-- 1 sergio sergio 2825990 sep 7 16:36 reporte1
drwxr-xr-x 2 sergio sergio 4096 ago 27 11:41 videos
Vemos en la tercera y cuarta columna al usuario propietario del archivo y al grupo al que pertence, es posible cambiar estos valores a través de los comandos chown (change owner, cambiar propietario) y chgrp (change group, cambiar grupo). La sintaxis es muy sencilla: chown usuario archivo[s] y chgrp grupo archivo[s]. Además al igual que con chmod, también es posible utilizar la opción -R para recursividad.
#> ls -l presentacion
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
#> chown juan presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan ventas 9090 sep 9 14:10 presentacion
#> chgrp gerentes presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan gerentes 9090 sep 9 14:10 presentacion
Solo el usuario root puede cambiar usuarios y grupos a su voluntad sobre cualquier usuario, queda claro que habiendo ingresado al sistema como usuario normal, solo podrá hacer cambios de grupos, y eso solo a los que pertenezca.
Una manera rápida para el usuario root de cambiar usuario y grupo al mismo tiempo, es con el mismo comando chown de la siguiente manera:
#> chown juan.gerentes presentacion (o en vez de punto, con : puntos)
#> chown juan:gerentes presentacion
Así, cambiará el usuario.grupo en una sola instrucción.
Bits SUID, SGID y de persitencia (sticky bit)
Aún hay otro tipo de permisos que hay que considerar. Se trata del bit de permisos SUID (Set User ID), el bit de permisos SGID (Set Group ID) y el bit de permisos de persistencia (sticky bit). Para entender los dos primeros el SUID y el SGID veamos los permisos para un comando de uso común a todos los usuarios, que es el comando passwd, que como se sabe sirve para cambiar la contraseña del usuario, y puede ser invocado por cualquier usuario para cambiar su propia contraseña, si vemos sus permisos observaremos un nuevo tipo de permiso:
#> ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd
SUID
En vez de la 'x' en el grupo del usuario encontramos ahora una 's' (suid). passwd es un comando propiedad de root, pero sin embargo debe de poder ser ejecutado por otros usuarios, no solo por root. Es aqui donde interviene el bit SUID, donde al activarlo obliga al archivo ejecutable binario a ejecutarse como si lo hubiera lanzado el usuario propietario y no realmente quien lo lanzó o ejecutó. Es decir, es poder invocar un comando propiedad de otro usuario (generalmente de root) como si uno fuera el propietario.
SGID
El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo del archivo. Es decir si el usuario pertenece al grupo 'ventas' y existe un binario llamado 'reporte' que su grupo es 'ventas' y tiene el bit SGID activado, entonces el usuario que pertenezca al grupo 'ventas' podrá ejecutarlo. También se muestra como una 's' en vez del bit 'x' en los permisos del grupo.
STICKY BIT (Bit de persistencia)
Este bit se aplica para directorios como en el caso de /tmp y se indica con una 't':
#> ls -ld /tmp
drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp
Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo pueda eliminarlo del directorio. Es decir cualquier otro usuario va a poder leer el contenido de un archivo o ejecutarlo si fuera un binario, pero sólo el propietario original podrá eliminarlo o modificarlo. Si no se tuviera el sticky bit activado, entonces en estas carpetas públicas, cualquiera podría eliminar o modificar los archivos de cualquier otro usuario.
Estableciendo los permisos especiales
Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número octal (1 al 7) extra al principio de los permisos, ejemplo:
#> ls -l /usr/prog
-r-x--x--x 24 root root 4096 sep 25 18:14 prog
#>chmod 4511 /usr/prog
#> ls -l /usr/prog
-r-s--x--x 24 root root 4096 sep 25 18:14 prog
Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'.
Los posibles valores serían los siguientes:
- - - - - - - - - = 0 Predeterminado, sin permisos especiales. No se requiere indicar.
- - - - - - - - t = 1 Bit de persistencia, sticky bit
- - - - - s - - - = 2 Bit sgid de grupo
- - - - - s - - t = 3 Bit sgid y sticky
- - s - - - - - - = 4 Bit suid
- - s - - - - - t = 5 Bit suid y sticky
- - s - - s - - - = 6 Bit suid y sgid
- - s - - s - - t = 7 Bit suid, sgid y sticky
MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de esta manera, cualquier usuario podrá ejecutarlos como si fueran el propietario original de ese programa. Y esto puede tener consecuencias de seguridad severas en tu sistema. Siempre considera y reconsidera si conviene que un usuario normal ejecute aplicaciones propias de root a través del cambio de bits SUID o SGID. Mejores alternativas pueden ser los comandos sudo y su, en este tip de LinuxTotal.com.mx encuentras una manera de identificar archivos y ejecutables con estos bits establecidos.
Permisos preestablecidos con umask
El comando umask establece la máscara de permisos de directorio y de archivos. Es decir los nuevos directorios y archivos que se crean obtienen el valor de los permisos a partir de los valores de umask.
$> umask
0002
(o en formato simbólico con la opción -S)
$> umask -S
u=rwx,g=rwx,o=rx
Lo anterior indica que un directorio y archivos ejecutables se crearán con los permisos 775 y los archivos comunes con los permisos 664. Esto se logra restando de 777 el valor de umask (777-002) y (666-002) respectivamente. El primer valor de umask corresponde para valores de Sticky bit, GUID o SUID, que por default es 0.
$> umask
0002
(Creamos un archivo y según la máscara debemos de tener 666-002=664 o rw-rw-r--)
$> touch archivo
$> ll archivo
-rw-rw-r-- 1 sergio sergio 0 sep 25 20:14 archivo
(Ahora creamos un directorio y según la máscara debemos de tener 777-002=775 o rwxrwxr-x)
$> mkdir dir
$> ls -ld dir
drwxrwxr-x 2 sergio sergio 4096 sep 25 20:20 dir
Para establecer el valor de la máscara, simplemente se usa el mismo comando umask seguido del valor de máscara que se desee:
$> umask 0022
Para dejarlo fijo en la sesión, entonces conviene agregarlo a .bash_profile o .bash_rc de nuestro directorio de inicio.
viernes, 2 de mayo de 2014
Script bach que ejecuta una sentencia Mysql
A continuación un script que ejecuta sentencia Mysql
#!/bin/bash
#crea archivo log, donde dice ruta ponemos la ruta donde queremos que este
touch /ruta/operacion.log
#permisos del archivo
chmod 755 /ruta/operacion.log
#usuario del archivo
chown miusuario:miusuario operacion.log
echo -e "*********COMIENZA ************" >> /ruta/operacion.log
#le ponemos la fecha de ejecucion
date >> /ruta/operacion.log
#conexion y consulta a la DB, en caso de que devuelva algo lo tiramos al log
mysql -u root -ppassword basedato -e "SELECT NOW();" >> /ruta/operacion.log
echo -e "*********FIN ****************" >> /home/encuestasIVR/operacion.log
jueves, 23 de mayo de 2013
Consultando la existencia de un WS desde la consola y telnet
En el siguiente post veremos como consultar si esta disponible un wsdl mediante la consola utilizando telnet.
verificaremos el siguiente wsdl de ejemplo: http://localhost:80/integracion/oneamx/controladora/ivr/proxy/identifyCaller?wsdl
nota: se necesita tener instalado el telnet.
1. verificamos si tenemos instalado el telnet:
[myuser@mymaquina]# dpkg -l | grep telnet
2. Si está, nos saltamos este paso, sino lo instalamos así (ojo que esto instala el cliente y servidor):
[myuser@mymaquina]# apt-get install telnetd
3. Una vez instalado el telnet, necesitamos teclear la ip de la maquina y el puerto en donde se aloja el web service.
[myuser@mymaquina]# telnet www.miws.com 80
4. Luego una vez conectados saldrá algo similar a esto...
Trying 123.123.123.123...
Connected to 123.123.123.123.
Escape character is '^]'.
5. Ahora viene lo que nos interesa, debemos teclear lo siguiente para saber si el wsdl esta disponible o alcansable desde nuestra máquina:
GET /integracion/oneamx/controladora/ivr/proxy/identifyCaller?wsdl HTTP/1.0
como vemos ponemos el comando GET continuado de la ruta del wsdl pero sin el host y el puerto ya que estamos dentro del servidor (vía telnet).
Si esta disponible el wsdl saldrá la información en xml acerca de los tag del ws, en caso de que no tengamos acceso saldrá un html con un Error 404--Not Found o algun otro tipo de error.
Al hacer esta consulta, automaticamente nos desconectamos del telnet, por lo que para enviar un request debemos reconectarnos siguiendos los mismos pasos que en el principio.
Para enviar un request utilizaremos como ejemplo el siguente código:
nota: Este código también puede ser obtenido mediante el SOAP UI en la pestañita "raw"
entonces, nos conectamos al telnet y ponemos el siguiente código:
POST /integracion/oneamx/controladora/ivr/proxy/planForTariff HTTP/1.0
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://planfortariff.selfmanagement.amx.com/PlanForTariff"
Content-Length: 368
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:plan="http://planfortariff.selfmanagement.schema.amx.com">
<soapenv:Header/>
<soapenv:Body>
<plan:PlanForTariffRequest>
<plan:subscriberIdentifier>30900778</plan:subscriberIdentifier>
</plan:PlanForTariffRequest>
</soapenv:Body>
</soapenv:Envelope>
verificaremos el siguiente wsdl de ejemplo: http://localhost:80/integracion/oneamx/controladora/ivr/proxy/identifyCaller?wsdl
nota: se necesita tener instalado el telnet.
1. verificamos si tenemos instalado el telnet:
[myuser@mymaquina]# dpkg -l | grep telnet
2. Si está, nos saltamos este paso, sino lo instalamos así (ojo que esto instala el cliente y servidor):
[myuser@mymaquina]# apt-get install telnetd
3. Una vez instalado el telnet, necesitamos teclear la ip de la maquina y el puerto en donde se aloja el web service.
[myuser@mymaquina]# telnet www.miws.com 80
4. Luego una vez conectados saldrá algo similar a esto...
Trying 123.123.123.123...
Connected to 123.123.123.123.
Escape character is '^]'.
5. Ahora viene lo que nos interesa, debemos teclear lo siguiente para saber si el wsdl esta disponible o alcansable desde nuestra máquina:
GET /integracion/oneamx/controladora/ivr/proxy/identifyCaller?wsdl HTTP/1.0
como vemos ponemos el comando GET continuado de la ruta del wsdl pero sin el host y el puerto ya que estamos dentro del servidor (vía telnet).
Si esta disponible el wsdl saldrá la información en xml acerca de los tag del ws, en caso de que no tengamos acceso saldrá un html con un Error 404--Not Found o algun otro tipo de error.
Al hacer esta consulta, automaticamente nos desconectamos del telnet, por lo que para enviar un request debemos reconectarnos siguiendos los mismos pasos que en el principio.
Para enviar un request utilizaremos como ejemplo el siguente código:
nota: Este código también puede ser obtenido mediante el SOAP UI en la pestañita "raw"
entonces, nos conectamos al telnet y ponemos el siguiente código:
POST /integracion/oneamx/controladora/ivr/proxy/planForTariff HTTP/1.0
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://planfortariff.selfmanagement.amx.com/PlanForTariff"
Content-Length: 368
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:plan="http://planfortariff.selfmanagement.schema.amx.com">
<soapenv:Header/>
<soapenv:Body>
<plan:PlanForTariffRequest>
<plan:subscriberIdentifier>30900778</plan:subscriberIdentifier>
</plan:PlanForTariffRequest>
</soapenv:Body>
</soapenv:Envelope>
al enviar esto, el WS nos deberia responder con el Response del método.
nota: el parametro Content-Length contiene la cantidad de caracteres del mensaje request (desde <soapenv... hasta </soapenv...), esto lo podemos sacar en algun editor de texto q nos devuelva la cantidad de texto seleccionado, el notepad++ puede servirnos...
nota: el parametro Content-Length contiene la cantidad de caracteres del mensaje request (desde <soapenv... hasta </soapenv...), esto lo podemos sacar en algun editor de texto q nos devuelva la cantidad de texto seleccionado, el notepad++ puede servirnos...
lunes, 20 de mayo de 2013
Creando una variable de entorno
Existen diversas alternativas para crear este tipo de variables, pero primero veamos que son estas variables o que significan.
Las variables de entorno forman un conjunto de valores dinámicos que normalmente afectan el comportamiento de los procesos en una computadora. Sirven para facilitar el uso del sistema, los sistemas operativos incluyen variables predefinidas, que sirven como atajos para poder acceder a comandos y dispositivos. De no tenerlas, para invocar cada comando deberíamos escribir todas las veces la ruta entera de donde se encuentra el archivo del programa, por ejemplo, si quisiéramos crear un nuevo directorio deberíamos decir:
/bin/mkdir mi-direct
...en lugar de
mkdir mi-direct
Existen varias formas de setear variables de ambiente en nuestro sistema Linux, por ejemplo, en el archivo .bashrc el cual se ejecuta cada vez que un usuario inicia sesión, por lo que el archivo esta en la ruta /home/usuario/.bashrc este archivo es un buen lugar para definir nuestras variables de entorno, aunque también existen otros sitios...
Ahora veremos como añadir una ruta a la variable de entorno PATH, que es una variable común para asignar rutas de aplicaciones y comandos que se instalan en el sistema.
Nota: Se puede usar cualquier editor, en nuestro caso usaremos vim.
1.- Abrir el archivo .bashrc (la ruta esta en /home/usuario/.bashrc).
2.- Para evitar sobreescribir esta variable de entorno (ya que pude estar definida en otro archivo), agregaremos una linea al final del archivo:
o también podemos agregar una nueva variable de entorno, como por ejemplo agregamos la variable para saber la ruta de un servidor Tomcat
3.- Reiniciar la sesión del usuario en la cual se agregó la linea en el archivo .bashrc o ejecutar el comando source, el cual mantiene el valor de la variable de ambiente.
4.- Probar que se haya iniciado, escribir:
ó para ver las variable creadas, tecleamos:
Las variables de entorno forman un conjunto de valores dinámicos que normalmente afectan el comportamiento de los procesos en una computadora. Sirven para facilitar el uso del sistema, los sistemas operativos incluyen variables predefinidas, que sirven como atajos para poder acceder a comandos y dispositivos. De no tenerlas, para invocar cada comando deberíamos escribir todas las veces la ruta entera de donde se encuentra el archivo del programa, por ejemplo, si quisiéramos crear un nuevo directorio deberíamos decir:
/bin/mkdir mi-direct
...en lugar de
mkdir mi-direct
Existen varias formas de setear variables de ambiente en nuestro sistema Linux, por ejemplo, en el archivo .bashrc el cual se ejecuta cada vez que un usuario inicia sesión, por lo que el archivo esta en la ruta /home/usuario/.bashrc este archivo es un buen lugar para definir nuestras variables de entorno, aunque también existen otros sitios...
Ahora veremos como añadir una ruta a la variable de entorno PATH, que es una variable común para asignar rutas de aplicaciones y comandos que se instalan en el sistema.
Nota: Se puede usar cualquier editor, en nuestro caso usaremos vim.
1.- Abrir el archivo .bashrc (la ruta esta en /home/usuario/.bashrc).
2.- Para evitar sobreescribir esta variable de entorno (ya que pude estar definida en otro archivo), agregaremos una linea al final del archivo:
export PATH=$PATH:/directorio1:/directorio2:...:/directorioN
o también podemos agregar una nueva variable de entorno, como por ejemplo agregamos la variable para saber la ruta de un servidor Tomcat
export CATALINA_HOME="/opt/tomcat"
3.- Reiniciar la sesión del usuario en la cual se agregó la linea en el archivo .bashrc o ejecutar el comando source, el cual mantiene el valor de la variable de ambiente.
source /home/nombreusuario/.bashrc
4.- Probar que se haya iniciado, escribir:
$PATH
ó para ver las variable creadas, tecleamos:
export
martes, 20 de noviembre de 2012
Instalación de java en Fedora
Primero descargar desde http://java.sun.com/javase/downloads/index.jsp, tratar de bajar la ultima versión de java o la que necesiten.
nota: Bajar la version .tar.gz y NO la .rpm
Una vez hemos descargado la versión de Java adecuada procedemos a instalar algunas dependencias necesarias (Requiere contraseña de root):
Una vez instaladas creamos el enlace de las nuevas librerías digitando en consola (Requiere contraseña de root):
Ahora procedemos a instalar Java. Asumiendo que el instalador quedó en la carpeta Descargas ejecutamos en consola (Requiere contraseña de root) (una instrucción por línea):
Dicho archivo debe contener las siguientes líneas:
$ alternatives --config java
Ahora deberías ver algo como:
There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java 2 /opt/jdk1.7.0_02/bin/java Enter to keep the current selection[+], or type selection number:
Ingrese el número de la opción que ingresamos (por ejemplo 2). Si todo salió bien digita en consola:
$ java -version
Debes ver algo como:
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) Client VM (build 23.5-b02, mixed mode)
Agregando el plugin de Java a Firefox
Finalmente agregamos el plugin a Firefox digitando en una terminal (Ejecuta como root):
alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/jdk1.7.0_02/jre/lib/i386/libnpjp2.so 2
Una vez hecho ésto reinicia el navegador Firefox y visita el sitio de Sun para verificar la instalación http://www.java.com/es/download/installed.jsp
nota: Bajar la version .tar.gz y NO la .rpm
Una vez hemos descargado la versión de Java adecuada procedemos a instalar algunas dependencias necesarias (Requiere contraseña de root):
$ su -c 'yum install compat-libstdc++-33 compat-libstdc++-296'
Una vez instaladas creamos el enlace de las nuevas librerías digitando en consola (Requiere contraseña de root):
$ su -c '/sbin/ldconfig'
Ahora procedemos a instalar Java. Asumiendo que el instalador quedó en la carpeta Descargas ejecutamos en consola (Requiere contraseña de root) (una instrucción por línea):
$ su - # cd Descargas/ # tar zxvf jdk-7u02-linux-i586.tar.gz # mv jdk1.7.0_02 /optUna vez hecho esto es momento de hacer nuestra instalación la predeterminada en el sistema; primero creamos el archivo java.sh (puedes reemplazar nano por tu editor de texto favorito, como por ejemplo gedit o kwrite):
$ su -c 'yum -y install nano'
$ su -c 'nano /etc/profile.d/java.sh'
Dicho archivo debe contener las siguientes líneas:
export JAVA_HOME=/opt/jdk1.7.0_02
export PATH=$JAVA_HOME/bin:$PATH
Guarda y cierra el editor de texto (Ctrl+O y Ctrl+X en nano), a continuación digita en una terminal (como root):
# source /etc/profile.d/java.sh
# alternatives --config java
Verás algo en pantalla como:
There is 1 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
Enter to keep the current selection[+], or type selection number:
Nos muestra la lista de programas que proveen la funcionalidad de Java.
En este caso sólo hay uno así que agregaremos el número 2. Si el comando
no muestra nada, no te preocupes, significa que no hay una instalación
de Java y para eso estamos aquí. Con el
siguiente comando agrega tu instalación:
# alternatives --install /usr/bin/java java /opt/jre1.7.0_02/bin/java 2
Nota: Si no tienes ningún programa que provea Java reemplaza el número 2 por un 1. Si hubieran 2 programas ajusta el comando reemplazando el 2 del final por un 3 y así sucesivamente.Con éste comando se debió haber agregado nuestra versión de Java, así que una vez más ejecuta:
$ alternatives --config java
Ahora deberías ver algo como:
There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java 2 /opt/jdk1.7.0_02/bin/java Enter to keep the current selection[+], or type selection number:
Ingrese el número de la opción que ingresamos (por ejemplo 2). Si todo salió bien digita en consola:
$ java -version
Debes ver algo como:
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) Client VM (build 23.5-b02, mixed mode)
Agregando el plugin de Java a Firefox
Finalmente agregamos el plugin a Firefox digitando en una terminal (Ejecuta como root):
alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/jdk1.7.0_02/jre/lib/i386/libnpjp2.so 2
Una vez hecho ésto reinicia el navegador Firefox y visita el sitio de Sun para verificar la instalación http://www.java.com/es/download/installed.jsp
jueves, 4 de octubre de 2012
Cron en Linux
Qué es el cron: Es un programa de Linux que permite la ejecución de tareas automatizadas a una hora o fecha especificada. Es el equivalente a los at de windows. Este programilla viene integrado en casi todas las distribuciones de Linux.
Iniciar Servicio del Cron: El cron es un demonio (servicio), que autoarranca al iniciar el sistema operativo, sin embarga a veces se requiere de subir o bajar el servicio a dispocición para ello ocuparemos los siguientes comandos:
pregunta si esta activo:
Usando Cron: hay mas de una forma de utilizar este servicio, sin embargo, explicare solo una que es de modificar directamente el archivo.
crontab -e
con el comando anterior editamos directamente el archivo.
una vez abierto si este no esta vacío deberíamos ver un cosa así:
en este caso le ingresaremos un archivo .sh el cual ejecuta una serie de procesos y que se ejecutara cada 1 minuto de cada hora.
para guardar podemos usar los comandos del vim :x
Tabla de ejemplo:
Iniciar Servicio del Cron: El cron es un demonio (servicio), que autoarranca al iniciar el sistema operativo, sin embarga a veces se requiere de subir o bajar el servicio a dispocición para ello ocuparemos los siguientes comandos:
pregunta si esta activo:
#> /etc/rc.d/init.d/crond status #> /etc/init.d/crond status crond (pid 507) is running... #> service crond status crond (pid 507) is running... # ps -ef | grep crond #> /etc/rc.d/init.d/crond start Starting crond: [ OK ]
o bien quieres bajar el sevicio:
#> /etc/rc.d/init.d/crond stop Stopping crond: [ OK ]
Usando Cron: hay mas de una forma de utilizar este servicio, sin embargo, explicare solo una que es de modificar directamente el archivo.
crontab -e
con el comando anterior editamos directamente el archivo.
una vez abierto si este no esta vacío deberíamos ver un cosa así:
0 22 * * * root /usr/respaldodiario.sh* * * * * root/usr/ejempl2.sh 0 23 * * 5 root /usr/respaldosemanal.sh 0 8,20 * * * sergio mail -s "sistema funcionando" sgd@ejemplo.com
en este caso le ingresaremos un archivo .sh el cual ejecuta una serie de procesos y que se ejecutara cada 1 minuto de cada hora.
0 22 * * * root /usr/respaldodiario.sh* * * * * root/usr/ejempl2.sh 0 23 * * 5 root/usr/respaldosemanal.sh 0 8,20 * * * sergio mail -s "sistema funcionando" sgd@ejemplo.com* * * * * root/usr/archivo.sh
para guardar podemos usar los comandos del vim :x
Resumiendo lo anterior y considerando otras opciones de crontab:
$> crontab archivo.cron
$> crontab -e
$> crontab -l
$> crontab -r
Tabla de ejemplo:
| Campo | Descripción |
| Minuto | Controla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59. |
| Hora | Controla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es medianoche. |
| Día del Mes | Día del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 20, para ejecutar el comando el día 20 del mes. |
| Mes | Mes en que el comando se ejecutará, puede ser indicado numéricamente (1-12), o por el nombre del mes en inglés, solo las tres primeras letras. |
| Día de la semana | Día en la semana en que se ejecutará el comando, puede ser numérico (0-7) o por el nombre del día en inglés, solo las tres primeras letras. (0 y 7 = domingo) |
| Usuario | Usuario que ejecuta el comando. |
| Comando | Comando, script o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios. |
| Ejemplo | Descripción |
| 01 * * * * | Se ejecuta al minuto 1 de cada hora de todos los días |
| 15 8 * * * | A las 8:15 a.m. de cada día |
| 15 20 * * * | A las 8:15 p.m. de cada día |
| 00 5 * * 0 | A las 5 a.m. todos los domingos |
| * 5 * * Sun | Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos |
| 45 19 1 * * | A las 7:45 p.m. del primero de cada mes |
| 01 * 20 7 * | Al minuto 1 de cada hora del 20 de julio |
| 10 1 * 12 1 | A la 1:10 a.m. todos los lunes de diciembre |
| 00 12 16 * Wen | Al mediodía de los días 16 de cada mes y que sea Miércoles |
| 30 9 20 7 4 | A las 9:30 a.m. del dia 20 de julio y que sea jueves |
| 30 9 20 7 * | A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana |
| 20 * * * 6 | Al minuto 20 de cada hora de los sábados |
| 20 * * 1 6 | Al minuto 20 de cada hora de los sábados de enero |
Script que consulta un proceso activo
//Scrip que pregunta por proceso, en caso de que no esta ejecutando, lo inicia...
//Se guarda en un archivo con extención .sh
#!/bin/bash
#crea el archivo log
touch /ruta/archivoProcesos.log
#permisos para el archivo de ser necesario
chmod 755 /ruta/archivoProcesos.log
echo -e "******************************************" > /ruta/archivoProcesos.log
date >> /ruta/archivoProcesos.log
echo -e "comprueba si corre programa" >> /ruta/archivoProcesos.log
echo -e "Consultando procesos" >> /ruta/archivoProcesos.log
##linea q consulta los procesos activos. y los envia al archivo log que creamos.
ps -aux | grep smdrRegistroLog >> /ruta/archivoProcesos.log
##ahora se busca dentro del archivo si existe el programa en ejecucion ern este caso como ejemplo ##buscaremos programaJava.jar y lo guardaremos en la variable valida_proceso_on
valida_proceso_on=`find /ruta/smdrProcesosCorriendo.log -type f | xargs grep -c programaJava.jar`
#ojo con los espacios, puede q lance error si lo dejamos todo junto
#si no lo encuentra devolvera 0
if [ $valida_proceso_on == 0 ]
then
echo -e "******************************************" >> /ruta/archivoProcesos.log
#lanzamos el programa nuevamente
echo -e "El programa no estaba en ejecución... se procede a subir..." >> /ruta/archivoProcesos.log
java -jar /ruta/programaJava.jar &
echo -e "******************************************" >> /ruta/archivoProcesos.log
echo -e "" >> /ruta/smdrProcesosCorriendo.log
fi
exit
Uso del ping
El comando ping se usa tanto en linux como en windows, es utilizado para la supervisión de red, a pesar de ser sencillo de utilizar, los resultados son muy útiles.
Segun wipedia:
Segun wipedia:
“La utilidad ping comprueba el estado de la conexión con uno o varios equipos remotos por medio de los paquetes de solicitud de eco y de respuesta de eco (ambos definidos en el protocolo de red ICMP) para determinar si un sistema IP específico es accesible en una red. Es útil para diagnosticar los errores en redes o enrutadores IP.
Muchas veces se utiliza para medir la latencia o tiempo que tardan en comunicarse dos puntos remotos, y por ello, se utiliza el término PING para referirse al lag o latencia de la conexión en los juegos en red.”
Ejemplo 1: incrementar o decrementar el intervalo de tiempo entre paquetes. Por ejemplo, el ping esperará cinco segundos antes de enviar el siguiente paquete:
ping -i 5 IP
Para decrementar el tiempo, por ejemplo:
ping -i 0.1 IP
Ejemplo 2: chequear si la interfaz de red “está levantada”. Por ejemplo:
ping 0
O bien, usando el nombre localhost o la ip 127.0.0.1:
ping localhost
ping 127.0.0.1
Ejemplo 3: enviar N paquetes y detenerse. En Linux y otras especies de Unix generalmente el comando ping no se detiene hasta presionar Ctrl+C, para enviar un número determinado de paquetes utilizamos el argumento -c
ping -c2 IP
Ejemplo 4: Mostrar la versión del comando
ping -V
Ejemplo 5: “innudar” la red. Solo disponible para superusuarios, envía cien o más paquetes por segundo, imprimiendo un punto por cada paquete enviado y un espacio una vez recibido.
ping -f localhost
Ejemplo 6: ping con audio, enviar un pitido (beep) cuando el host es encontrado
ping -a IP
Ejemplo 7: encontrar la dirección IP de un dominio. Cuando realizas un ping a un nombre de dominio, antes del envio de paquetes el comando escribe en la salida estándar entre paréntesis, luego del nombre de dominio, la IP del mismo.
ping -c 1 google.com
Ejemplo 8: mostrar solo las estadísticas del comando. Al finalizar el comando ping muestra estadísticas como cantidad de paquetes transmitidos, recibidos, porcentaje de paquetes perdidos y tiempo. Si queremos ver dichas estadísticas sin observar previamente la línea de cada paquete enviado podemos utilizar la opción -q (quiet)
ping -c5 -q 127.0.0.1
Ejemplo 9: cambiar el tamaño del paquete. Por defecto el tamaño del paquete del ping va de 56 a 100 bytes. Si utilizas el tamaño de paquete 100, verás ‘128 bytes’, esto se debe a que 28 bytes es el tamaño del encabezado del ping.
ping -s 100 localhost
Ejemplo 10: timeout. El parámetro -q especifica el tiempo límite para terminar con el ping. Es decir, por ejemplo -w 5, el comando ping intentará salir luego de cinco segundos terminará del envio de paquetes, independientemente cuando paquetes hayan sido enviados o recibidos.
ping -w 5 localhost
Ejemplo 11: ping online. Existen páginas webs como Just Ping que nos permiten realizar un ping desde diferentes localizaciones a nuestro servidor.
Ejemplo 12: terminar un ping por cantidad de paquetes o timeout.
ping -c 4 0 -w
Ejemplo 13: estadísticas parciales win salir. En vez de apretar Ctrl+C para terminar (SIGQUIT) el comando ping, puedes utilizar Ctrl+I para mostrar estadísticas parciales y continuar el envio.
Ejemplo 14: especificar el path (saltos) que el ping utilizará para enviar los paquete.
ping hop1 hop2 hop3 hopN IP
Ejemplo 15: mostrar la traza del paquete que es enviado y recibido, de esta forma se pueden ver los distintos saltos (hops) que atravesó el paquete para llegar a destino y visceversa.
ping -R IP
miércoles, 3 de octubre de 2012
Comandos Basicos Linux
cat: Muestra el contenido de archivos.
uso: cat nombreArchivo.extencion
cd: comando para acceder a un directorio o volver atras.
uso: cd nombreCarpeta (entra a carpeta)
cd /ruta/nombreCarpeta (entra a carpeta)
cd .. (vuelve atrás)
chmod: cambia permisos de usuario.
uso: chmod -R 777 /ruta/archivo o carpeta
chown: cambia permisos de usuario.
uso: chown nombreUsuario:nombreUsuario archivo o carpeta.
crontab -l : equivalentes a los at de Windows muestra los procesos que se encuentran programados para ejecutarse.
curl : llama a una pagina via consola, la cual muestra el resultado en codigo html.
uso : curl http://www.google.com
export: muestra las variables de ambiente.
ifconfig: muestra configuraciones de red.
init: se usa para apagar o reiniciar la máquina, entre otros.
uso: init 6 (reinicia el equipo)
init 0 (apaga el equipo)
kill n° pid -9: mata el proceso en cuestion, deteniendo todas las subtareas.
killall nombreDelPrograma: mata el proceso y todos los pid(numero de procesos) del programa.
locate: busca archivo o carpeta en todos los directorios.
uso: locate nombreArchivoóCarpeta
mkdir: crea directorio.
uso: mkdir nombreCarpeta
mv: mueve carpetas de un destino a otro. Tener cuidado con los permisos del archivo, ya que si no tienen permiso no los podran mover. Puede ser usado para mover carpetas o archivos.
uso: mv /ruta/carpetaoArchivo /ruta/carpetaoArchivo
ps : mustra los procesos que se estan ejecutando.
uso: ps -aux (muestra listado de procesos en ejecucion con detalles.)
ps -ef (muestra listado con detalles. )
ps -fea | grep nombreServicioAbuscar (muestra solo el programa en ejecucion si lo encuentra.)
rm: elimina directorio incluyendo todos los archivos y carpetas que se encuentran dentro.
uso: rm -rf directorio
source: Esto se usa cuando se quiere afectar las variables de ambiente (o entorno) desde un archivo.
uso: source /home/mi-user/.bashrc
tail: leer archivos.
vim: editor de texto.
uso: ver archivo: vim nombreArchivo
editar presionar i
guardar y salir tecla Esc y luego escribir ":wq" o tambien ":x"
salir sin guardar: Esc y luego escribir ":q" o tambien ":qa!"
wget: sirve para descargar archivos desde la consola.
uso:
wget http://ejemplo.com/programa.tar.gz
wget http://ejemplo.com/*.pdf //descarga todos los pdfs del directorio
wget -i archivo.txt //descarga mas de una url, en el archivo deben estar todas las urls a descargar
wget -o reporte.txt //genera un reporte con las descargas en curso.
wget -i -c archivo.txt // si la descarga se interrumpio, para continuar poner opcion 'c' para que siga desde donde quedó.
wget -c http://ejemplo.com/descarga.pdf
Suscribirse a:
Entradas (Atom)