Copiar directorios y archivos por el terminal Linux remotamente con SCP

Comando en la cónsola (terminal) que sirve para copiar/transferir archivos/directorios desde/hacía un host remoto.

La estructura general sería la siguiente:

scp [opciones] [Archivo(s) origen] [carpeta destino]

donde

[opciones] puede ser:
-r para copiar los directorios y subdirectorios de una carpeta.
-h para mostrar la ayuda.
-c Cifrado.
-P Puerto
entre varios otros que se puede ver en la ayuda del programa.

[Archivo(s) origen]

usuario@host-origen:archivo archivo2 otroarchivo archivito

[carpeta destino]

usuario@host-destino:directorio

Ejemplo:

scp -r UnDirectorioLocal user@192.168.0.40:directorioRemoto

scp

 

Aumentar tamaño máximo de archivo para subir en PHP

tuxterminal_iconUsualmente plataformas como Moodle, Joomla o Drupal trabajan con una tamaño de subida máximo que es fijado por el servidor en el que están instalados.

Si tenemos acceso al servidor y queremos aumentar el tamaño máximo permitido para la subida de archivos se debe ubicar el archivo /etc/php5/php.ini (por lo menos en Debian/Ubuntu) y ajustar las variables:

upload_max_filesize y php_value post_max_size por valores acordes a tus necesidades.

Reiniciar Apache

Y listo =)

¿Qué te pasó Ubuntu? #Reflexión

robot-ubuntuNota previa: Las palabras marcadas con un asterisco (*), están en un mini glosario de términos al final del artículo.

Siempre que se habla de Software Libre uno tiene dos opciones, o documentarte muy bien de lo que vas a hablar (como favor a la humanidad siempre que intentes hablar de algo deberías saber muy bien de lo que estás hablando) o bien advertir del carácter subjetivo de lo que vas a hablar, así poder expresar opiniones, pensamientos o sentimientos acerca de ese algo.

La comunidad de software libre tiende a ser muy crítica al momento de leer artículos y comentarios, ya que, detrás de lo meramente tecnológico existen dimensiones ideológicas y filosóficas, por eso, lo que diré a continuación se trata de una opinión de un “usuario no-avanzado” y muy personal de la distribución* Ubuntu.

He sido usuario Ubuntu por muchos años por su rendimiento, facilidad de uso y su compatibilidad con el Hardware, cuando comencé con esta distro* esos aspectos eran insuperables por ningún sistema de aquel momento (hace 10 años aproximadamente). Recuerdo especialmente los efectos que se lograban con algo llamado Compiz Fusion*, algo nunca visto hasta el momento, también los inmensos niveles de personalización que se podían lograr, pero cuando llegó Unity* la fatalidad para mi fue máxima, me pareció pesado, poco amigable y poco configurable, así que me pasé a Ubuntu Netbook Remix con LXDE, que mantenía la eficiencia que me gustaba, pero al final me cansé un poco tanto de XFCE* como de LXDE*, livianos si, pero sin ningún sabor como lo tenía el antiguo Gnome*, además nunca fui amigo de KDE*.

Recuerdo que era muy emocionante esperar la nueva versión de Ubuntu, ya que, de una versión a otra las mejoras eran notables y sorprendentes, pero desde la llegada de Unity por defecto en 2011, unido con la muerte de Gnome versión 2, hasta la última versión de 2014, a mi personalmente me ha parecido poca la mejora en la experiencia de usuario que ha tenido Ubuntu, mientras que la experiencia en máquinas de gama baja es cada vez peor. Por eso, desde aquellos años mozos hasta hoy sólo he usado Ubuntu con propósitos de desarrollo de software.

Desde hace mucho tiempo el objetivo principal de Ubuntu es la convergencia, es decir, el uso del mismo sistema operativo independientemente del dispositivo o tamaño de pantalla,  la introducción de Unity es un factor fundamental para lograr ese objetivo. Sin embargo esta podría ser una apuesta arriesgada. Dicen por allí que, el que mucho abarca poco aprieta, como muestra tenemos Windows 8, un sistema que son los pininos del mismo propósito en la gente de Microsoft: La convergencia. Pero resulta que para los usuarios de computadoras personales (de escritorio o laptops conencionales), Windows 8 no es un sistema amigable, de hecho, no conozco a nadie que prefiera Windows 8 a Windows 7 y es precisamente porque los factores de una buena usabilidad en tablets y smartphones son muy distintos a los de computadoras de escritorio y portátiles e incluso a las netbooks*.

