Optimizar el arranque de Windows 10

Si tu Windows 10 tarda en arrancar es muy posible que sea porque tiene demasiadas aplicaciones que se lanzan durante el inicio. Puede haber otras causas, sí, pero lo más habitual es que haya demasiados programas ejecutándose durante el arranque y también es muy posible que no necesitamos que todos ellos lo hagan en ese momento.

Aunque existen herramientas para optimizar esto realmente no necesitamos ninguna: el sistema operativo ya la trae de serie. Basta con abrir el administrador de tareas (podemos hacerlo de forma directa pulsando Ctrl+Shift+Esc o pulsando el mítico Ctrl+Alt+Supr y seleccionando el administrador en la lista de opciones).

Una vez abierto pulsamos la pestaña Inicio y allí podremos ver qué programas se ejecutan durante la carga:

Realmente puedes deshabilitar todo lo que hay ahí ya que ninguno de esos programas afectaría de forma crítica al sistema, aunque es posible que quieras tener alguno de ellos (por ejemplo, yo tengo el Outlook configurado para que se abra en el inicio porque suele olvidárseme y el el trabajo lo necesito habitualmente). Cuando hayas quitado lo que no quieras en esa sección el equipo debería tardar algo menos en iniciar.

Exportar la configuración de las VPN de Windows a otros equipos

El otro día me cambiaron el equipo en el curro y me puse a pensar “Ahora a configurar el montón de conexiones VPN de los clientes ¿hay una forma más rápida?” Pues claro que la hay: puedes exportarla de un equipo a otro simplemente copiando el fichero rasphone.pbk ¿Cómo lo hago? Simplemente buscándolo, copiando y pegando, nada más. Te lo puedes llevar en un pendrive o guardártelo en una ubicación en la nube para descargalo de cualquier otro equipo.

¿Cuál es la ruta?

En Windows XP (si todavía lo usas): C:\Documents and Settings\All Users\Datos de programa\Microsoft\Network\Connections\Pbk\rasphone.pbk

En los Windows posteriores (Vista, 7, 8, 10) tienes dos rutas:

Redes creadas para todos los usuarios: C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk

Redes creadas para un usuario en particular: %userprofile%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk

Cuando lo copias en otro equipo Windows basta con ejecutarlo, un simple doble click, y ya realizará la conexión a la VPN.

Encontrar y matar procesos zombie en Linux

No sólo hay zombies en la ficción, también pululan por tu sistema Linux. Tranquilo, la pantalla de tu portátil no se cerrará de golpe mordiéndote la mano y convirtiéndote en un extra de peli de Romero, se trata de un estado en el que pueden entrar algunos procesos secundarios, que aunque terminan se mantienen en la tabla de procesos hasta que termina el principal, ocupando algo de memoria. No son especialmente problemáticos ni consumen mucho, aunque si un programa deja varios procesos hijo por ahí sueltos puede ser un problema para la RAM.

¿Cómo puedo listar los procesos en estado zombie en mi equipo?

Es sencillo. Usando el comando ps podemos listar todos los procesos presentes en la tabla de procesos. Uno de los valores que tendremos en la salida de ps es el estado del proceso, que será Z para los procesos zombie. Por lo tanto, el siguiente comando listará todos los procesos zombie:

ps aux | grep 'Z'

¿Cómo eliminamos un proceso zombie?

En si no podemos matar un proceso zombie con el comando kill porque ya está muerto, la única opción sería hacerlo a través del proceso padre. Para eso necesitamos saber el pid del padre, por lo que haremos la búsqueda de procesos zombie de está forma:

ps ef | grep 'Z'

La tercera columna de la respuesta tendrá el id del proceso padre de nuestro proceso zombie. Para forzar la eliminación de estos procesos hijo zombificados usamos el siguiente comando:

kill -s SIGCHLD pid_del_proceso_padre

Cinco extensiones para GNOME muy útiles

Una de las cosas que han hecho que GNOME sea uno de los entornos de escritorio más populares para Linux es la posibilidad de instalar extensiones que nos permiten ampliar sus funcionalidades. Desde aquí os voy a recomendar 5:

