https://wiki.fjra.es/wiki/api.php?action=feedcontributions&user=FJRA&feedformat=atomFJWiki - Contribuciones del usuario [es]2024-03-19T13:40:40ZContribuciones del usuarioMediaWiki 1.26.2https://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1704Tunneling Vía SSH2011-10-17T16:23:36Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
Con esto, hemos abierto el puerto 8022 en el localhost de "A" como túnel hacia el puerto 22 del host "C".<br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioC@127.0.0.1:/destin/en/C<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
=== Caso 3: Encadenando varios servidores ===<br />
<br />
En este caso tenemos cuatro máquinas A, B, C y D, y queremos acceder desde "A" hacia "D". Este sería el esquema final al que se quiere llegar:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------------------------/<br />
</source><br />
<br />
Una propuesta sería encadenarlo así:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------O |<br />
| |<br />
| |<br />
\-----------------/<br />
</source><br />
Donde la O representa el primer nodo de puentes.<br />
<br />
Entonces debemos crear un puente de un puerto en A hacia un puerto en B y luego desde ese puerto hacia D vía C:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:localhost:8023 usuarioB@B<br />
[usuarioB@B ~]$ ssh -L 8023:<hostD>:22 usuarioC@C<br />
</source><br />
<br />
Encontes ya en "A" se pueden ejecutar cosas como:<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioD@127.0.0.1:/origen/en/D /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioD@127.0.0.1:/destin/en/D<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioD@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1703Tunneling Vía SSH2011-10-17T16:21:13Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source lang=bash><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
Con esto, hemos abierto el puerto 8022 en el localhost de "A" como túnel hacia el puerto 22 del host "C".<br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioC@127.0.0.1:/destin/en/C<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
=== Caso 3: Encadenando varios servidores ===<br />
<br />
En este caso tenemos cuatro máquinas A, B, C y D, y queremos acceder desde "A" hacia "D". Este sería el esquema final al que se quiere llegar:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------------------------/<br />
</source><br />
<br />
Una propuesta sería encadenarlo así:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------O |<br />
| |<br />
| |<br />
\-----------------/<br />
</source><br />
Donde la O representa el primer nodo de puentes.<br />
<br />
Entonces debemos crear un puente de un puerto en A hacia un puerto en B y luego desde ese puerto hacia D vía C:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:localhost:8023 usuarioB@B<br />
[usuarioB@B ~]$ ssh -L 8023:<hostD>:22 usuarioC@C<br />
</source><br />
<br />
Encontes ya en "A" se pueden ejecutar cosas como:<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioD@127.0.0.1:/origen/en/D /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioD@127.0.0.1:/destin/en/D<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioD@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1702Tunneling Vía SSH2011-10-17T16:20:42Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<syntaxhighlight><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</syntaxhighlight><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
Con esto, hemos abierto el puerto 8022 en el localhost de "A" como túnel hacia el puerto 22 del host "C".<br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioC@127.0.0.1:/destin/en/C<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
=== Caso 3: Encadenando varios servidores ===<br />
<br />
En este caso tenemos cuatro máquinas A, B, C y D, y queremos acceder desde "A" hacia "D". Este sería el esquema final al que se quiere llegar:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------------------------/<br />
</source><br />
<br />
Una propuesta sería encadenarlo así:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------O |<br />
| |<br />
| |<br />
\-----------------/<br />
</source><br />
Donde la O representa el primer nodo de puentes.<br />
<br />
Entonces debemos crear un puente de un puerto en A hacia un puerto en B y luego desde ese puerto hacia D vía C:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:localhost:8023 usuarioB@B<br />
[usuarioB@B ~]$ ssh -L 8023:<hostD>:22 usuarioC@C<br />
</source><br />
<br />
Encontes ya en "A" se pueden ejecutar cosas como:<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioD@127.0.0.1:/origen/en/D /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioD@127.0.0.1:/destin/en/D<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioD@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1701Tunneling Vía SSH2011-02-18T17:13:34Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
Con esto, hemos abierto el puerto 8022 en el localhost de "A" como túnel hacia el puerto 22 del host "C".<br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioC@127.0.0.1:/destin/en/C<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
=== Caso 3: Encadenando varios servidores ===<br />
<br />
En este caso tenemos cuatro máquinas A, B, C y D, y queremos acceder desde "A" hacia "D". Este sería el esquema final al que se quiere llegar:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------------------------/<br />
</source><br />
<br />
Una propuesta sería encadenarlo así:<br />
<source><br />
+-+ +-+ +-+ +-+<br />
|A| ---> +B+ ---> |C| ---> |D|<br />
+-+ +-+ +-+ +-+<br />
| ^<br />
| |<br />
\--------O |<br />
| |<br />
| |<br />
\-----------------/<br />
</source><br />
Donde la O representa el primer nodo de puentes.<br />
<br />
Entonces debemos crear un puente de un puerto en A hacia un puerto en B y luego desde ese puerto hacia D vía C:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:localhost:8023 usuarioB@B<br />
[usuarioB@B ~]$ ssh -L 8023:<hostD>:22 usuarioC@C<br />
</source><br />
<br />
Encontes ya en "A" se pueden ejecutar cosas como:<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioD@127.0.0.1:/origen/en/D /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioD@127.0.0.1:/destin/en/D<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioD@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1700Tunneling Vía SSH2011-02-18T16:58:24Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
Con esto, hemos abierto el puerto 8022 en el localhost de "A" como túnel hacia el puerto 22 del host "C".<br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ scp -P 8022 /origen usuarioC@127.0.0.1:/destin/en/C<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1699Tunneling Vía SSH2011-02-18T16:56:26Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
=== Caso 2: Copiar entre dos servidores que no se pueden conectar directamente vía un intermediario ===<br />
<br />
Deseamos copiar archivos desde "C" hacia "A" vía un puente en "B" (para no dejar ahí los archivos, quizás por falta de espacio ahí). Tenemos el siguiente esquema:<br />
<source><br />
+-+ +-+ +-+<br />
|A| <--> +B+ <--> |C|<br />
+-+ +-+ +-+<br />
</source><br />
<br />
Queremos que desde "A" podamos "jalar" los archivos en "C", entonecs necesitaremos el siguiente túnel:<br />
<source><br />
+-+ +-+ +-+<br />
|A| ---> +B+ ---> |C|<br />
+-+ +-+ +-+<br />
| ^<br />
| |<br />
\-----------------/<br />
</source><br />
<br />
Para ello estando en "A" podemos hacer:<br />
<source><br />
[usuarioA@A ~]$ ssh -L 8022:<hostC>:22 usuarioB@B<br />
</source><br />
<br />
Lo cual nos permite hacer desde "A" ssh o scp a "C":<br />
<source><br />
[usuarioA@A ~]$ scp -P 8022 usuarioC@127.0.0.1:/origen/en/C /destino<br />
[usuarioA@A ~]$ ssh -p 8022 usuarioC@127.0.0.1<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Telnet_ssl&diff=1698Telnet ssl2011-02-18T03:49:14Z<p>FJRA: </p>
<hr />
<div>Para hacer "telnet" a un puerto ssl:<br />
<br />
openssl s_client -connect host:puerto<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Telnet_ssl&diff=1697Telnet ssl2011-02-18T03:48:42Z<p>FJRA: Página nueva: Para hacer "telnet" a un puerto ssl: <code> openssl s_client -connect host:puerto </code> Category:Tips</p>
<hr />
<div>Para hacer "telnet" a un puerto ssl:<br />
<br />
<code><br />
openssl s_client -connect host:puerto<br />
</code><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1696Programación2010-04-30T13:44:12Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Obtener parámetros:<br />
** Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
** Clase que encontré que lee también archivos puesto en las opciones o stdin: http://code.activestate.com/recipes/302262/<br />
** Ejemplo sencillo de uso de getopt: http://www.dreamincode.net/code/snippet2156.htm<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
* Numpy, librerías numéricas incluye también (F2Py): http://numpy.scipy.org/<br />
* Ejemplo de uso de F2Py: http://www.scipy.org/Cookbook/F2Py<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
* Advanced Bash-Scripting Guide: http://tldp.org/LDP/abs/html/index.html<br />
** En particular es buena la lista de variables internas: http://tldp.org/LDP/abs/html/internalvariables.html<br />
* Autocomplete de service: http://www.linux-noob.com/forums/index.php?/topic/1685-howto-create-the-service-command/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
== Mathematica ==<br />
<br />
* http://www.wolfram.com/products/mathematica/index.html<br />
* Sobre Kernel remotos: http://www.mathematica-users.org/webMathematica/wiki/wiki.jsp?pageName=FAQ_Remote_Kernels<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1695Programación2010-04-29T15:19:10Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Obtener parámetros:<br />
** Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
** Clase que encontré que lee también archivos puesto en las opciones o stdin: http://code.activestate.com/recipes/302262/<br />
** Ejemplo sencillo de uso de getopt: http://www.dreamincode.net/code/snippet2156.htm<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
* Numpy, librerías numéricas incluye también (F2Py): http://numpy.scipy.org/<br />
* Ejemplo de uso de F2Py: http://www.scipy.org/Cookbook/F2Py<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
* Advanced Bash-Scripting Guide: http://tldp.org/LDP/abs/html/index.html<br />
** En particular es buena la lista de variables internas: http://tldp.org/LDP/abs/html/internalvariables.html<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
== Mathematica ==<br />
<br />
* http://www.wolfram.com/products/mathematica/index.html<br />
* Sobre Kernel remotos: http://www.mathematica-users.org/webMathematica/wiki/wiki.jsp?pageName=FAQ_Remote_Kernels<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Ltail&diff=1694Ltail2010-03-23T16:26:38Z<p>FJRA: Página nueva: Hace un equivalente "tail -f" a las diferencias de una salida de "ls -l" cada 10 segundos. Código de ltail : <source lang="bash"> #!/bin/bash #Hecho por FJ LL=$(ls -l $@) echo "$L...</p>
<hr />
<div>Hace un equivalente "tail -f" a las diferencias de una salida de "ls -l" cada 10 segundos.<br />
<br />
Código de ltail :<br />
<br />
<source lang="bash"><br />
#!/bin/bash<br />
#Hecho por FJ<br />
<br />
LL=$(ls -l $@)<br />
echo "$LL"<br />
while true; do<br />
sleep 10<br />
LLB="$LL"<br />
LL=$(ls -l $@)<br />
diff <(echo "$LLB") <(echo "$LL") | egrep "^> " | sed -e 's/^> //g';<br />
done<br />
</source><br />
<br />
[[Category:Bash_Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=SSH_v%C3%ADa_un_proxy&diff=1693SSH vía un proxy2009-11-26T19:48:01Z<p>FJRA: Página nueva: == Introducción == Si una máquina tiene salida sólo vía un proxy https, se necesita utilizar otro programa adicional para hacer que ssh pueda usar el proxy. La página original ...</p>
<hr />
<div>== Introducción ==<br />
<br />
Si una máquina tiene salida sólo vía un proxy https, se necesita utilizar otro programa adicional para hacer que ssh pueda usar el proxy.<br />
<br />
La página original es: http://www.agroman.net/corkscrew/<br />
<br />
La wiki sobre la baso esta página es: http://wiki.kartbuilding.net/index.php/Corkscrew_-_ssh_over_https<br />
<br />
== Instalación ==<br />
<br />
Después de bajar el programa (ruta directa: http://www.agroman.net/corkscrew/corkscrew-2.0.tar.gz), debe descomprimirse, y hacer el clásico, <tt>configure</tt>, <tt>make</tt> y <tt>make install</tt>. Antes de hacer <tt>configure</tt> puedes configurarlo así para cambiar el directorio destino:<br />
ac_default_prefix=/home/user/corkscrew/corkscrew-2.0/bin/corkscrew<br />
<br />
== Configuración ==<br />
<br />
En el archivo de configuración del ssh (el global /etc/ssh/ssh_config ó mejor el local: ~/.ssh/config) debe agregarse:<br />
ProxyCommand /home/user/corkscrew/corkscrew-2.0/bin/corkscrew Internal_Proxy_Name ProxyPort %h %p<br />
<br />
Ejemplo:<br />
ProxyCommand /home/user/corkscrew/corkscrew-2.0/bin/corkscrew proxy.fjra.es 3218 %h %p<br />
<br />
Desde este momento, cada vez que se invoque a <tt>ssh</tt> se usará el proxy.<br />
<br />
== Vea también ==<br />
<br />
* [[Tunneling Vía SSH]]<br />
* [[Proxy Vía SSH]]<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1692Programación2009-10-09T03:49:19Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Obtener parámetros:<br />
** Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
** Clase que encontré que lee también archivos puesto en las opciones o stdin: http://code.activestate.com/recipes/302262/<br />
** Ejemplo sencillo de uso de getopt: http://www.dreamincode.net/code/snippet2156.htm<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
* Numpy, librerías numéricas incluye también (F2Py): http://numpy.scipy.org/<br />
* Ejemplo de uso de F2Py: http://www.scipy.org/Cookbook/F2Py<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
* Advanced Bash-Scripting Guide: http://tldp.org/LDP/abs/html/index.html<br />
** En particular es buena la lista de variables internas: http://tldp.org/LDP/abs/html/internalvariables.html<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=KDE_No_se_puede_mover_las_ventanas&diff=1691KDE No se puede mover las ventanas2009-08-07T02:08:05Z<p>FJRA: </p>
<hr />
<div>En CentOS, el KDE 3.3 que estoy usando, tiene un bug que hace que las ventanas no se puedan mover ni cambiar de tamaño. Se ve todo normal, y todo funciona bien, con excepción de poder mover y cambiar de tamaño. Sí se puede maximizar. En el foro de KDE encontré la solución (http://www.kde-forum.org/artikel/9778/cannot-move-windows.html), debe ejecutarse:<br />
<br />
<source lang=bash><br />
kwin --replace<br />
</source><br />
<br />
Si aparece algún error y no ejecuta bien, se pierden los marcos y títulos, lo recomendable es tratar de cerrar todas las aplicaciones que se pueda y volver a ejecutarlo.<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=KDE_No_se_puede_mover_las_ventanas&diff=1690KDE No se puede mover las ventanas2009-08-07T02:06:15Z<p>FJRA: Página nueva: En CentOS, el KDE 3.3 que estoy usando, tiene un bug que hace que las ventanas no se puedan mover ni cambiar de tamaño. Se ve todo normal, y todo funciona bien, con excepción de pod...</p>
<hr />
<div>En CentOS, el KDE 3.3 que estoy usando, tiene un bug que hace que las ventanas no se puedan mover ni cambiar de tamaño. Se ve todo normal, y todo funciona bien, con excepción de poder mover y cambiar de tamaño. Sí se puede maximizar. En un foro encontré la solución, debe ejecutarse:<br />
<br />
<source lang=bash><br />
kwin --replace<br />
</source><br />
<br />
Si aparece algún error y no ejecuta bien, se pierden los marcos y títulos, lo recomendable es tratar de cerrar todas las aplicaciones que se pueda y volver a ejecutarlo.<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Bloquearip&diff=1689Bloquearip2009-07-13T15:55:25Z<p>FJRA: </p>
<hr />
<div>Para bloquear un IP totalmente vía el iptables. No lo guarda.<br />
<br />
Código de bloquearip.<br />
<br />
<source lang="bash"><br />
#!/bin/bash<br />
<br />
for argumento; do<br />
iptables -I INPUT -s $argumento -j DROP<br />
done<br />
</source><br />
<br />
Y el código para desbloquearip sería:<br />
<source lang="bash"><br />
#!/bin/bash<br />
<br />
for argumento; do<br />
iptables -D INPUT -s $argumento -j DROP<br />
done<br />
</source><br />
<br />
[[Category:Bash_Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Agregando_un_Site_en_WP-MU&diff=1688Agregando un Site en WP-MU2009-06-25T20:24:42Z<p>FJRA: </p>
<hr />
<div>En wp-mu normalmente sólo se puede manejar "un site" (o dominio raíz), y para cada blog usa un subdominio o directorios. Así que aquí están los pasos que sigo para hacer de mi instalación de wp-mu no sólo "multidomain" (o mejor dicho "multi-subdomain") sino también "multi-site".<br />
<br />
== Crear blog ==<br />
<br />
Primero se debe estar como administrador y crear el blog como un subdominio más del blog principal.<br />
<br />
== Editar opciones del blog ==<br />
<br />
En las opciones del blog hay que hacer las siguientes ediciones:<br />
<br />
* En lo que corresponde a "Blog Info (wp_blogs)"<br />
** Dominio: nuevoblog.com<br />
* En "Opciones del Blog (wp_#_options)" (el # es el blog_id, tenerlo en cuenta para después):<br />
** Siteurl: http://nuevoblog.com/<br />
** Home: http://nuevoblog.com/<br />
** Fileupload Url: http://nuevoblog.com/files<br />
<br />
== Agregar Site en la Base de Datos ==<br />
<br />
Desde el phpMyAdmin o cualquier otro cliente de mysql, debe agregarse y editarse lo siguiente:<br />
<br />
* En la tabla wp_site agregar un registro nuevo (asignar un `id` que no exista):<br />
INSERT INTO `wp_site` (`id`, `domain`, `path`) VALUES ('7', 'nuevoblog.com', '/');<br />
* En la tabla wp_metasite hacer el siguiente insert (cambiando el `siteid` y demás valores según correspondan):<br />
INSERT INTO `wp_sitemeta` (`site_id`, `meta_key`, `meta_value`) VALUES<br />
(7, 'site_name', 'Nuevo Blog'),<br />
(7, 'admin_email', 'correo@admin'),<br />
(7, 'admin_user_id', '1'),<br />
(7, 'registration', 'none'),<br />
(7, 'upload_filetypes', 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf'),<br />
(7, 'blog_upload_space', '10'),<br />
(7, 'fileupload_maxk', '1500'),<br />
(7, 'site_admins', 'a:2:{i:0;s:5:"admin";i:1;s:4:"otro";}'),<br />
(7, 'illegal_names', 'a:7:{i:0;s:3:"www";i:1;s:3:"web";i:2;s:4:"root";i:3;s:5:"admin";i:4;s:4:"main";i:5;s:6:"invite";i:6;s:13:"administrator";}'),<br />
(7, 'welcome_email', 'Estimado/a usuario/a,\r\n\r\nSu nueva bitácora, SITE_NAME, ha sido activado en:\r\nBLOG_URL\r\n\r\nUsted puede entrar en el administrador usando la siguiente información:\r\nUsuario: USERNAME\r\nContraseña: PASSWORD\r\nLogin: BLOG_URLwp-login.php\r\n\r\nEsperamos que disfrute su nueva bitácora.\r\n\r\nGracias\r\n\r\n--Equipo @ SITE_NAME'),<br />
(7, 'first_post', 'Bienvenido a <a href=\\"SITE_URL\\">SITE_NAME</a>. Este es el primer post, edítalo, bórralo, etc...'),<br />
(7, 'WPLANG', 'es_ES'),<br />
(7, 'banned_email_domains', 'a:1:{i:0;s:11:"hotmail.com";}');<br />
* Ahora debe entrarse al admin del nuevo blog y editar las opciones del site para terminar de ajustarlas.<br />
* En la tabla wp_blogs cambiar el `site_id` del blog que queremos editar por el `id` asignado antes. Por ejemplo puede hacerse:<br />
UPDATE `wp_blogs` set `site_id` = 7 WHERE `blog_id` = 7;<br />
<br />
== Consideraciones en el Host ==<br />
<br />
No debe olvidarse agregar en el VirtualHost (o equivalente) el dominio como alias.<br />
<br />
== Plugins ==<br />
<br />
Hay varios Plugins que también le dan la extensión a wp-mu a ser multi-site, aunque aún no los he probado. Este es el que mejor se ve: http://wpmudev.org/project/Multi-Site-Manager .<br />
<br />
[[Category:Aplicaciones Web]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1687Programación2009-06-15T05:36:31Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Obtener parámetros:<br />
** Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
** Clase que encontré que lee también archivos puesto en las opciones o stdin: http://code.activestate.com/recipes/302262/<br />
** Ejemplo sencillo de uso de getopt: http://www.dreamincode.net/code/snippet2156.htm<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
* Numpy, librerías numéricas incluye también (F2Py): http://numpy.scipy.org/<br />
* Ejemplo de uso de F2Py: http://www.scipy.org/Cookbook/F2Py<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Matriz2math.sed&diff=1686Matriz2math.sed2009-06-03T22:41:19Z<p>FJRA: </p>
<hr />
<div>Script para pasar un archivo de texto que contiene una matriz en formato separada por tabulaciones a matriz para Mathematica.<br />
<br />
<br />
== matriz2math.sed ==<br />
<br />
#Convierte una matriz por tabs en formato para mathematica<br />
<br />
1 i \{<br />
s/\t/,/g<br />
$! s/^.*$/\{&\},/g<br />
$ s/^.*$/\{&\}}/g<br />
<br />
<br />
== Ejemplos ==<br />
<br />
Usando math2matriz.sed:<br />
<br />
$ echo "{{1,2},{3,4}}" | sed -f math2matriz.sed | sed -f matriz2math.sed<br />
{<br />
{1,2},<br />
{3,4}}<br />
<br />
Que será luego la matriz:<br />
<math><br />
\left( \begin{matrix} 1&2 \\ 3&4 \end{matrix} \right)<br />
</math><br />
<br />
== Ver también ==<br />
<br />
* [[math2matriz.sed]]<br />
* [[matriz2fortran.sed]]<br />
* [[Enlaces:sed]]<br />
<br />
[[Category:Sed_Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Math2matriz.sed&diff=1685Math2matriz.sed2009-06-03T22:40:37Z<p>FJRA: </p>
<hr />
<div>Script [[sed]] para transformar una matriz en formato Mathematica (o sea, de llaves) a formato texto separada por tabulaciones<br />
<br />
<br />
== math2matriz.sed ==<br />
<br />
<br />
#Transforma una celda de mathematica en una matriz separada por tabs<br />
<br />
:a<br />
$!N<br />
$!ba<br />
<br />
s/\n//g<br />
s/\\[!()]//g<br />
s/[`][*]^/e/g<br />
s/[`]//g<br />
s/\\//g<br />
s/[ ][ ]*//g<br />
<br />
s/[{}]\{2\}//g<br />
s/[}],[{]/\n/g<br />
s/,/\t/g<br />
<br />
<br />
== Ejemplos ==<br />
<br />
Matriz simple:<br />
$ echo "{{1,2},{3,4}}" | sed -f math2matriz.sed<br />
1 2<br />
3 4<br />
<br />
<br />
== Ver también ==<br />
<br />
* [[matriz2math.sed]]<br />
* [[matriz2fortran.sed]]<br />
* [[Enlaces:sed]]<br />
<br />
[[Category:Sed_Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Matriz2fortran.sed&diff=1684Matriz2fortran.sed2009-06-03T22:39:17Z<p>FJRA: </p>
<hr />
<div>Script [[sed]] para transformar una matriz texto separada por tabulaciones a una expresión de creación de matriz en fortran, sólo hay que reemplazar al final las dimensiones. Devuelve los números con ''d0'' para expresar doble precisión. Los números que ya tengan notación científica son cambiados a notación científica con ''d''.<br />
<br />
<br />
== matriz2fortran.sed ==<br />
<br />
#Convierte una matriz por tabs en formato para fortran<br />
<br />
1 i = reshape((/ \&<br />
s/[0-9.][0-9.]*/&d0/g<br />
s/d0[eEdD]\([-+]\?[0-9]*\)d0/d\1/g<br />
s/\t/,/g<br />
$! s/^.*$/\t&, \&/g<br />
$ {<br />
s/^.*$/\t&\/), \&/g<br />
a\<br />
(/n, n/) )<br />
}<br />
<br />
<br />
== Ejemplo ==<br />
<br />
Ejemplo usando [[math2matriz.sed]]:<br />
<br />
$ echo "{{1.5,2E-5},{3e4,4}}" | sed -f math2matriz.sed | sed -f matriz2fortran.sed<br />
= reshape((/ &<br />
1.5d0,2d-5, &<br />
3d4,4d0/), &<br />
(/n, n/) )<br />
<br />
<br />
== Ver también ==<br />
<br />
* [[math2matriz.sed]]<br />
* [[matriz2math.sed]]<br />
* [[Enlaces:sed]]<br />
<br />
[[Category:Sed_Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Gnuplot_Tips&diff=1683Gnuplot Tips2009-06-03T22:28:23Z<p>FJRA: </p>
<hr />
<div>Algunas notas de cómo utilizar [http://www.gnuplot.info Gnuplot].<br />
<br />
== Convertir matriz de texto a binario ==<br />
<br />
Ver [[transformar-matriz-gnuplot]] y [[pasar-binario.c]].<br />
<br />
== Todas las filas de una matriz ==<br />
Con esto se graficarían todas las filas en un mismo gráfico (sería un X vs Z):<br />
<source><br />
gnuplot> plot "data.bin" binary with lines<br />
</source><br />
<br />
Si quisieras todas las columnas (un Y vs Z):<br />
<source><br />
gnuplot> plot "data.bin" binary using 2:3<br />
</source><br />
<br />
== Fila de una matriz ==<br />
Para graficar una fila de una matriz (lo que corresponde a un valor de Y), considerando todo el rango en X, y considerando Z de 0 a 1.<br />
<source><br />
gnuplot> plot [][0:1] "data.bin" binary every 1:100000::1 with lines notitle<br />
</source><br />
El último elemento es el número de fila, comenzando por 0.<br />
<br />
== Columna de una matriz ==<br />
<br />
Si quisieras una sola columna puedes hacer::<br />
<source><br />
gnuplot> plot "data.bin" binary using 2:3 every 30::5 with lines<br />
</source><br />
Donde 30 sería la cantidad de columnas total que hay, y 3 es la columna que quiero graficar (comienza en 0).<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Transformar-matriz-gnuplot&diff=1682Transformar-matriz-gnuplot2009-06-03T22:15:54Z<p>FJRA: </p>
<hr />
<div>Este script sirve para convertir una tabla de datos en el formato binario matricial de [http://www.gnuplot.info gnuplot]. Requiere de [[pasar-binario.c]].<br />
<br />
== Formato ==<br />
<br />
Formato del archivo de texto a transformar:<br />
<source><br />
# El archivo puede tener comentarios, comenzando con #<br />
# El que comience con #! debe tener el formato <N> y1 y2 ... yN<br />
# Las siguientes serán de la forma x1 z11 z12 ... z1N<br />
#! 4 0 1 2 3<br />
0.0 .5 .6 .8 .4<br />
0.5 1.5 2.6 3.8 4.4<br />
1.0 8.5 7.6 6.8 5.4<br />
# Puede haber comentarios finales y al medio...<br />
</source><br />
<br />
== Uso ==<br />
<br />
<source><br />
$ transformar-matriz-gnuplot <input.dat >output.bin<br />
</source><br />
<br />
== Código fuente de transformar-matriz-gnuplot ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
<br />
cat | sed -e "{s/^ *#!//g}" -e "{s/#.*$//g}" | pasar-binario<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Gnuplot_Tips&diff=1681Gnuplot Tips2009-06-03T22:04:10Z<p>FJRA: </p>
<hr />
<div>Algunas notas de cómo utilizar [http://www.gnuplot.info Gnuplot].<br />
<br />
== Convertir matriz de texto a binario ==<br />
<br />
Ver [[transformar-matriz-gnuplot]] y [[pasar-binario.c]].<br />
<br />
== Fila de una matriz ==<br />
Para graficar una fila de una matriz (lo que corresponde a un valor de Y), considerando todo el rango en X, y considerando Z de 0 a 1.<br />
<source><br />
gnuplot> plot [][0:1] "data.bin" binary every 1:100000::1 with lines notitle<br />
</source><br />
El último elemento es el número de fila, comenzando por 0.<br />
<br />
== Todas las filas de una matriz ==<br />
Con esto se graficaría X vs Z:<br />
<source><br />
gnuplot> plot "data.bin" binary with lines<br />
</source><br />
<br />
Si quisieras todas las columnas y como eje X el eje Y:<br />
<source><br />
gnuplot> plot "data.bin" binary using 2:3 with lines<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Gnuplot_Tips&diff=1680Gnuplot Tips2009-06-03T21:31:00Z<p>FJRA: Página nueva: Algunas notas de cómo utilizar [http://www.gnuplot.info Gnuplot]. == Convertir matriz de texto a binario == Ver transformar-matriz-gnuplot y pasar-binario.c. == Fila de un...</p>
<hr />
<div>Algunas notas de cómo utilizar [http://www.gnuplot.info Gnuplot].<br />
<br />
== Convertir matriz de texto a binario ==<br />
<br />
Ver [[transformar-matriz-gnuplot]] y [[pasar-binario.c]].<br />
<br />
== Fila de una matriz ==<br />
Para graficar una fila de una matriz (lo que corresponde a un valor de Y), considerando todo el rango en X, y considerando Z de 0 a 1.<br />
<source><br />
gnuplot> plot [][0:1] "data.bin" binary every 1:100000::1 with lines notitle<br />
</source><br />
El último elemento es el número de fila, comenzando por 0.<br />
<br />
== Todas las filas de una matriz ==<br />
Con esto se graficaría X vs Z:<br />
<source><br />
gnuplot> plot "data.bin" binary using 2:3 with lines<br />
</source><br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Transformar-matriz-gnuplot&diff=1679Transformar-matriz-gnuplot2009-06-03T14:34:49Z<p>FJRA: Página nueva: Este script sirve para convertir una tabla de datos en el formato binario matricial de [http://www.gnuplot.info gnuplot]. Requiere de pasar-binario.c. == Formato == Formato del ...</p>
<hr />
<div>Este script sirve para convertir una tabla de datos en el formato binario matricial de [http://www.gnuplot.info gnuplot]. Requiere de [[pasar-binario.c]].<br />
<br />
== Formato ==<br />
<br />
Formato del archivo de texto a transformar:<br />
<source><br />
# El archivo puede tener comentarios, comenzando con #<br />
# El que comience con #! debe tener el formato <N> x1 x2 ... xN<br />
# Las siguientes serán de la forma y1 z11 z12 ... z1N<br />
#! 4 0 1 2 3<br />
0.0 .5 .6 .8 .4<br />
0.5 1.5 2.6 3.8 4.4<br />
1.0 8.5 7.6 6.8 5.4<br />
# Puede haber comentarios finales y al medio...<br />
</source><br />
<br />
== Uso ==<br />
<br />
<source><br />
$ transformar-matriz-gnuplot <input.dat >output.bin<br />
</source><br />
<br />
== Código fuente de transformar-matriz-gnuplot ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
<br />
cat | sed -e "{s/^ *#!//g}" -e "{s/#.*$//g}" | pasar-binario<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1678Programación2009-06-03T05:25:28Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Obtener parámetros:<br />
** Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
** Clase que encontré que lee también archivos puesto en las opciones o stdin: http://code.activestate.com/recipes/302262/<br />
** Ejemplo sencillo de uso de getopt: http://www.dreamincode.net/code/snippet2156.htm<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Pasar-binario.c&diff=1677Pasar-binario.c2009-05-29T15:46:34Z<p>FJRA: </p>
<hr />
<div>Este es un programita que convierte números en modo texto a su representación binaria en precisión simple. Lo uso para generar los archivos binary necesarios para "splot binary" de [http://www.gnuplot.info/ gnuplot].<br />
<br />
== Compilación ==<br />
<br />
Dado que estamos en el directorio de pasar-binario.c, con un make bien instalado bastaría hacer:<br />
<br />
<source><br />
$ make pasar-binario<br />
</source><br />
<br />
O el clásico:<br />
<source><br />
$ gcc -o pasar-binario pasar-binario.c<br />
</source><br />
<br />
== Ejemplo de uso ==<br />
<br />
Dado un archivo de texto "datos.dat":<br />
<br />
<source><br />
3 0 1 2<br />
0.0 1.5 1.6 2.4<br />
0.5 0.5 0.6 1.3<br />
</source><br />
<br />
Podemos convertirlo a su forma binaria (y listo para usar con gnuplot):<br />
<source><br />
$ ./pasar-binario <datos.dat >datos.bin<br />
</source><br />
== Código fuente de pasar-binario.c ==<br />
<br />
<source lang=c><br />
//Hecho por FJ<br />
//Sea GPL<br />
#include <stdio.h><br />
<br />
int main()<br />
{<br />
float r;<br />
char *c;<br />
<br />
c = (char*) &r;<br />
<br />
while(scanf("%g", &r)==1)<br />
printf("%c%c%c%c", c[0], c[1], c[2], c[3]);<br />
<br />
return 0;<br />
}<br />
</source><br />
<br />
[[Category:Miniprogramas C/C++]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Categor%C3%ADa:Miniprogramas_C/C%2B%2B&diff=1676Categoría:Miniprogramas C/C++2009-05-29T15:45:58Z<p>FJRA: Página nueva: Category:Todas</p>
<hr />
<div>[[Category:Todas]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Pasar-binario.c&diff=1675Pasar-binario.c2009-05-29T15:45:33Z<p>FJRA: Página nueva: Este es un programita que convierte números en modo texto a su representación binaria en precisión simple. Lo uso para generar los archivos binary necesarios para "splot binary" de...</p>
<hr />
<div>Este es un programita que convierte números en modo texto a su representación binaria en precisión simple. Lo uso para generar los archivos binary necesarios para "splot binary" de [http://www.gnuplot.info/ gnuplot].<br />
<br />
<br />
== Compilación ==<br />
<br />
Dado que estamos en el directorio de pasar-binario.c, con un make bien instalado bastaría hacer:<br />
<br />
<source><br />
$ make pasar-binario<br />
</source><br />
<br />
O el clásico:<br />
<source><br />
$ gcc -o pasar-binario pasar-binario.c<br />
</source><br />
<br />
<br />
== Ejemplo de uso ==<br />
<br />
Dado un archivo de texto "datos.dat":<br />
<br />
<source><br />
3 0 1 2<br />
0.0 1.5 1.6 2.4<br />
0.5 0.5 0.6 1.3<br />
</source><br />
<br />
Podemos convertirlo a su forma binaria (y listo para usar con gnuplot):<br />
<source><br />
$ ./pasar-binario <datos.dat >datos.bin<br />
</source><br />
== Código fuente de pasar-binario.c ==<br />
<br />
<source lang=c><br />
//Hecho por FJ<br />
//Sea GPL<br />
#include <stdio.h><br />
<br />
int main()<br />
{<br />
float r;<br />
char *c;<br />
<br />
c = (char*) &r;<br />
<br />
while(scanf("%g", &r)==1)<br />
printf("%c%c%c%c", c[0], c[1], c[2], c[3]);<br />
<br />
return 0;<br />
}<br />
</source><br />
<br />
[[Category:Miniprogramas C/C++]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1674Programación2009-05-20T19:51:09Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
* comp.lang.fortran: http://groups.google.com/group/comp.lang.fortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1673Programación2009-05-20T05:12:05Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
* Excelente introducción a threads en python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1672Programación2009-05-20T00:30:28Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
<br />
== Make ==<br />
<br />
* Manual de GNUMake: http://www.gnu.org/software/make/manual/<br />
* Tutorial básico en castellano: http://arco.esi.uclm.es/~david.villa/doc/repo/make/make.html<br />
<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Programaci%C3%B3n&diff=1671Programación2009-05-20T00:25:08Z<p>FJRA: </p>
<hr />
<div>''Enlaces relacionados con Programación.'' <br />
<br />
== Real Programmers ==<br />
<br />
* Real Programmers Don't Use Pascal http://www.pbm.com/~lindahl/real.programmers.html<br />
* Real Programmers Don't Write Specs http://www.multicians.org/thvv/realprogs.html<br />
* Real Programmers Don't Use Pascal http://spike.scu.edu.au/~barry/RealProgrammers1.html<br />
* Best of Internet: Real Programmers do not use PASCAL... http://internet.ls-la.net/folklore/realprogrammers.html<br />
<br />
== FORTRAN ==<br />
<br />
* Object Oriented Fortran 90 Programming http://www.cs.rpi.edu/~szymansk/oof90.html<br />
* Mathtools.net Fortran-Utilities http://www.mathtools.net/Fortran/Utilities/<br />
* Notes on FORTRAN Programming http://www.ibiblio.org/pub/languages/fortran/unfp.html<br />
* Met Office: Fortran 90 Standards http://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html<br />
* SNG Homepage http://dust.ess.uci.edu/f/<br />
* Fortran Open Source:<br />
** G95: http://www.g95.org<br />
** GFortran: http://gfortran.org<br />
** Manual de GFortran: http://gcc.gnu.org/onlinedocs/gfortran<br />
<br />
== Python ==<br />
<br />
* Página oficial: http://www.python.org<br />
* [http://docs.python.org/ Documentación oficial y de librerías]<br />
* Inmersión en Python http://es.diveintopython.org/ (a free Python book for experienced programmers).<br />
* [http://pyspanishdoc.sourceforge.net/ Documentación de Pythom en castellano].<br />
* [http://es.tldp.org/Tutoriales/Python/Tutorial-Python/ Guía de aprendizaje de Pythom]<br />
* [http://pyspanishdoc.sourceforge.net/modindex.html Global Module Index] en castellano.<br />
* [http://www.djangoproject.com/ Python Web framework].<br />
* [http://www.retronet.com.ar/?q=node/148 Tutorial simple de wxPython]<br />
* http://mundogeek.net/tutorial-python/ (de la cual la que mejores tips tiene es: http://mundogeek.net/traducciones/python-idiomatico/ )<br />
* [http://python.computersci.org/ Python for Java programmers]<br />
* [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.4180 An introduction to Python for UNIX/C programmers]: ftp://ftp.enst.fr/pub/unix/lang/python/doc/nluug-paper.ps <br />
* Guías para programadores: http://wiki.python.org/moin/BeginnersGuide/Programmers<br />
* Buen wikilibro: http://en.wikibooks.org/wiki/Python_Programming<br />
* Sobre usarlo en CGI: http://www.python.org/doc/essays/ppt/sd99east/index.htm<br />
* Librería optparse (para leer la línea de comandos): http://docs.python.org/library/optparse.html<br />
<br />
== SDL ==<br />
<br />
* [http://softwarelibre.uca.es/wikijuegos/ Tutorial LibSDL]<br />
<br />
== PHP ==<br />
<br />
* [http://desarrolloweb.com/php/ Manual de PHP]<br />
<br />
== Bash ==<br />
<br />
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html<br />
* Excelente serie de tutoriales sobre BASH:<br />
** [http://www.linux-es.org/node/70 Bash (I) - Introducción y ficheros de configuración]<br />
** [http://www.linux-es.org/node/107 Bash (II) - Comandos, variables de entorno y combinaciones de teclas]<br />
** [http://www.linux-es.org/node/147 Bash (III) - Variables y funciones]<br />
** [http://www.linux-es.org/node/238 Bash (IV) - Estructuras de control y bucles]<br />
* Bash Hackers: http://bash-hackers.org/wiki/doku.php/start<br />
* Bash FAQ: http://wooledge.org:8000/BashFAQ de la wiki: http://mywiki.wooledge.org/<br />
<br />
== Fecha y hora ==<br />
<br />
* International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html<br />
* Date and Time Formats http://www.w3.org/TR/NOTE-datetime<br />
<br />
== Utilitarios ==<br />
<br />
* SLOCCount http://www.dwheeler.com/sloccount/ sirve para contar líneas de código.<br />
* [http://www.tufuncion.com/graficas-php Google Chart API], generando gráficas.<br />
<br />
== Hashing ==<br />
<br />
* http://burtleburtle.net/bob/hash/<br />
<br />
== RPM ==<br />
<br />
* Extraer RPM sin instalar: http://www.cyberciti.biz/tips/how-to-extract-an-rpm-package-without-installing-it.html<br />
<br />
== Puertos ==<br />
<br />
* http://www.chebucto.ns.ca/~rakerman/port-table.html<br />
<br />
== Vim ==<br />
<br />
* Excelente tutorial de cómo programar C en VIM: http://www.kernel-labs.org/?q=vicscope<br />
<br />
[[Category:Enlaces]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Reporte-correos-bloqueados&diff=1670Reporte-correos-bloqueados2009-05-13T21:38:21Z<p>FJRA: </p>
<hr />
<div>Este es un script para correr diariamente como tarea cron. Reporta los servidores bloqueados y los correos bloqueados que no se han recuperado.<br />
<br />
Como se puede ver, hace uso de [[extrae-servidores-bloqueados]].<br />
<br />
Código de reporte-correos-bloqueados<br />
<br />
<source lang="bash"><br />
#!/bin/bash<br />
<br />
# Script de reporte de correos bloqueados<br />
<br />
CORREO=root<br />
DIA=${1:-yesterday}<br />
FECHAFILTRAR=`LC_TIME=en date -d $DIA +"%b %_d"`<br />
<br />
LOG=/var/log/maillog<br />
<br />
# Comentarios segun corresponda<br />
LOGBACK=/var/log/maillog.1<br />
LOGCATBACK=cat<br />
#LOGBACK=/var/log/maillog.1.gz<br />
#LOGCATBACK=zcat<br />
<br />
$LOGCATBACK $LOGBACK | cat - $LOG \<br />
| egrep "^$FECHAFILTRAR" \<br />
| extrae-servidores-bloqueados \<br />
| sort -n -r \<br />
| sed -e "1 i Subject: Servidores/correos bloqueados - $FECHAFILTRAR" | sed -e "1 G" \<br />
| sendmail $CORREO<br />
<br />
</source><br />
<br />
[[Category:Bash Scripts]]<br />
[[Category:Postfix]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunning_Apache&diff=1669Tunning Apache2009-05-12T00:54:11Z<p>FJRA: </p>
<hr />
<div>Algunos enlaces útiles para "tunear" un Apache con PHP:<br />
<br />
* http://httpd.apache.org/docs/2.2/caching.html<br />
* http://www.phpvs.net/articles/blakes-centos-lamp-server-guide/php/#Install-PHP<br />
* http://modperlbook.org/html/Chapter-11-Tuning-Performance-by-Tweaking-Apache-s-Configur.html<br />
* http://stackoverflow.com/questions/697802/best-practices-for-optimizing-lamp-sites-for-speed/698226#698226<br />
* Evitar hotlink: http://www.cyberciti.biz/faq/apache-mod_rewrite-hot-linking-images-leeching-howto/<br />
<br />
[[Category:Enlaces]]<br />
[[Category:Apache]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunning_Apache&diff=1668Tunning Apache2009-05-11T21:58:40Z<p>FJRA: Página nueva: Algunos enlaces útiles para "tunear" un Apache con PHP: * http://httpd.apache.org/docs/2.2/caching.html * http://www.phpvs.net/articles/blakes-centos-lamp-server-guide/php/#Install-...</p>
<hr />
<div>Algunos enlaces útiles para "tunear" un Apache con PHP:<br />
<br />
* http://httpd.apache.org/docs/2.2/caching.html<br />
* http://www.phpvs.net/articles/blakes-centos-lamp-server-guide/php/#Install-PHP<br />
* http://modperlbook.org/html/Chapter-11-Tuning-Performance-by-Tweaking-Apache-s-Configur.html<br />
* http://stackoverflow.com/questions/697802/best-practices-for-optimizing-lamp-sites-for-speed/698226#698226<br />
<br />
[[Category:Enlaces]]<br />
[[Category:Apache]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1667Uso-apache-httpd2009-05-11T21:49:38Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos. Como segundo parámetro recibe un máximo de iteraciones, si no se usa se consideran ilimitadas (aporte de [[http://blog.pucp.edu.pe/ghiga Gustavo]]).<br />
<br />
La memoria la calcula sumando la memoria de cada bloque asignado, de esta forma los bloques compartidos entre los distintos procesos se sumarán sólo una vez. Así se saca un estimado bastante real de cuánta memoria está ocupando.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
maxiteraciones=${2:-0}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $(( n * intervalo / 3600 ))h $(( n * intervalo / 60 % 60 ))m $((n * intervalo % 60 ))s \($n intervalos de $intervalo"s"\) hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while [[ $maxiteraciones -eq 0 || $n -lt $maxiteraciones ]]; do<br />
mapakb=""<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $2}')<br />
[[ -n $lista ]] && mapakb=$(pmap -d -q $lista | egrep "^[0-9a-f]{8}" | sort | uniq | awk '{print $2}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $mapakb | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips.<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]<br />
[[Category:Apache]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1666Uso-apache-httpd2009-05-06T22:49:17Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos. Como segundo parámetro recibe un máximo de iteraciones, si no se usa se consideran ilimitadas (aporte de [[http://blog.pucp.edu.pe/ghiga Gustavo]]).<br />
<br />
La memoria la calcula sumando la memoria de cada bloque asignado, de esta forma los bloques compartidos entre los distintos procesos se sumarán sólo una vez. Así se saca un estimado bastante real de cuánta memoria está ocupando.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
maxiteraciones=${2:-0}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $(( n * intervalo / 3600 ))h $(( n * intervalo / 60 % 60 ))m $((n * intervalo % 60 ))s \($n intervalos de $intervalo"s"\) hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while [[ $maxiteraciones -eq 0 || $n -lt $maxiteraciones ]]; do<br />
mapakb=""<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $2}')<br />
[[ -n $lista ]] && mapakb=$(pmap -d -q $lista | egrep "^[0-9a-f]{8}" | sort | uniq | awk '{print $2}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $mapakb | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips.<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1665Uso-apache-httpd2009-05-06T22:47:19Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos. Como segundo parámetro recibe un máximo de iteraciones, si no se usa se consideran ilimitadas (aporte de [[http://blog.pucp.edu.pe/ghiga Gustavo]]).<br />
<br />
La memoria la calcula sumando la memoria de cada bloque asignado, de esta forma los bloques compartidos entre los distintos procesos se sumarán sólo una vez. Así se saca un estimado bastante real de cuánta memoria está ocupando.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
maxiteraciones=${2:-0}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $(( n * intervalo / 3600 ))h$(( n * intervalo / 60 % 60 ))m$((n * intervalo % 60 ))s \($n intervalos de $intervalo"s"\) hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while [[ $maxiteraciones -eq 0 || $n -lt $maxiteraciones ]]; do<br />
mapakb=""<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $2}')<br />
[[ -n $lista ]] && mapakb=$(pmap -d -q $lista | egrep "^[0-9a-f]{8}" | sort | uniq | awk '{print $2}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $mapakb | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips.<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1664Uso-apache-httpd2009-05-06T21:11:18Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos. Como segundo parámetro recibe un máximo de iteraciones, si no se usa se consideran ilimitadas (aporte de [[http://blog.pucp.edu.pe/ghiga Gustavo]]).<br />
<br />
La memoria la calcula sumando la memoria de cada bloque asignado, de esta forma los bloques compartidos entre los distintos procesos se sumarán sólo una vez. Así se saca un estimado bastante real de cuánta memoria está ocupando.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
maxiteraciones=${2:-0}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $n intervalos de $intervalo segundos hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while [[ $maxiteraciones -eq 0 || $n -lt $maxiteraciones ]]; do<br />
mapakb=""<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $2}')<br />
[[ -n $lista ]] && mapakb=$(pmap -d -q $lista | egrep "^[0-9a-f]{8}" | sort | uniq | awk '{print $2}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $mapakb | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips.<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1663Uso-apache-httpd2009-05-05T05:01:51Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos.<br />
<br />
La memoria la calcula sumando la memoria de cada bloque asignado, de esta forma los bloques compartidos entre los distintos procesos se sumarán sólo una vez. Así se saca un estimado bastante real de cuánta memoria está ocupando.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $n intervalos de $intervalo segundos hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while true; do<br />
mapakb=""<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $2}')<br />
[[ -n $lista ]] && mapakb=$(pmap -d -q $lista | egrep "^[0-9a-f]{8}" | sort | uniq | awk '{print $2}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $mapakb | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips.<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1662Uso-apache-httpd2009-05-05T03:33:10Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $n intervalos de $intervalo segundos hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while true; do<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $6}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " | grep ESTABLISHED | egrep "/$binario\s*$")<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $lista | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Categor%C3%ADa:Python&diff=1661Categoría:Python2009-05-03T19:39:57Z<p>FJRA: Página nueva: Category:Todas</p>
<hr />
<div>[[Category:Todas]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Genera-intervalos.py&diff=1660Genera-intervalos.py2009-05-03T19:38:56Z<p>FJRA: Página nueva: Este script en Python procesa una lista de números en entrada estándar y la pasa a "intervalos". Por ejemplo: <source> # genera-intervalos.py << EOF > 1 > 2 > 3 > 5 > 6 > 7 > 9 > 1...</p>
<hr />
<div>Este script en Python procesa una lista de números en entrada estándar y la pasa a "intervalos". Por ejemplo:<br />
<br />
<source><br />
# genera-intervalos.py << EOF<br />
> 1<br />
> 2<br />
> 3<br />
> 5<br />
> 6<br />
> 7<br />
> 9<br />
> 15<br />
> 18<br />
> 19<br />
> 20<br />
> EOF<br />
1-3<br />
5-7<br />
9<br />
15<br />
18-20<br />
</source><br />
<br />
<br />
== Código de genera-intervalo.py ==<br />
<br />
<source lang=python><br />
#!/usr/bin/python<br />
#Hecho por FJ<br />
<br />
import sys<br />
<br />
if __name__ == '__main__':<br />
lineas = sys.stdin.readlines()<br />
i = 0<br />
intervaloini = 0<br />
intervalofin = 0<br />
for linea in lineas:<br />
linea = linea.strip()<br />
if not linea.isdigit():<br />
continue<br />
numero=int(linea)<br />
i += 1<br />
if i == 1:<br />
anterior = numero<br />
intervaloini = numero<br />
intervalofin = numero<br />
continue<br />
if anterior+1 == numero:<br />
intervalofin = numero<br />
else:<br />
if intervaloini == intervalofin:<br />
print intervaloini<br />
else:<br />
print "%d-%d" % (intervaloini, intervalofin)<br />
intervaloini = numero<br />
intervalofin = numero<br />
anterior = numero<br />
if i > 0:<br />
if intervaloini == intervalofin:<br />
print intervaloini<br />
else:<br />
print "%d-%d" % (intervaloini, intervalofin)<br />
<br />
#fin<br />
</source><br />
<br />
[[Category:Python]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1659Uso-apache-httpd2009-05-02T07:35:12Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Para cambiar el puerto usado puede usarse la variable PUERTOAPACHE. Al cancelar con Ctrl-C muestra un resumen.<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#Creado por FJ<br />
#Sea licencia GPL<br />
<br />
intervalo=${1:-60}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
conexioness=0<br />
conexionesp=0<br />
conexionesm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
puerto=${PUERTOAPACHE:-80}<br />
<br />
trap 'echo -e En $n intervalos de $intervalo segundos hubo $p procesos en promedio \($memp"M"\), con un pico de $m \($memm"M"\). "\n"Conexiones promedio: $conexionesp, con un pico de $conexionesm' 0<br />
<br />
echo -e "Seq\tFecha Hora\tMem\tProc\tMedia\tConex.\tClientes"<br />
while true; do<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $6}')<br />
conexiones=$(netstat -pnat | grep ":$puerto " |grep ESTABLISHED)<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $lista | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 /p' | dc)<br />
conexionesc=$(echo "$conexiones" | wc -l)<br />
ips=$(( $(echo "$conexiones" | egrep -o "([0-9]+\.){3}[0-9]+" | sort | uniq | wc -l) - 1 ))<br />
[[ "ips" -eq "-1" ]] && ips=0<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
conexioness=$((conexioness + conexionesc))<br />
conexionesp=$((conexioness / n))<br />
[[ $c -gt $m ]] && m=$c<br />
[[ $mem -gt $memm ]] && memm=$mem<br />
[[ $conexionesc -gt $conexionesm ]] && conexionesm=$conexionesc<br />
echo -e $n"\t"`date +"%Y%m%d %H%M%S"`"\t"$mem"M\t"$c"\t"$p"\t"$conexionesc"\t"$ips<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1658Uso-apache-httpd2009-04-29T16:00:27Z<p>FJRA: </p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Al cancelar con Ctrl-C muestra un "resumen".<br />
<br />
Recibe como primer parámetro el intervalo en número de segundos entre cada línea de output. Si no se especifica asume 60 segundos.<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
<br />
<br />
intervalo=${1:-60}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
<br />
trap 'echo En $n intervalos de $intervalo segundos hubo $p procesos en promedio\($memp"k"\), con un pico de $m \($memm"k"\).' 0<br />
<br />
while [[ 1 ]]; do<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $5}')<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $lista | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 / p' | dc)<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
if [[ $c -gt $m ]]; then m=$c; fi<br />
if [[ $mem -gt $memm ]]; then memm=$mem; fi<br />
echo $n: `date +"%Y%m%d %H%M%S"` "-->" Mem usada: $mem"k;" Procesos: $c";" Promedio: $p<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Uso-apache-httpd&diff=1657Uso-apache-httpd2009-04-29T14:51:47Z<p>FJRA: Página nueva: Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIO...</p>
<hr />
<div>Script para sacar periódicamente la cantidad de procesos apache que están corriendo. Si se usa un usuario apache distinto a "apache" puede modificarse la variable de entorno USUARIOAPACHE, así como modificar la variable BINARIOHTTPD si es que el binario no es "httpd". Al cancelar con Ctrl-C muestra un "resumen".<br />
<br />
== Código de uso-apache-httpd ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
<br />
<br />
intervalo=${1:-60}<br />
n=0<br />
s=0<br />
p=0<br />
m=0<br />
mems=0<br />
memp=0<br />
memm=0<br />
usuario=${USUARIOAPACHE:-apache}<br />
binario=${BINARIOHTTPD:-httpd}<br />
<br />
trap 'echo En $n intervalos de $intervalo segundos hubo $p procesos en promedio\($memp"k"\), con un pico de $m \($memm"k"\).' 0<br />
<br />
while [[ 1 ]]; do<br />
lista=$(ps u -u $usuario | grep $binario | awk '{print $5}')<br />
c=$(echo $lista | wc -w)<br />
mem=$(echo $lista | sed -e 's/[0-9]\+/& +/g' -e '1 i 0 ' -e '$ a 1024 / p' | dc)<br />
n=$((n + 1))<br />
mems=$((mems + mem))<br />
memp=$((mems / n))<br />
s=$((s + c))<br />
p=$((s / n))<br />
if [[ $c -gt $m ]]; then m=$c; fi<br />
if [[ $mem -gt $memm ]]; then memm=$mem; fi<br />
echo $n: `date +"%Y%m%d %H%M%S"` "-->" Mem usada: $mem"k;" Procesos: $c";" Promedio: $p<br />
sleep $intervalo<br />
done<br />
</source><br />
<br />
[[Category:Bash Scripts]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Tunneling_V%C3%ADa_SSH&diff=1656Tunneling Vía SSH2009-04-28T17:13:08Z<p>FJRA: </p>
<hr />
<div>== Motivación ==<br />
<br />
¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con [http://es.wikipedia.org/wiki/Secure_Shell SSH], que usando la implementación de [http://www.openssh.com/ OpenSSH] permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver [[Proxy Vía SSH]].<br />
<br />
== Sintáxis ==<br />
<br />
La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 ssh(1)]):<br />
<br />
# ssh [-p port] [-f]<br />
[-L [bind_address:]port:host:hostport]<br />
[-R [bind_address:]port:host:hostport]<br />
[user@]hostname [command]<br />
<br />
La opción <tt>-p</tt> nos permite especificar un puerto de conexión de ssh distinto al estándar.<br />
<br />
La opción <tt>-f</tt> manda el comando ssh después de pedirte el password a background.<br />
<br />
La opción <tt>-L</tt> nos permite crear un puente entre el puerto local <tt>port</tt> (siempre visto desde el cliente) hacia <tt>host:hostport</tt> abierto en el servidor ssh.<br />
<br />
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.<br />
<br />
Si la conexión sólo se va a usar como túnel, puede especificarse algún comando de bajos recurso repetitivo para mantener la conexión activa, por ejemplo <tt>ping -i 60 localhost >/dev/null</tt>, ó <tt>"while test 1; do sleep 10; done"</tt>. Además se puede combinar con la opción <tt>-f</tt>. Si se utiliza con <tt>-f</tt> se debe luego usar <tt>kill</tt> para terminar con la conexión.<br />
<br />
== Ejemplos ==<br />
<br />
=== Caso 1: Permitir entrada externa a una máquina en una red privada ===<br />
<br />
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos copiar archivos y entrar desde una máquina externa "C". Se necesita tener acceso a C.<br />
<br />
<source><br />
+-+ +-+<br />
|A| ---> Proxy <--> internet <--> |C|<br />
+-+ +-+<br />
</source><br />
<br />
En "A" podría ejecutarse el siguiente comando (si el acceso es vía el puerto 22, si no fuera así usar la opción <tt>-p #puerto-para-llegar-a-C</tt>):<br />
<br />
<source><br />
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C <br />
</source><br />
<br />
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:<br />
<source><br />
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino<br />
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1<br />
</source><br />
<br />
Ahí lo que se hizo fue crear un túnel entre el puerto 8022 en C hacia el 22 en A.<br />
<br />
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.<br />
<br />
[[Category:Tips]]</div>FJRAhttps://wiki.fjra.es/wiki/index.php?title=Test-disco&diff=1655Test-disco2009-04-28T16:58:35Z<p>FJRA: </p>
<hr />
<div>Script simple para hacer un test de lectura y escritura secuencial. Falta mejorar el tiempo "mejor" estimado.<br />
<br />
Uso:<br />
<br />
# test-disco /directorio<br />
<br />
Donde <tt>/directorio</tt> es el directorio donde se harán las pruebas. De esa forma se está probando la partición donde está el directorio. Si no se especifica, usa <tt>/tmp</tt>.<br />
<br />
== Código fuente ==<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
# Test de performance de disco.<br />
# Primer parametro debe ser la ruta al archivo temporal de testing<br />
<br />
ruta=${1:-/tmp}<br />
<br />
archivo=$ruta/testfile.$$<br />
<br />
[[ -f $archivo ]] && echo El archivo $archivo ya existe, usar otro nombre. Saliendo && exit 1<br />
<br />
touch $archivo<br />
<br />
trap 'rm -rf "$archivo"' 0<br />
<br />
# test para cada tamano... hacemos una tabla de los valroers a usar<br />
<br />
# 1M 10M 100M 1G 2G<br />
tamanos=(2000 20000 200000 2000000 4000000)<br />
realtimemax[2000]=.1s<br />
realtimemax[20000]=1s<br />
realtimemax[200000]=2s<br />
realtimemax[2000000]=25s<br />
realtimemax[4000000]=1m<br />
realtimemax2[2000]=.1s<br />
realtimemax2[20000]=1s<br />
realtimemax2[200000]=2s<br />
realtimemax2[2000000]=25s<br />
realtimemax2[4000000]=1m<br />
<br />
echo "Iniciando test"<br />
for t in ${tamanos[@]}; do<br />
echo<br />
echo<br />
echo Test de escritura de $((t/2000)) megas, el real time deberia ser menor a ${realtimemax[t]}<br />
(time dd if=/dev/zero of="$archivo" count=$t bs=512 >&2)2>&1<br />
echo<br />
echo Test de lectura de $((t/2000)) megas, el real time deberia ser menor a ${realtimemax2[t]}<br />
(time dd if="$archivo" of=/dev/null count=$t bs=512 >&2)2>&1<br />
done<br />
<br />
#Fin.<br />
</source><br />
Código mejorado gracias al aporte de [http://blog.pucp.edu.pe/ghiga Gustavo].<br />
<br />
<br />
[[Category:Bash Scripts]]</div>FJRA