Considero que la convergencia siempre implica un sacrificio. Para desarrollar para todos debes tienes dos opciones:

  • Hacer tu sistema igual para todos los dispositivos y decidir para cual dispositivo eres óptimo. Caso particular que Win8 sea un fastidio en computadoras personales, dado que los gestos* usados en dispositivos táctiles no siempre pueden ser imitados o no son “cómodos” usando un mouse (como arrastrar desde la derecha de la pantalla para que aparezca un menú). En este particular tengo una anécdota: un día instalé un juego en el que decía: “Toca la pantalla para continuar”. ¿Se entiende el chiste? 😀 La pantalla de una PC no es táctil  😀 Incluso haciendo clic o tocando alguna tecla no funcionaba, así que nunca pude jugar, sencillamente el juego era completamente incompatible. Al menos en otros sistemas las apps* que no son compatibles simplemente no se pueden instalar (recordar que muchas representan un gasto de dinero).
  • La otra opción es que el sistema se adapte al dispositivo y su modo de uso, pero la desventaja es que el sistema será más pesado y probablemente 50% del código nos será completamente inútil. En ese caso sería apropiado generar versiones para cada tipo de dispositivo (cero convergencia).

>#FLISoLve CCS 2010: FLISoL en FotosPersonalmente como usuario de escritorio y de computadoras de bajo rendimiento, cada día Ubuntu se me hace una opción menos viable, para mi es lamentable por la cantidad de años de uso y por el cariño que le tengo a la comunidad y al propio sistema, pero lamentablemente ya no soy parte del público objetivo de Ubuntu. Tocará buscar, e instalar algún otro sistema que sea funcional y muy fácil de usar (lo que más me gustaba de Ubuntu porque soy muy “usuario final”).

Mini-glosario de términos

Distribución / Distro: Adaptaciones del sistema operativo GNU/Linux para crear nuevos sistemas operativos.

Gnome, KDE, XFCE, LXDE, Unity: Son sistemas que permiten cambiar completamente la apariencia de una distribución GNU/Linux. Les llaman “Entornos de Escritorio”. Algunos programas están optimizados para trabajar en alguno(s) de esos entornos.

Compiz Fusion: Era (no se si aun existe) un sistema administrador de efectos gráficos, desde los más rimbombantes y divertidos, hasta los más sutiles.

Netbook: Laptops muy pequeñas, también llamadas minilaptops.

Gestos: Es el modo que interactuas con una pantalla táctil, ejemplo: arrastrar, pellizcar, girar la pantalla, sacudir el dispositivo, tocar con uno o más dedos, etc.

Apps: Aplicaciones que puedes descargar y usar en tu sistema operativo.

Como encontrar un comando en el historial Linux

tuxterminal_iconPara encontrar un comando que hemos utilizado previamente sin tener que usar la flecha hacia arriba:

history | grep PALABRA

Donde PALABRA es alguna expresión contenida en el comando.

Guia Definitiva no-ip client

En la presente guía se muestra los comandos necesarios para configurar el cliente no-ip para GNU/Linux y que pueda arrancar al inicio.

mkdir $HOME/noip
cd $HOME/noip
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1
sudo apt-get install build-essential
sudo make
sudo make install

Advertencia… Es posible que al hacer make o make install, el sistema arroje que faltan otras cosas por instalar, lee bien los mensajes de error para instalar lo que el sistema te pida.

# Correr el cliente
sudo /usr/local/bin/noip2

Ahora vamos a crear el script siguiente archivo

sudo nano /etc/init.d/noip

El contenido del archivo es el siquiente

#! /bin/sh
# /etc/init.d/noip

### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO

# Carry out specific functions when asked to by the system
case “$1” in
start)
echo “Starting noip”
# run application you want to start
/usr/local/bin/noip2
;;
stop)
echo “Stopping noip”
# kill application you want to stop
killall noip2
;;
*)
echo “Usage: /etc/init.d/noip {start|stop}”
exit 1
;;
esac
exit 0

Algunos comandos extra:

# Establecer permisos
sudo chmod 755 /etc/init.d/noip

# Arrancar el cliente
sudo /etc/init.d/noip start

# Detener el cliente
sudo /etc/init.d/noip stop

# Registrar el script para el arranque.
sudo update-rc.d noip defaults

# Eliminarlo
sudo update-rc.d -f noip remove

Fuente:
http://www.stuffaboutcode.com/2012/06/raspberry-pi-access-from-internet-using.html
http://www.stuffaboutcode.com/2012/06/raspberry-pi-run-program-at-start-up.html

Apuntar una web a una dirección ip específica

Suponiendo que somos dueños de algún dominio, digamos laut.com.ve… Además imaginemos que tenemos un servidor de pruebas y un servidor distinto para el ambiente de producción.

Supongamos además que en la máquina donde estamos desarrollando queremos que al yo colocar en un navegador o hacer un SSH a la dirección laut.com.ve mi máquina de desarrollo apunte al servidor de prueba y no al servidor de producción.

Para hacer esto se coloca en el archivo /etc/hosts en Linux o C:\Windows\System32\Drivers\etc\hosts en Windows la correspondencia deseada. Por ejemplo

# Para que apunte a la máquina local:
127.0.0.1    laut.com.ve

# Para que apunte a una IP específica:
92.3.54.65    laut.com.ve

 

Configurar dominios en Apache2

Supongamos que tenemos registrado el dominio guzman6001.com.ve y laut.com.ve y queremos tener en nuestro servidor ambas páginas (en carpetas diferentes evidentemente), además que nuestro servidor al recibir la petición sepa exactamente que página debe mostrar. Así, por ejemplo, queremos que:

guzman6001.com.ve apunte a la carpeta dentro del servidor: /home/usuario/sitios/guzman6001
laut.com.ve apunte a la carpeta dentro del servidor: /home/usuario/sitios/laut

NOTA: Para esto es muy importante que nuestro servidor DNS esté apuntando ambas direcciones al servidor. En algunas de las fuentes se indica como hacerlo con un servidor propio como bind, también es factible hacerlo con un servicio en la red como CDMON.

Para configurar Apache vamos a la carpeta /etc/apache2/sites-enabled
abrimos el archivo 000-default y lo guardamos con un nombre que nos sea más útil para saber su contenido, yo recomiendo guardarlo con el nombre del dominio que vamos a configurar por ejemplo guzman6001-domain y hacemos los siguientes cambios:

<VirtualHost guzman6001.com.ve:80>
ServerAdmin webmaster@localhost
ServerAlias guzman6001.com.ve
DocumentRoot /home/usuario/sitios/guzman6001

El resto del archivo lo puedes dejar igual o configurarlo a tu gusto

Puedes configurar tantos subdominios como quieras duplicando el bloque VirtualHost y haciendo las mismas modificaciones.

<VirtualHost mail.guzman6001.com.ve:80>
ServerAdmin webmaster@localhost
ServerAlias mail.guzman6001.com.ve
DocumentRoot /home/usuario/sitios/guzman6001mail

Aunque puedes crear tantas direcciones de dominios y subdominios como quieras, siguiendo el mismo formato, es recomendable hacerlo en archivos distintos para mantener un orden, hay ocasiones en que se debe regresar a estos archivos para realizar algún cambio.

Reiniciar apache y listo.

Fuente: http://guzman6001.blogspot.com/2010/02/crear-subdominios-en-apache2.html

Ejecutar un echo como root

El presente comando sirve para ejecutar algo que de manera predeterminada no acepta “sudo” por ejemplo, un “echo”. En particular, el ejemplo a continuación, agrega ‘un texto’ al final del archivo ‘un-archivo’.

sudo sh -c "echo 'un texto' >> /ruta/a/un-archivo"

Comando para reemplazar un texto en un grupo de archivos en Linux

Aparte

Supongamos que en el contenido de un grupo de archivos vamos a modificar una expresión por otra, para ello se utiliza el siguiente comando:

find . -name '*' | xargs perl -pi -e 's/ESTA ES LA EXPRESION QUE DESEO MODIFICAR/ESTA ES LA EXPRESION NUEVA/g'

Si la expresión usa un símbolo / se debe anteponer una barra invertida \