Clipboard Manager: Una aplicación de gestión de portapapeles avanzada que te permitirá tener disponible varios elementos copiados o cortados a la vez para luego gestionarlos, similar al app GPaste.

Dash To Dock: Si eres un nostálgico de Unity o has migrado a Linux desde un equipo de Apple puedes usar esta extensión que agrega un dock a tu escritorio en el que podrás anclar las aplicaciones que más uses.

Easy Screencast: Una extensión que te permite grabar lo que pasa en tu escritorio de forma sencilla e intuitiva. Esto puedes hacerlo con un programa externo también, pero la ventaja de esta extensión es que es muy ligera.

Pomodoro Timer: Te permitirá organizar tu tiempo programando una serie de periodos de tiempo de actividad y de descanso en tu trabajo, de forma que puedas estar centrado al 100% en tu tarea sin preocuparte de mirar en el reloj cuánto tiempo llevas en ello.

Refresh WiFi Connections: Realmente solo es útil para usuarios con portátil que cambien bastante de ubicación, si ese es tu caso puede que te interese esta extensión que refresca las conexiones inalámbricas a tu alcance para que se conecte de forma automática, sin tener que hacerlo manualmente.

Nginx en Debian: los comandos más básicos

Vamos a darle un ojo a los comandos más básicos del servidor Nginx para sistemas operativos Debian:

Arrancar Nginx:

Para iniciar Nginx puede ser uno de estos dos comandos, dependiendo de si el gestor de servicios es systemd o sysvinit:

$ sudo systemctl start nginx #systemd
$ sudo service nginx start   #sysvinit

Reiniciar Nginx:

En caso de que necesites reiniciar Nginx sería alguno de estos dos

$ sudo systemctl restart nginx #systemd
$ sudo service nginx restart   #sysvinit

Parar Nginx:

Para detener Nginx:

$ sudo systemctl stop nginx #systemd
$ sudo service nginx stop   #sysvinit

Habilitar arranque en el inicio:

Si queremos que Nginx arranque automáticamente al iniciar el sistema operativo entonces hay que utilizar este:

$ sudo systemctl enable nginx #systemd
$ sudo service nginx enable   #sysvinit

Comprobar la configuración:

Si has hecho cambios en la configuración de Nginx este comando te dirá si la configuración es correcta:

$ sudo nginx -t

Reiniciar una descargar desde el punto en que se cortó con cURL en Linux

Si ya vimos como descargar uno y también varios ficheros en Linux mediante cURL vamos con otra funcionalidad interesante ¿cómo hacemos para reiniciar una descarga que se ha interrumpido?

Basta con invocar el comando para descargar pero añadiendo “-C – ” (es decir, -C, un espacio, un guión y otro espacio, sin las comillas).

Entonces, si así es como comenzamos una descarga:

curl -O http://dominio.com/fichero.tar.gz

Así sería cómo la reiniciaríamos desde el punto en que se cortó:

curl -C - -O http://dominio.com/fichero.tar.gz

Usar cURL en Linux para bajar varios ficheros con un mismo comando.

Si hace unos meses veíamos cómo nos podemos servir de cURL en Linux para descargar un fichero desde una URL hoy vamos a expandir un poco esta entrada: ¿podemos descargar varios ficheros a la vez con el mismo comando? Pues sí.

La sintaxis es muy simple. Recordemos primero ¿Cómo descargamos un fichero con cURL?

curl -O http://dominio.com/fichero.tar.gz

Recordado esto ¿cómo descargamos varios? Pues muy simple, añadimos más url precedidas del parámetro -O tal que así:

curl -O http://dominio.com/fichero.tar.gz -O http://dominio.com/ficheroB.tar.gz -O http://dominio.com/ficheroC.tar.gz

Conocer tu ip externa desde línea de comandos en Linux con wget

Hace tiempo habíamos visto por aquí cómo conocer nuestra IP externa desde línea de comandos en Linux con cURL. Pero hay más métodos. Veamos hoy cómo hacerlo con wget, de nuevo recurriendo a la web ifconfig.me para ello (como en ejemplo de cURL):

