Este repositorio contiene una pequeña colección de scripts que pueden resultar útiles para los administradores de sistemas. Lo preparé yo mismo para centralizar las pequeñas herramientas que encuentro útiles y parece ser popular.
Solía solicitar la inclusión de nuevas herramientas, pero poco a poco me he dado cuenta de que "menos es más". Me encanta la idea de que los administradores de sistemas, desarrolladores y otras personas creen sus propios kits de herramientas, pero también encuentro que la gente envía cosas cuyo atractivo no entiendo.
Tiene sentido que las herramientas personales sean muy personales, pero eso significa que el rechazo es casi siempre el comportamiento predeterminado y eso me hace sentir mal.
En lugar de agregar cosas aquí, considere este repositorio como una pequeña colección de cosas que uso, y si desea utilizar algunas o todas las utilidades, hágalo. De lo contrario, le recomiendo encarecidamente que considere qué herramientas harían su vida diaria más útil y luego las recopile, las documente y las publique usted mismo.
En resumen, el valor aquí es la idea de recopilar las utilidades más comunes y hacerlas fáciles de instalar y actualizar desde una fuente central. No las herramientas específicas en sí.
Hay un repositorio de sustitución que aún está abierto, y al que se pueden hacer nuevas incorporaciones con mayor libertad:
Muestra cuánto tiempo hace que se modificó un archivo/directorio de forma legible por humanos.
Ejemplo:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
Alternativas:
stat
y ls
muestran edades, pero no de forma legible por humanos. Ejecute un comando, ocultando STDOUT y STDERR si se completa correctamente.
Ejemplo:
./chronic cp /etc/passwd /tmp/not/found
Esto está diseñado para usarse en trabajos cron, donde la salida generalmente se ignora en caso de éxito.
Esto fue escrito por Joey Hess y es parte de moreutils.
Dado un conjunto de rangos CIDR, genera las IP individuales en los rangos.
Ejemplo:
$ ./cidr2ip 192.168.0.0/24
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
..
Elimine los espacios en blanco superfluos de las líneas y elimine las líneas vacías por completo.
Ejemplo:
$ echo -e "Test1n f nnTest2nnnn" | ./collapse
Test1
f
Test2
Alternativas:
tr
Informar sobre archivos duplicados, mediante un hash SHA1 del contenido, de forma recursiva.
Ejemplo:
$ dupes
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/refs/heads/master
./.git/refs/remotes/origin/master
Alternativas:
Indica, mediante código de retorno, si un directorio determinado está vacío o no.
Ejemplo:
if empty-dir /etc; then echo "We're broken" ; fi
Expanda una dirección IPv6 abreviada/comprimida al formato completo.
Ejemplo:
./expand-ipv6 fe80::1 2001:41c8:10b:103::111
fe80:0000:0000:0000:0000:0000:0001
2001:41c8:010b:0103:0000:0000:0111
Alternativas:
sipcalc
Un script simple para enviar un conjunto consistente de métricas y valores a una instancia remota de grafito.
Las métricas se pueden ampliar mediante pequeños "complementos", que no son más que scripts shell/perl/ruby/python en un directorio particular.
Ejemplo:
graphite_send -v
NOTA Algunas métricas solo se enviarán si el usuario que las invoca es root.
Alternativas
Obtén direcciones IP fácilmente, ya sean todas las IP, todas las que sean IPv4/IPv6 o las de un dispositivo. Diseñado principalmente para secuencias de comandos.
Ejemplo:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
O para ver todas las direcciones IPv6 en eth0:
$ ipaddr -6 -d eth0
eth0 2001:41c8:10b:102::10
eth0 fe80::216:3eff:fe08:16a4
NOTA Requiere compilación mediante make build
.
Alternativas:
ip -[46] addr show
ifconfig -a
De manera similar a true
y false
el comando maybe
sale con un código de estado de cero o uno, dependiendo de un número aleatorio.
Puede resultar útil en scripts que necesitan comprobar errores o que se benefician de la aleatoriedad:
Ejemplo:
maybe && echo "I pass"
maybe || echo "I fail"
Haga ping a un host, independientemente de si es un host IPv6 o IPv4.
Ejemplo:
$ multi-ping steve.org.uk
Host steve.org.uk - 80.68.85.46 alive
Host steve.org.uk - 2001:41c8:125:46:0:0:0:10 alive
Para su comodidad, también puede especificar URI como argumentos, por ejemplo:
$ multi-ping http://steve.org.uk/foo/bar
Host steve.org.uk - 80.68.85.46 alive
Host steve.org.uk - 2001:41c8:125:46:0:0:0:10 alive
Requisitos:
Net::DNS
perl.ping
+ ping6
. Si el host actual es un esclavo MySQL, este script probará que la replicación del esclavo todavía está funcionando.
Se considera que la replicación está bien si se cumplen las tres condiciones siguientes:
Ejemplo:
# ./mysql-slave-check
The replication appears to show an error:
..
Master_Host: da-db1
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000124
Read_Master_Log_Pos: 65667
Relay_Log_File: relay-log.001139
Relay_Log_Pos: 27251
Relay_Master_Log_File: mysql-bin.000124
Slave_IO_Running: No
Slave_SQL_Running: No
..
El script sale silenciosamente si todo está bien, a menos que agregue " --verbose
":
# ./mysql-slave-check -v
The slave is running, successfully.
Replication lag: 0 seconds
Requisitos:
Un servidor HTTP Python simple, que se ha actualizado para permitirle vincularse a direcciones IP arbitrarias, específicamente para permitirle vincularse a localhost.
Ejemplo:
$ ./pyhttpd 127.0.0.1:8080
Serving HTTP on 127.0.0.1 port 8080 ...
o
$ ./pyhttpd 8080
Serving HTTP on 0.0.0.0 port 8080 ...
Genere una única contraseña aleatoria a través de /dev/urandom
.
Ejemplo:
$ ./randpass
cT3j7Zp6
$ ./randpass -n 10
ulHrNvYLaa
$ ./randpass -n 20 -f
oe[d7+e.{Uw=L'RO~[]{
(Al agregar "-f" se utiliza el alfabeto completo de los símbolos posibles; de lo contrario, solo se muestran valores alfanuméricos. "-n" establece la longitud de la contraseña generada).
Alternativas existentes:
Muestra el nuevo resultado desde la lectura anterior de un archivo. Esto es útil para realizar un seguimiento de las actualizaciones de los archivos de registro.
Ejemplo:
$ ./since /var/log/messages >/dev/null
$ logger "testing the log"
$ ./since /var/log/messages
Apr 20 11:24:37 precious skx: testing the log
Alternativas existentes:
Muestra los tipos de autenticación que presenta un servidor SSH remoto.
Ejemplo:
$ ./ssh-auth-types precious
publickey password
$ ./ssh-auth-types ssh.example.com
publickey
Pruebe si las conexiones ssh
a una lista de hosts tendrán éxito probando cada una en orden.
Ejemplo:
$ ./ssh-test host.list.txt
ssh.steve.org.uk ... OK
www.steve.org.uk ... OK
foo.example.com:222 ... OK
$ cat host.list.txt
ssh.steve.org.uk
www.steve.org.uk
foo.example.com:222
El formato del archivo de entrada es:
[user@]hostname1[:port]
[user@]hostname2[:port]
..
Duerme durante un período de tiempo aleatorio, limitado por el valor máximo dado. (El valor predeterminado es 5 minutos).
Ejemplo:
$ ./splay -v
Sleeping for 77 seconds from max splay-time of 300 seconds
$ ./splay -v -m 20
Sleeping for 7 seconds from max splay-time of 20 seconds
Alternativas existentes:
Informe la fecha y el número de días hasta que caduque el certificado SSL proporcionado. Se pueden aceptar varios nombres de dominio y cada uno se prueba por turno.
La salida predeterminada es "ruidosa", pero puede agregar "-d" para simplificar el nombre de dominio y la cantidad de días restantes en el certificado.
Ejemplo:
./ssl-expiry-date bbc.co.uk
bbc.co.uk
Expires: Sep 18 13:50:57 2016 GMT
Days: 266
./ssl-expiry-date -d bbc.co.uk steve.org.uk
bbc.co.uk: 266
steve.org.uk: 82
El tiempo de espera le permite ejecutar un comando que se eliminará después de la cantidad de segundos especificada.
Ejemplo:
# Kill the command after 63 seconds.
./timeout -t 63 top
# Kill the command after two minutes, five seconds.
./timeout -t 2:5 top
# Kill the command after three hours, five minutes, and seven seconds
./timeout -t 3:5:7 top
Repita el comando específico hasta que tenga éxito; ejecútelo al menos una vez siempre.
Ejemplo:
./until-success ssh example.com -l root -i ~/.ssh/example.com.key
Alternativas triviales (ba)sh:
Espera hasta que un host determinado esté en línea, determinado por ping, hasta ejecutar un comando determinado.
Ejemplo:
$ ./when-up 1.2.3.4 ssh [email protected]
Waiting for 1.2.3.4 to come online...
Last login: Sat Dec 28 23:25:01 2013 from 5.6.7.8
[email protected]:~#
Alternativas:
until-success ping -c 1 1.2.3.4; ssh [email protected]
Repita el comando específico hasta que falle; ejecútelo al menos una vez siempre.
Ejemplo:
./until-error ssh example.com -l root -i ~/.ssh/example.com.key
Alternativas triviales (ba)sh:
Espera hasta que un host determinado esté inactivo
Ejemplo:
$ ./when-down 1.2.3.4 echo "down"
Waiting for 1.2.3.4 to get down...
down
Alternativas:
until-error ping -c 1 -W 1 1.2.3.4; echo "down"
Identifique el caparazón bajo el que estamos ejecutando.
Por ejemplo:
$ which-shell
dash
Alternativas existentes:
ls -l /bin/sh
Ejecute un comando, a menos que ya se esté ejecutando una copia existente de ese comando, mediante la creación de un archivo de bloqueo temporal.
Por ejemplo:
with-lock rsync ...
El nombre del archivo de bloqueo se basa en el hash SHA1 del comando que se ejecutará y el ID de usuario actual.
Alternativas existentes:
Informe cualquier problema o sugerencia a través del repositorio de github:
Steve Kemp [email protected]