Archivos de la categoría Bash – Consola

Añadir una palabra delante de cada linea en un fichero.

Estaba trabajando con el webmaster tools y la nueva herramienta para deshabilitar enlaces de google que la actualizo de vez en cuando.

En esta ocasión iba a deshabilitar 250 dominios spamers, pero el problema es que tenia los dominios en un archivo de texto:

dominio.com
lalal.net
blabla.com
etc.com

Bien, el asunto es que para mandar los dominios a google hay que hacerlo de esta forma:

domain:dominio.com
domain:lalal.net
domain:blabla.com
domain:etc.com

Así que antes de buscar nada hice un sencillo script que hiciera el trabajo y que seguramente a alguien le servirá también.

#!/bin/bash
fichero=$(cat $1 | tr "\n" " ")
for palabra in $fichero
do
     echo domain:$palabra >> $2
done

Si, eso es todo y en menos de un segundo tenemos domain: delante de todas las lineas.

Lo guardamos con cualquier nombre ej: cambio.sh y lo ejecutamos así:

sh cambio.sh FicheroConTextos.txt FicheroNuevo.txt

Se pueden hacer cambios en el script para que sea más fácil de usar o bien para que sea más complejo y comente solo las primeras lineas del fichero o las últimas, pero vamos, que lo por necesidad, no debería ni haber escrito este tema pero, queda para el recuerdo y tal vez le sirva a alguien.

Sacar todos los correos asignados a las cuentas cpanel

He estado trabajando en un script para el cual necesito la lista de eMails de los usuarios de cPanel y ya que hice la función y tal lo converti en un script aparte por si alguien necesita sacar los emails de todos los usuarios de cPanel.

Tal vez haya algo default en cPanel para hacer esto, pero como ya estaba haciendo algo para mi lo hice.

El script hace dos cosas, primero muestra los emails de los usuarios y segundo muestra los usuarios que no tienen email asignado, por defecto crea el archivo /tmp/UsuariosSinEmailDefinido.txt y ahí guarda todos los usuarios de cPanel que no tengan un correo asignado a su cuenta, se puede añadir un archivo similar para agregar ahí los usuarios que si tienen un eMail o bien solo los usuarios.

Correo Principal de todas las cuentas de cPanel

#!/bin/bash
# Sacar lista de emails de usuarios cpanel.
# Skamasle.
ruta=/var/cpanel/users
ListaSinMails=/tmp/UsuariosSinEmailDefinido.txt
if [ -e $ListaSinMails ]; then
	cat /dev/null > $ListaSinMails
else
	touch $ListaSinMails
fi
imp () {
mail=$1
td=$(cat $mail |grep "CONTACTEMAIL" |cut -d"=" -f2)
if [[ $td == *@* ]]; then
        echo "El Correo del usuario: $mail es" $td
else
    	tput bold
        tput setaf 1
echo "Usuario $mail no tiene asignado un eMail"
        tput sgr 0
        echo "$mail" >> $ListaSinMails
fi
}
correo () {
cd $ruta
for i in *
	do
 		imp $i
done
}
correo
	tput bold
	tput setaf 2
echo "Usuarios que no tienen un email definido"
tput sgr 0
cat $ListaSinMails
exit 1

Si usan windows y copian y pegan puede que tengan problemas, igual el scipt lo pueden bajar desde aquí: CP-Mail.sh

wget http://mirror.skamasle.com/scripts/CP-Mails.sh

Espero les sirva 🙂

Bash generar contraseñas – letras y números aleaorios

Estaba simplificando mi auto instalador de ISPCONFIG para que sea más sencillo y más automático de usar y una de las cosas que tiene es la clave de mysql, así que que me a dado por generar la contraseña para que el usuario no tenga que escribirla y he llegado hasta este comando:

Generar claves aleatorias en bash

cat /dev/urandom| tr -dc '0-9a-zA-Z'|head -c 8

La salida:

XiunRWVM

También podemos añadirle simbolos:

cat /dev/urandom| tr -dc '[email protected]#'|head -c 8

j2q6P#gs

O hacerla más larga

cat /dev/urandom| tr -dc '[email protected]#-'|head -c 22