wget -qO - ifconfig.me/ip

El API de ifconfig.me además nos permite conocer otras cosas como nuestro user agent, el puerto por el que conectamos, el idioma predefinido con el que navegamos… en la página principal podéis ver, debajo de vuestros datos, todos los comandos disponibles.

Solucionando el error 809 en Windows al intentar conectar una VPN con L2TP/IPSec.

Hoy configuraba en el trabajo un compañero una conexión VPN a través del firewall de un cliente nuevo y se encontraba siempre con el mismo código de error: el 809.

En principio todos los datos parecían correctos y en mi equipo (Xubuntu) y el de otro compañero (Mac) funcionaba, así que parecía que era algo relativo a la configuración de Windows. Tras un rato de búsqueda por Google me encontré con lo siguiente: Windows por defecto no puede establecer conexiones seguras con servidores que estén ubicados tras un dispositivo que haga NAT.

Entonces ¿cómo solucionamos esto?. Pues siguiendo estos pasos para cambiar esta configuración en el registro:

  • Abrimos el editor de registro regedit
  • Buscamos la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
  • Añadimos un nuevo valor de DWORD de 32 bits que se llame AssumeUDPEncapsulationContextOnSendRule
  • Buscamos también la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy
  • Si no existe la clave IPsecThroughNAT la creamos y le ponemos como valor 2, en caso de que exista modificamos su valor a 2.
  • Reiniciamos el equipo.

El valor 2 en estas claves implica que Windows permitirá realizar asociaciones de seguridad tanto si el cliente como el servidor se encuentran tras un dispositivo que haga NAT.

Cinco consejos a la hora de hacer scripts de Bash en Linux.

Llevamos unos días donde he hablado mucho de PowerShell y parece que nos estemos olvidando un poco del mundo Linuxero, así que hoy vamos a ver una serie de consejillos para hacer scripts con Bash en nuestro sistema Linux de forma más efectiva:

Usa comillas dobles a la hora de referenciar variables:

Trabajar con cadenas de texto con espacios puede ser problemático. A la hora de referenciar una variable para usar su valor es recomendable hacerlo poniéndola entre comillas dobles: evitará que la cadena se corte por el uso de espacios en blanco y también mejorará el rendimiento, evitando hacer rastreos de comodines innecesariamente. Si ejecutas este script lo verás:

empresas="Tecnológicas Camarasa SL"
echo "Sin comillas:"
echo
for nombre in $empresas; do
        echo "$nombre"
done
echo
echo "Con comillas:"
echo
for nombre in "$empresas"; do
        echo "$nombre"
done
exit 0

Si lo ejecutas verás como en el primer caso va a imprimir tres nombres, pues se confundirá con los espacios, mientras que en el ejemplo con comillas lo sacará en una sola línea respentado los espacios.

Forzar la salida del script en caso de error:

A veces un script puede seguir ejecutándose aunque un comando falle, y eso puede derivar en problemas más adelante. Con la siguiente línea podemos forzar la salida del script en caso de que un comando no funcione:

set -o errexit 

Forzar la salida del script en caso de usar una variable no declarada:

Como en el caso anterior, esto puede derivar en errores más graves más adelante, así que es recomendable que el script se detenga si se usa una variable que está sin declarar:

set -o nounset

Declara las constantes como readonly:

Las constantes en esencia son un variable con un valor estático. A la hora de declarar una constante en nuestro script, tanto por seguridad como por rendimiento, lo mejor es hacerlo con el atributo readonly, puesto que no va a vaciarse ni sobrescribirse el valor.

readonly fichero_host="/etc/hosts"
readonly pi=3.14159265359

Usa la sintaxis $(comando) en lugar del antiguo `comando` :

Si queremos asignar la salida de un comando a una variable antiguamente lo haríamos invocando al comando entre dos acentos. Hoy por hoy la sintaxis sería utilizando el comando entre paréntesis precedido por el carácter $, tal que así:

#Sintaxis antigua
usuario=`echo “$UID”`
#Sintaxis modernizada recomendada
usuario=$(echo “$UID”)