Publicacion de problemas informaticos y su resolución en mi vida diaria -trabajo y casa- para mi documentación personal y para quien le sirva. Temas corrientes aqui son: Linux, macOS, Deployement, bash, configuraciones, DHCP, optimización, Samba, Programas, DOSBOX, Comandos de consola, Scripts, Virtualización, DNS,
martes, 31 de enero de 2017
Trabajar con el Disco duro en Unix
Bueno, para mi personalmente el tiempo del ahorro de recursos ya ha pasado. Mi primera computadora fue un 8088 con menos de un Mhz de Taktung mientras que las actuales tienen varios Procesadores con más de 3 GHz. Los servidores siempre estaban mejorcitos. Los programas tambien han mejorado su rendimiento, no todos crecen nada mas. Pero bueno, eso es al final cuestion de gustos y harina de otro costal.
Ver las Particiones de manera bastante explicativa:
df -h
hacer imagenes de disco
dd if=/dev/disco of=/home/desktop/tu_imagen.img --> puede ser que necesitas sudo!
este articulo me gusto:
https://wiki.archlinux.de/title/Image-Erstellung_mit_dd
domingo, 8 de enero de 2017
Controlando el disco duro en linux, detener, dormir, reactivar
Parece ser que por defecto el standby para discos en Linux viene desactivado, que se puede controlar con hdparm y que este control es solo por sesion y hay que hacerlo manual cada vez que se reinicia. En el siguiente blog encontre una solución que tengo que probar y con la que no estoy del todo satisfecho
http://www.tacticalcode.de/2013/01/festplatte-automatisch-in-standby-mit-hdparm-und-udev.html
Pero sigo buscando...
update 10:43
http://blog.is-a-geek.org/festplatten-in-den-standby-modus-versetzen-unter-ubuntu-desktopserver-mit-hd-idle
update 20.01.17
hoy he tenido un poco de tiempo para realizar pruebas. Primero, intenté configurar los discos a través de la herramienta webmin, que es mi favorita para facilitar el mantenimiento linux.
En webmin encontramos un apartado para esto y es;
hardware --> partition and local disks --> idle parameters --> Standby timeout
esto funciona en el momento, pero la configuracion no se guarda, todavia no he mirado porque,
Otra alternativa, hdparm es bastante aceptable, pero hay que configurarla a traves de scripts para que se funcion de manera automatica. Basicamente:
hdparm -C /dev/sda --> te dice el estado actual del sda
hdparm -y /dev/sda --> lo pone en descanso
hdparm -S 10 /dev/sda --> lo pone en descanso en un tiempo estimado
viernes, 6 de enero de 2017
conectarse con un server por ssh usando una llave ida/rsa
Si hemos perdido la clave publica, pero conservamos la privada. Podemos "recrearla" con el comando:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
ACTUALIZACION 14:11:2018
Cuando creamos el par de claves, ssh-keygen nos va a mostrar una salida artistica de la llave que se llama randomart.
Este dibujito, no lo volveremos a ver nunca mas si no lo deseamos específicamente. Una opción sería, habilitar la visualizacion de la llave cuando nos conectamos por ssh con un servidor con la opcion adicional, de forma que el comando total nos queda asi:
ssh root@ssh-server -o VisualHostKey=yes
Con lo que nos mostrará el randomart de la clave que estamos usando para conectarnos.
Pero... y si quisiera usar el randomart para comparar claves, perdidas, danadas o simplemente confundidas?
Bueno, el servidor podría convertir las llaves públicas existentes en el archivo know_host así:
ssh-keygen -lvf ~/.ssh/known_hosts---> ESTO ME GUSTA !!!
y podríamos comparar esta salida con el resultado en nuestro cliente con:
ssh-keygen -lv ---> Y ESTO TAMBIEN :-)
ACTUALIZACION 16.05.2018
Tuve que configurarme un laptop nuevo para acceder a estos servidores desde la casa, pero cuando quise enviar su clave con ssh-copy-id y me pidió la contrasena de administrador que no tenia...
Tanto uso el sistema de llaves para ssh, que en un(os) servidores se me olvidó la contrasena.
Claro, siempre podía logearme en el otro computador, por lo que desde este, importé la clave asi:
- pasar la clave publica .pub al computador que sí permite logearse (sin contrasena, pues tiene clave ssh)
- Ejecutar en consola, dentro del directorio donde esta la clave:
cat id_rsa.pub | ssh root@servidor-obj 'cat >> .ssh/authorized_keys && echo "Key copied"' - este comando manda la salida de cat, al archivo .ssh/authorized_keys de el servidor-obj deseado.
https://victorhckinthefreeworld.com/2016/01/28/transferir-llaves-ssh-de-un-pc-a-otro-en-gnulinux/
*********************************
valido para mac y linux:
ssh-keygen -t rsa -b 4096
-- algunos anaden -f ~/.ssh/id_rsa , si no lo haces, igual el programa preguntará el nombre y el camino del archivo. Si tampoco escribes algo especial, entonces tomará el valor por defecto arriba escrito.
-- también preguntará por una "paraphrase" que es una contraseña adicional para la clave. Personalmente pienso que es muy importante, puesto que si alguien se apropiara de la clave tendría fácil acceso a todos los ámbitos donde la clave funciona. Con una paraphrase tendría también que tener esta para cualquier conexión.
Este comando generara dos claves: id_rsa und id_rsa.pub en el directorio .ssh raiz del usuario.
La .pub es la clave pública, que se copiará en los servidores dentro del archivo "know_host" y la otra es la privada, que debe permanecer secreta en este directorio donde fué generada.
Hasta aqui con la parte cliente. Ahora debemos poner la clave pública entre las claves ssh aceptadas por el servidor. Para esto usaremos ssh-copy-id
ssh-copy-id root@server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/user/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@server's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@server'"
and check to make sure that only the key(s) you wanted were added.
-- OJO SOBRE EL USUARIO -- si queremos dar acceso a otro userx al servidor ssh hay que ejecutar:
ssh-copy-id userx@server desde el computador del userx y en su cuenta. Teniendo el userx ya una cuenta en el servidor.
--- NOTA IMPORTANTE ---
Si por alguna razon ssh-copy-id no funcionara, se vale tambien copiar (por ftp/filezilla, scp, ssh-->vim, etc.) la clave .pub del cliente /root/.ssh/id_rsa.pub en el servidor en el archivo "host_allow" /root/.ssh/authorized_keys
jueves, 5 de enero de 2017
Reseteando la contrasena de MariaDB en Linux Devuan (una variante Debian)
He encontrado el origen del problema:
al detener el servicio mysql con service mysql stop, he iniciar en modo seguro con deb-maint. Puedo ver las tablas de los usuarios. Alli aparece lo siguiente;
+-----------+---------------------+---------------------+
| host | user | password |
+-----------+---------------------+---------------------+
| localhost | root | * Blablabla-foobar
| server | root | * *Blablabla-foobar |
| 127.0.0.1 | root | * *Blablabla-foobar |
| ::1 | root | * *Blablabla-foobar |
| localhost | debian-sys-maint | * *Blablabla-foobar |
| % | user01 | |
| % | root | * *Blablabla-foobar |
+-----------+----------------------+---------------------+
el problema esta en el "hostname", para que funcione debes poner el "localhost" asi:
mysql -u root -h localhost -p
Pero mucho cuidado, pues esto no va a funcionar en la misma sesion, incluso tampoco con el mismo servicio, pues el modo seguro tambien se puede ejecutar "sin red" con lo que localhost tampoco funciona!
05.01.17 04:57
Si bien la contrasena de SQL no debería significar un problema grave, ya que es mas que seguro que tenemos la contrasena de root, por experiencia no resulta tan facil. Una cantidad de problemas se derivan de las versiones de SQL como de los systemas operativos que los albergan.
No estoy tratando aqui de competir contra las instrucciones de Oracle o MDB. Sino que documento aqui como resolví mis propios problemas, para tenerlo a mano en caso de volver a necesitarlo y ademas que si a alguien le sirven, me alegra.
service mysql stop
mysqld_safe --skip-grant-tables --skip-networking &
mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not
Ujum... entonces pruebo toda la session desde el comienzo con root:
service mysql stop
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not allowed to change passwords
???
Parece que tengo un terrible problema...
Bueno, la verdadera razon de ese problema parece residir en la configuracion original de mysql
bastante interesante es que el comando...
mysql_secure_installation
tambien me devuelve ese error:
Enter current password for root (enter for none):
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
lentamente estoy pensando en reinstalar todo, pero antes un par de tips interesantes que también encontré:
1.- hay un usuario debian-sys-maint que tiene privilegios elevados y puede ejecutar y configurar bases de datos, su contrasena es un texto aleatorio guardado en el archivo
/etc/mysql/debian.cnf
con él te puedes logear y resetear contrasenas
2.- Con el usuario debian-sys-maint (quizas también con otro) puedes visualizar los usuarios configurados de mysql.
select host, user, password from mysql.user;
en esta tabla puedes ver "encriptadas" las contrasenas, esto puede ser util a pesar de todo para estar seguro de los nombres de usuario, saber si un usuario con contrasena desconocida/olvidada tiene la misma de uno que conozcamos, o para constatar si nuestro cambio o reseteo de contrasenas esta funcionando.
3.- El comando: update mysql.user set password=password('tu-contrasena') where user='root';
sirve para resetear contrasenas.
martes, 13 de diciembre de 2016
Experiencias con el Chat de solo texto Profanity
Y es que en mi trabajo usamos un chat XMPP con el que intercambiamos texto, aunque raramente smiles y aun mas raramente documentos y menos fotos y otras multimedia. Tampoco usamos otros protocolos como gogle chat, skype, messenger o que se yo que mas que el Adium soporte.
La verdad que para ese rudimentario intercambio de texto esta el Adium no solo sobrados, sino que tambien, infrautilizado.
Por esto, decidí ponerme a buscar algo mas liviano y encontré a Profanity. Un cliente xmpp en modo consola, liviano y multiplataforma del cual quede enamorado a primera vista.
Como cualquier aplicacion de consola, hay que escribir comandos, recordarlos y saber usarlos. Por esto, y para que no se me olviden los útiles he decidido escribir un Post, con la esperanza de reutilizar el conocimiento y con que quizas tambien a otros le sirva.
Buscar ayuda:
/help <<----- ensena una clasificacion de los comandos segun tema
/help commands <<------- ensena todos los comandos
/help comandoespecifico <<--------- muestra la ayuda para ese comando especifico
/help navegation <<---- tips de navegacion
Interface:
/beep on/off <<----- Activa / desactiva las notificaciones
/history <<--- Activa el historial (como en bash)
/clear <<--- limpiar
/flash on/off <<--- destella cuando hay un mensaje
/intype on/off <<-- dice si alguien tipea
Estatus
/away <<------ Ausente
/xa mensaje <<------ largamente ausente (extended away) con mensaje
/chat << --- disponible para chatear (ansprechbar)
/online <<--- pone el estatus en verde y lo hace activo (verfugbar)
/dnd <<--- do not disturb, o en otras palabras nojo...
/gone
Ventanas
/win 3 <<---- se va a la ventana y al chat #3
alt + pgd down/up <<----- ver mas abajo o arriba de la ventana
F1... Fx <<--- ventanas 1 hasta x
Chats
/close 2 <<--- cierra la ventana 2
/join chatname <<----- entra en chatname
/msg "alguien" hola <<--- manda el mensaje
/autoconnect usuario.muestra@chat.com <<------- conecta automaticamente a usuario.muestra al iniciar
/roster add fulanito@chat.com <<-- agrega a fulanito a tus amigos
/roster remove fulanito@chat.com <<-- lo saca
Control
/quit << salir
/script run nombredelscript <<------
ejecuta un script que debe estar guardado en ~/.local/profanity/scripts y que utiliza los comandos de la consola de profanity como lenguaje. Muy útil para configuraciones previas, para mi por ejemplo me sirvio para unirme a todos los chat al empezar la sesion poniendo en el script "inicio" los siguiente
/join chat1
/join chat2
Archivos de configuracion:
EN MAC, tiene profanity 2 directorios importantes:
~/.config/profanity
... profrc <<--- tiene casi el mismo contenido de un tema, con algunas variaciones
~/.local/profanity
Los Temas (theme)
son una cosa bien importante como poderosa. Podemos listar los temas disponibles con
/theme list
para cambiarlo basta:
/theme load nombredeltema
los temas disponibles se deben guardar en:
~/.config/profanity/themes
aunque los del systema estan en la instalacion del programa:
/usr/local/cellar/profanity/0.5.0/share/profanity/theme
si no encuentras nada alli, es porque es la carpeta para tus temas y no para los que vienen por defecto.
Se pueden bajar temas desde el git del autor:
https://github.com/boothj5/profanity/tree/master/themes
puedes probarlos con "theme load" y comenzar a editar el que mas te guste.
los colores aceptados son:
whitebold_whiteblackbold_black
yellowbold_yellowbold_greengreenbluebold_blueredbold_red
cyanbold_cyanmagentabold_magenta
el orden es según mi lógica como armonizan mejor
jueves, 1 de diciembre de 2016
instalaciones de paquetes de software con github
la instalacion con github tiene la ventaja de no sobreescribir todos los paquetes sino que analiza primero las alternativas.
Esto puede ser util cuando trabajamos con un software de codigo abierto que editamos a nuestro gusto y del cual queremos editar solamente los archivos que nosotros no editamos.
Basicamente el comando git, copia o "Clona" el contenido del repositorio Web de Github en nuestra computadora objeto.
El siguiente comando clonará el depositorio de cowsay en un directorio llamado "cowsay" en el directorio activo donde nos encontremos para
git clone git://github.com/schacon/cowsay
El resto dependerá de la forma en que este software se instale, para el caso de cowsay, se ejecuta despues un script install.sh y ya.
Un articulo mucho mas extenso sobre el tema, el cual inspiró este minihow, se puede encontrar en
https://www.lifewire.com/installing-software-using-git-3993572
jueves, 20 de octubre de 2016
el comando find
find puede encontrar directorios o archivos con la opcion
-type d
-type f
. significa directorio activo
/ significa directorio raiz
y por supuesto todas sus variantes como /home/desktop/etcymas
-name archivo.txt
pero tambien sirvern aqui los comodines o wildcards *
tambien tenemos la opcion ignora el nombre para
-iname archivo.txt
donde find no va a encontrar este nombre
con los comodines entonces podemos encontrar todos los archivos de scripts de pyton ignorando los que pertenecen a test asi:
find / -type f -name *.py -iname test*.py
find tambien nos permite encontrar segun permisos
find . -perm 777 -print
./logfile.001
Virtualizacion con KVM
La interfaz me ha parecido espartana como un kernel solitario de linux en su version mas primitiva.
No es tan verdad, puesto que kvm cuenta con un interprete de comando llamado virsh que es bastante poderoso.
Pero cuando te acostumbras al clickliclicki con XEN o VMWare, y tienes que usar KVM te parece un viaje en la historia al pasado.
El manejo de KVM es casi obligatorio a traves de ssh y la consola virsh, porque el unico manager con interface para clientes corre solo en linux de manera nativa. Pero tampoco es tan malo: con una maquina virtual local se puede installar un linux rudimentario que corra puro virt-manager en windows, y en mac hay algunas recetas para brew que con sudor sangre y lagrimas funcionaran despues de algunos dias :-)
La instalacion en Ubuntu es mas o menos asi
sudo apt install qemu-kvm libvirt-bin
sudo apt install virtinst
el usuario que va a trabajar con libvirtd debe pertenecer al grupo, para saber si esta
bastara
groups username
si libvirtd no esta en la lista deberemos agregarlo con:
sudo adduser username libvirtd
Otra Guia mas de grep
Grep es un comando Unix que sirve para buscar cadenas de texto en archivos.
basicamente funciona así:
grep cadenaabuscar archivoendondesebusca
si la cadena es larga y contiene espacios se puede usar ' ':
grep 'cadena a buscar' archivoendondebusca
si queremos que grep nos diga solo las linias que empiezan con una cadena:
grep '^cadena con la que debe iniciar la linia' archivo.txt
si queremos que a grep no le importen las mayusculas o las minusculas usamos -i
grep -i CadenAaBuscar archivo.txt
si queremos que grep busque una palabra en cualquier lugar de la linea usamos $
grep 'palabra$' archivo.txt
se diferencia de
grep 'palabra' archivo.txt --> en que este segundo comando buscará la palabra aunque este metida en otra palabra asi: parangacutitidimicuaropalabraparangacutitidimicuaro
si queremos que grep nos ensene las liniea donde NO ESTA una cadena usaremos -vi
grep -vi 'cadenaquenoquiero' archivo.txt
tambien podemos decirle a grep que busque en un grupo de archivos cuyo nombre empieza con asi "arch" por ejemplo, asi:
grep 'buscaesto" arch*
y el nos dara un resultado diciendo donde lo encontro y que:
archivo1.txt:buscaestoaqui
archivo2.txt:buscaestoalla
y si solo queremos que grep nos diga en que archivo esta podemos usar -l (list) que ademas podemos combinar con las otras y hacer un -vil
grep -l '3' arch*
archivo1.txt
archivo2.txt
podemos tambien decirle a grep que nos ensene una linea antes o despues de la liniea encontrada con grep -C cuantaslinias -i "cadena" archivo.txt
... cuantaslinias
liniadearriba
cadena
liniadeabajo
... cuantaslinias
claro, con numeros:
grep -C 2 -i "cadena" archivo.txt
ah, apropósito tambien sirven las comillas dobles "" en lugar de simples ''
tambien podemos decirle a grep que consiga las lineas que contienen caracteres entre una secuencia, como desde el 0 al 5 asi:
grep [0-5] archivo.txt
linea con un 2
linea con un 4
1 linea
3 linea
la linia con un 6 no saldrá
si solo queremos que grep encuentre las lineas que comienzan con estos numeros usamos ^
grep [^0-5] archivo.txt
1 linea
3 linea
y las otras dos que no comienzan con los numeros de las secuencia buscada no saldran
grep tambien se entiende bien con directorios, asi si estamos en un directorio que contiene otro llamado "carpeta" podemos decirle a grep
grep 'cadena' carpeta/*
y si queremos una busqueda recursiva (que incluya subcarpetas) podemos usar -r
grep -r cadena carpeta/*
la opcion -n nos permitira ver el numero de línia donde esta la cadena
~\> grep -n [0-3] test.txt
2:testing 1
3:Testing 2
4:TesT 3
Uno muy útil, mostrar el contenido de un fichero omitiendo las linieas comentadas. Por ejemplo para apache.conf etc:
grep -v ^# autofs.conf
quitar las lineas vacias:
grep . archivo.txt
y quitar las linias comentadas y las vacias:
grep -v ^# archivo.txt | grep .
comparar dos ficheros: mejor que grep en este caso te recomiendo sdiff (super-diferencias, en realidad sidebysidediff) que te muestra los resultados ordenadamente en una tablita...
sdiff archivo1.txt archivo2.txt
aparte de sdiff tambien existe un diff, un poco mas primitivo que el primero, aunque en algunos casos podria ser útil, la sintaxis es la misma
Aqui una tablita util de opciones de grep:
| Option | Beschreibung |
|---|---|
| -r | Setze die Suche rekursiv durch alle Unterverzeichnisse fort. Funktioniert nur bei der Verwendung von Wildcards einwandfrei |
| -c | Anzeige der Anzahl Zeilen, in denen das Muster gefunden wurde |
| -i | Groß- und Kleinschreibung werden nicht unterschieden |
| -l | Nur Anzeige der Namen der Dateien, in denen das Muster gefunden wurde |
| -n | Zeigt die Zeilennummer an, in der das Muster gefunden wurde |
| -s | Unterdrückt die Fehlerausgaben (Standardfehler); sinnvoll in Skripten |
| -v | Zeigt alle Zeilen an, die das Muster nicht enthalten |
| -w | Das Suchmuster muss ein einzelnes Wort sein (also kein Bestandteil eines anderen Wortes) |
| -A [n] | Zeigt »n« Zeilen an, die der Zeile mit dem Muster folgen |
| -B [n] | Zeigt »n« Zeilen an, die vor der Zeile mit dem Muster liegen |
| --color=auto | Hebt das gesuchte Muster farblich hervor |
esta tablita me la tome de:
http://www.prontosystems.org/tux/grep
Crear una script condicional usando grep:
#!/bin/bash
# Script que comprueba la existencia de un Driver
# en conjuncion con Munki se puede usar para instalar el mismo si no esta
if kextstat | grep -q "com.asix.driver.ax88179-178a";
then
# Driver vorhanden
touch /Users/Shared/found_kesing_driv.txt
exit 1
else
# Driver existiert NIX
touch /Users/Shared/NOT-found_kesing_driv.txt
exit 0
fi
si deseamos que el script funcione a la inversa entonces agregamos ! despues de if
la "q" sirve para que grep no nos devuelva las lineas donde encontró algo. Ideal para Scripts.
LibreOffice remplaza dos guiones por uno
virsh list --all
en este otro: virsh list -all
que por supuesto no es para nada lo mismo,.
Para quitarlo debes ir al menu --> format --> autocorrect --> options
y ver lo que queremos configurar "mientras tipeas" o "
Tambien se puede desactivar la autocorreccion "while typing"
las opciones tambien puedes ser una opcion... aunque para mi problema con dos -- que se convierten en uno, habia un "hack" especial:
menu --> format --> autocorrect --> option --> replace dashes
Creando secuencias con Shell, seq , echo, jot...
seq 5
1
2
3
4
5
si queremos la secuencia decreciente
seq 5 1
5
4
3
2
1
si queremos rellenos con ceros
seq -w 5 1
5
4
3
2
1
¡no pasó nada! -- noo, si pasa, pero aqui no hay ceros que rellenar, prueba
seq -w 10 1
o
seq -w 100 1 ó tambien seq -w 100
y aqui el último numero de la secuencia será 001
ahora los intervalos...
los intervalos standard son de unidad. Si queremos intervalos diferentes tenemos que definir el inicio, intervalo y fin, asi:
seq 1 0.5 10
o decreciente con
seq 10 0.5 1
aha! aqui seq no hace nada y nos dice:
seq: needs negative decrement
que es absolutamente lógico pues le estamos pidiendo a seq que nos haga una secuencia decremental, y seq sólo suma el intervalo, por lo que tenemos que darle a seq un intervalo negativo, asi
seq 10 -0.5 1 si nos funcionará
las opciones -s y -t tambien nos pueden ser muy útiles
seq -s , -t ENDSEQ 10 -0.5 1
10,9.5,9,8.5,8,7.5,7,6.5,6,5.5,5,4.5,4,3.5,3,2.5,2,1.5,1,ENDSEQ
lo que podria servir por ejemplo para rellenar matrices o crear sucesiones.
Y para terminar aun nos queda la opcion -f o "format" que va a definir si los números se presentarán como estandard (%g), exponencial o notacion cientifica(%e), o con punto decimal y 6 posiciones decimales(%f)
prueba seq -f %g con %e y f% y veras estos formatos mas claramente, pero la fuerza de -f no radica exactamente en estos 3 formatos, sino en los formatos adicionales que se pueden crear a traves de estos. Y es que -f tambien puede ser "archivo%02g.txt" o "logfile.%03g" asi
~\> seq -f "logfile.%03g" 5
logfile.001
logfile.002
logfile.003
logfile.004
logfile.005
con lo que podemos usar seq para crear archivos por ejemplo asi:
touch $(seq -f "logfile.%03g" 5)
o para borrarlos, o crear directorios, etc.
SECUENCIAS CON JOT
SECUENCIAS CON ECHO
echo {1..9}
1 2 3 4 5 6 7 8 9
echo {5..1}
5 4 3 2 1
en este sentido es echo un poco mas poderoso que seq y jot ya que estas secuencias pueden ser tambien alfabeticas, como
echo {a..z}
echo {A..Z}
y reversas:
echo {z..a} a asi...
pero estas secuencias estaran siempre en la misma linea (a no ser que se acabe la pantalla entonces salta a la siguiente linea), y si quisieramos que los numeros esten uno bajo el otro necesitaremos a xargs asi
echo {1..10} | xargs -n1
cosa que podria parecer molesta depender de un segundo comando para esta opcion, aunque si lo miramos asi
echo {1..9} | xargs -n3
echo {a..y} | xargs -n5
tenemos como resultado unas bonitas matrices
pero la salida de { .. } la podemos utilizar en Unix de muchas otras maneras mas alla de echo, ya que echo es solo un repetidor que saca cosas por la salida estandar stdout o por otra dirigida con direccionamientos > o pipes
asi podemos directamente crear el efecto de arriba en ~\> seq -f "logfile.%03g" 5
con:
touch logfile.00{1..5}
crear directorios:
md directorio_{a..z} ó sino tambien md {a..z}_directorio
con XARGS podemos
cambiar derechos de grupos de usuarios en todas las carpetas dentro del directorio listado:
o lo que seria aún mejor, cambiar los derechos de sólo algunos directorios que cumplan con alguna condición como los que comienzen con "a"
ls a* | xargs sudo chgrp wheel
o filtrarlo con find:
find d* -*k-z
miércoles, 5 de octubre de 2016
Instalando Webmin...
Using the Webmin APT repository
deb http://download.webmin.com/download/repository sarge contribcd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.ascYou will now be able to install with the commands :apt-get update
apt-get install webminAll dependencies should be resolved automatically.Borrar winsxs en Windows 2008
La finalidad del directorio WINSXS es la de proveer los paquetes de instalacion de Windows en el caso de que deseemos instalar nuevos Roles o Features en nuestro Servidor. Si el servidor ya esta madurito, cumple sus funciones sin problemas y no queremos enconchinarlo, seguramente que estos archivos estan demas. Por otro lado el eliminarlos del Disco no va a significar que nunca mas podamos instalar nuevos roles, sino que podemos ubicar el WINSXS en una carpeta compartida de red donde todos los servidores puedan accederla para sus instalaciones. Si WINSXS tiene 15GB y tenemos 11 Servidores esta reduccion nos estará significando 150GB de espacio, lo que no es poco.
Para eliminar el WINSXS debemos realizar lo siguiente:
1.- Instalar la Feature "Desktop Experience" con "ink Support"
2.- Reiniciar el servidor
3.- Ahora tendremos en las herramientas del sistema, el "limpiador de Disco"
4.- Seleccionar el "Windows update Cleanup"
Powershell Tipps y tops
function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]{el scope, normal es local, pero se puede poner "global" para que la funcion trabaje a nivel de sistematype, pude ser bool, string, etc. Por lo visto se puede obviar en algunos casos$parameter es el nombre de una variable que funcionara como parametro para la funcion, asi:funtion global:buscar [([string]$cosaabuscar)]{}para que el programa sea mas legible, tambien se pueden poner los parametros con la etiqueta "param" asi:param([type]$parameter1 [,[type]$parameter2])
Aqui un ejemplo de la especificidad que se puede alcanzar:#function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]{ param([type]$parameter1 [,[type]$parameter2])
dynamicparam {<statement list>} begin {<statement list>}
process {<statement list>}
end {<statement list>}}si un parametro es obligatorio se puede usar el atributo de parametro "mandatory"
function Start-App{ Param(
[parameter(Mandatory=$true)]
[String]$AppNamePowershell tiene tambien otros atributos como por ejemplo:AllowNull
AllowEmptyString
ValidateCount
ValidateLength
ValidatePatternMATRICESUna funcion puede almacenar un Array de la siguiente manera:function myping {
$compname = $args[0]
$ip = $args[1]
ping $args[0,1]
}el array args, ejecutara el ping para ip o para computername, pero no para ambosVALORES LOGICOSen PS basta que una variable tenga un valor para ser verdadera, asi si hacemos$var="hola" if ($var){echo "es verdad"} el resultado sera ver en pantalla "es verdad"
los operadores son un poco extranos, es mejor al empezar hacerse una tabla:| -eq | equal |
| -ne | not equal |
| -lt | little |
| -le | little or equal |
| -gt | grande? |
| -ge | grande or equal |
se usan como un signo: $var -eq 10otros operadores muy útiles son tambien en lugar de decir $var = 10, cosa que al final de cuentas tambien es valida
viernes, 1 de abril de 2016
Ver las conversaciones pasadas del chat por Pidgin para Windows 7
C:\Users\<<NombreDeUsuario>>\AppData\Roaming\.purple\logs
Cada conversacion cerrada esta archivada como html por fechas asi
2016-04-01.085222+0200CET
lunes, 16 de noviembre de 2015
Jenkins default port 8080 changing
Force Jenkins to use allways English in Chrome
chrome://settings --> under, Advanced Settings --> Languages --> Language and input settings --> Add English and per drag and drop put it in the first position.
Jenkins Refresh, and voalá!
lunes, 19 de octubre de 2015
Configuracion de iSCSI con Server 2012
El Cliente debe tener el iSCSI initiator
En el Servidor se crea un Target, en las propiedades del Target, pestana iSCSI initiators se agrega la IP del Cliente. Debe funcionar tambien con el DNS name, y hasta la MAC.
En el Cliente, iSCSI initiator se mete la ip del servidor y aparece el target portal.
domingo, 2 de agosto de 2015
No Targets available for Login using Quick Connect
la cosa es que con FreeNAS funcionó el iSCSI de maravilla, nada mas configurar y alli estaba. Pero FreeNAS no se estaba llevando bien con varios de los Disco duros al no reconocer el SMART y provocando asi el sobrecalentamiento de los discos.
Para evitar danos mayores y con el dolor de mi alma, tuve que prescindir de FreeNAS e instale un WinServ2008R2 donde todo estaba reconocido y compatible.
Convencido de las ventajas del SAN, me aventuré a crear uno con mi WS2008, Asi que me baje el
Microsoft iSCSI Software Target 3.3
de la pagina de microsoft, lo instale en mi servidor y configuré rapidamente. Cree targets, cree discos, me fui al iSCSI initiator de mi pc-cliente, vi mi servidor en la pestana "Favorite Targets" pero en Targets no aparecia mi servidor por nada, ni por ip, ni nombre ni nadaviernes, 24 de julio de 2015
Asegurar una computadora importante virtualizandola
- Conseguir un Software que virtualice el HW. Yo estoy probando con Disk2VHD
- Tener una unidad Externa compatible que pueda almacenar el resultado el virtualizador
- Contar con un "servidor" de maquinas virtuales que pueda almacenar y cargar la maquina virtual en caso de Crash
En las tareas programadas se puede configurar el programa para correrlo directamente. A mi no me funciono asi, por lo que cree un pequeno script de esta manera:
PC2VHD.cmd:
---------------------------------------------------------------------------------
echo ASEGURANDO PC EN UN DISCO VIRTUAL ...
cd\
cd C:\Program Files (x86)\Disk2vhd>
disk2vhd.exe a: c: D:\CARPETA-Destino\DiscoVirtual.vhdx -accepteula
echo PROCESO TERMINADO, PRESIONE UNA TECLA PARA APAGAR
shutdown -s -t 0
---------------------------------------------------------------------------------
Cabe destacar que para asegurar el disco de boot, le asigne una unidad con el DiskManager, por eso tengo una a: que es mi disco boot. Si no aseguras esto no arranca la vm. Tambien te puedes copiar la larga cadena de caracteres de la unidad que aparece en la interfaz grafica de Disk2VHD.
Para evitar los caminos largos, las comillas y nos nombres con espacios, puse en el direcctorio raiz una carpeta llamada SCRIPTS y en ella guarde PC2VHD.cmd
Luego me fui al Task Scheduler (programador de tareas) de Windows y cree una nueva tarea que arranca este script. Lo probe varias veces con RUN desde el Task Scheduler y cuando todo fue sobre ruedas le puse un horario fijo
UPDATE 19.10.2015
He encontrado una forma mucho mas eficiente, auque de cierta complejidad inicial para virtualizar una computadora en tiempo real. Se trata de crear un disco virtual .vhd en un servidor iSCSI. Este disco, se monta a traves de iSCSI initiator en el Windows, y luego en las propiedades de MiPC --> Storage --> configuras el disco como Dinamic --> Creas un Mirror con el disco fijo.
La copia de todo sera en este caso 1:1 y absolutamente "Live". Esto ya es bastante con tener el Disco Mirror en algun servidor p.e. FreeNAS, que en caso de crash se puede montar en Hyper-V, aunque lo mas Cool, seria que el servidor iSCSi al mismo tiempo sea un servidor Windows con Hyper-V ya que el .VHD estaría en el mismo server.
Teoricamente, VirtualBox tambien puede montar discos .vhd, pero hasta el momento no he probado esta constelación (nada en contra de VB, por el contrario, lo uso regularmente como mi favorito, es solo que hasta ahora me he concentrado en la compatibilidad Microsoft.
El iSCSI Target provee ademas la posibilidad de crear Snapshots de los discos virtuales, lo que permitiria entonces, casi presindir de cualquier otra forma de backups...
update (un par de horas mas tarde)
He Creado un disco virtual en mi servidor W2008R2 y montado el disco iSCSI en mi Desktop con Windows 8.1. He creado el Mirror entre mi disco duro local y el iSCSI. Despues de completada la sincronizacion inicial, he ido al iSCSI Target Manager y desabilitado el Target. Después me fui a HV manager, cree una nueva VM y monte el disco alli. Pues buenas noticias: ha arrancado maravillosamente sin ningun problema!
Ahora que sé que la maquina arranca, y que absolutamente todo funciona como en el host, probaré la reinsersion en el iSCSI y la reactivacion en el compmngr.exe.
Entonces me queda explicarles un poquito mas profundamente, con fotitos y videitos de como hacerlo. Pero eso lo haré algo mas tarde... quizas se animan a hacerlo solitos!