ofSMeuWYdDVl3zMVMyLSDe

Y tengo que adminitirlo el comando tr es nuevo para mi:

man tr

NAME
tr – translate or delete characters

SYNOPSIS
tr [OPTION]… SET1 [SET2]

DESCRIPTION
Translate, squeeze, and/or delete characters from standard input, writing to standard output.

-c, -C, –complement
use the complement of SET1

-d, –delete
delete characters in SET1, do not translate

-s, –squeeze-repeats
replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character

-t, –truncate-set1
first truncate SET1 to length of SET2

–help display this help and exit

–version
output version information and exit

Para mi es más que suficiente, aunque buscando y buscando he encontrado esta web en la que explica varios metodos y hasta una variante del comando que deje más arriba: 10 formas de generar claves en bash

Con uno de los que me quedo que hay en esa web es con este:

randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}

Y con esta otra que las dos son variantes del de arriba:

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo

Espero les sirvan tanto como a mi 🙂

Comprimir más rápido con pigz aprovechando el multiples nucleos

Si aún no lo has visto puedes revisar esta entrada en nuestro blog: Pigz: Compresión Usando Multiples Nucleos : Pigz vs Gzip

En donde hacemos una rápida comparación en la velocidad de compresión de gzip con la de pigz el cual aprovecha procesadores de multiples núcleos, ganando un 100% en la velocidad en un procesador con 2 cores.

Esperemos que les sirva la pequeña comparación y la mini guía de uso que seguramente más adelante la detallaremos más.

CHMOD – Permisos de escritura, lectura y ejecución.

Notación simbólica;

--- Sin permiso
--x Ejecución
-w- Escritura
-wx Escritura y Ejecución
r-- Lectura
r-x Lectura y Ejecución
rw- Lectura y Escritura
rwx Lectura, escritura y ejecución

Visto de forma numeral del 1 al 7.

0 --- Sin permiso
1 --x Ejecución
2 -w- Escritura
3 -wx Escritura y Ejecución
4 r-- Lectura
5 r-x Lectura y Ejecución
6 rw- Lectura y Escritura
7 rwx Lectura, escritura y ejecución

Bien esta es la explicación básica, luego lo de por que son 3 números (777) y demás es por que se da permisos al propietario, al grupo y a todos los demás, esto ya lo he explicado hace mucho tiempo en este enlace: como usar chmod

Es viejo todo esto y muy sencillo pero me dio por publicarlo.

Buscar Archivos en Linux por Peso

Otro comando útil y muy sencillo es el de buscar por medio de la consola, el comando es find y podemos usarlo también para buscar archivos por peso o más bien listarlos por peso, por ejemplo buscar logs que pesen más de 100 MB en un directorio y sus subdirectorios.

Encontrar los archivos más pesados de una carpeta

find . -type f -size +1073741824 -ls

Ese comando nos mostrara todos los archivos que pesen más de 1GB, el peso esta en bytes.

También podemos buscar todos los que pesen menos de 1GB o de un mega ( el peso que queramos, es el mismo comando solo que en vez de poner un más ( + ) delante del número, ponemos un menos.

find . -type f -size -1073741824 -ls

Ver el tipo de puerto sata que tenemos: sata 2 o sata 3 en Linux

Hay una forma sencilla de ver que tipo de puerto sata tenemos en nuestra pc, basta con ejecutar un comando y tendremos el resutaldo, como root ejecutamos:

Saber que puerto sata tenemos | velocidad

dmesg | grep -i sata | grep ‘link up’

Y tendremos como resultado:

[    1.580650] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.900463] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)

O bien:

grep -i SATA /var/log/messages | grep ‘link up’

Mar 31 05:25:44 soporte kernel: [    1.608258] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Mar 31 05:25:44 soporte kernel: [    1.932070] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Apr  1 01:58:02 soporte kernel: [    1.604196] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Apr  1 01:58:02 soporte kernel: [    1.924013] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Apr  1 14:57:28 soporte kernel: [    1.580650] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Apr  1 14:57:28 soporte kernel: [    1.900463] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)

Espero les sirva, el pequeño tip