Ce référentiel contient une petite collection de scripts qui pourraient être utiles aux administrateurs système. Je l'ai monté moi-même pour centraliser les petits outils que je trouve utiles, et il semble être populaire.
J'avais l'habitude de solliciter l'inclusion de nouveaux outils, mais je me suis lentement rendu compte que « moins c'est plus ». J'aime l'idée que les administrateurs système, les développeurs et d'autres personnes créent leurs propres boîtes à outils, mais je trouve également que les gens soumettent des choses dont je ne comprends tout simplement pas l'attrait.
Il est logique que les outils personnels soient très personnels, mais cela signifie que le rejet est presque toujours le comportement par défaut et cela me fait du mal.
Au lieu d'ajouter des éléments ici, considérez ce référentiel comme une petite collection d'éléments que j'utilise, et si vous souhaitez utiliser certains/tous les utilitaires pour votre propre usage, veuillez le faire. Sinon, je vous encourage fortement à réfléchir aux outils qui rendraient votre vie quotidienne plus utile, puis à les collecter, à les documenter et à les publier vous-même.
En bref, la valeur ici réside dans l' idée de rassembler vos utilitaires les plus courants et de les rendre faciles à installer et à mettre à jour à partir d'une source centrale. Pas les outils spécifiques eux-mêmes.
Il existe un référentiel de remplacement qui est toujours ouvert et dans lequel de nouveaux ajouts peuvent être effectués plus librement :
Indiquez depuis combien de temps un fichier/répertoire a été modifié de manière lisible par l'homme.
Exemple:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
Alternatives :
stat
et ls
affichent tous deux les âges, mais pas d'une manière lisible par l'homme. Exécutez une commande en masquant STDOUT et STDERR si elle se termine avec succès.
Exemple:
./chronic cp /etc/passwd /tmp/not/found
Ceci est conçu pour être utilisé pour les tâches cron, où la sortie est généralement ignorée en cas de succès.
Ceci a été écrit par Joey Hess et fait partie de moreutils.
Étant donné un ensemble de plages CIDR, les adresses IP individuelles de la ou des plages sont affichées.
Exemple:
$ ./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
..
Supprimez les espaces superflus des lignes et supprimez entièrement les lignes vides.
Exemple:
$ echo -e "Test1n f nnTest2nnnn" | ./collapse
Test1
f
Test2
Alternatives :
tr
Rapport sur les fichiers en double, via un hachage SHA1 du contenu, de manière récursive.
Exemple:
$ dupes
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/refs/heads/master
./.git/refs/remotes/origin/master
Alternatives :
Indiquez, via le code retour, si un répertoire donné est vide ou non.
Exemple:
if empty-dir /etc; then echo "We're broken" ; fi
Développez une adresse IPv6 abrégée/compressée au format complet.
Exemple:
./expand-ipv6 fe80::1 2001:41c8:10b:103::111
fe80:0000:0000:0000:0000:0000:0001
2001:41c8:010b:0103:0000:0000:0111
Alternatives :
sipcalc
Un script simple pour envoyer un ensemble cohérent de métriques et de valeurs à une instance graphite distante.
Les métriques peuvent être étendues via de petits "plugins", qui ne sont rien de plus que des scripts shell/perl/ruby/python dans un répertoire particulier.
Exemple:
graphite_send -v
REMARQUE Certaines métriques ne seront envoyées que si l'utilisateur appelant est root.
Alternatives
Obtenez facilement des adresses IP, soit toutes les IP, toutes celles qui sont IPv4/IPv6, ou celles d'un appareil. Conçu principalement pour les scripts.
Exemple:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
Ou pour voir toutes les adresses IPv6 sur eth0 :
$ ipaddr -6 -d eth0
eth0 2001:41c8:10b:102::10
eth0 fe80::216:3eff:fe08:16a4
REMARQUE Nécessite une compilation via make build
.
Alternatives :
ip -[46] addr show
ifconfig -a
Dans la même veine que true
et false
la commande maybe
se termine avec un code d'état de zéro ou un, en fonction d'un nombre aléatoire.
Cela peut être utile dans les scripts qui doivent tester des échecs, ou qui bénéficient du caractère aléatoire :
Exemple:
maybe && echo "I pass"
maybe || echo "I fail"
Pingez un hôte, qu'il s'agisse d'un hôte IPv6 ou IPv4.
Exemple:
$ 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
Pour plus de commodité, vous pouvez également spécifier des URI comme arguments, par exemple :
$ 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
Exigences:
Net::DNS
.ping
+ ping6
. Si l'hôte actuel est un esclave MySQL, ce script testera que la réplication esclave fonctionne toujours.
La réplication est considérée comme correcte si les trois conditions suivantes sont remplies :
Exemple:
# ./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
..
Le script se termine silencieusement si tout va bien, sauf si vous ajoutez " --verbose
" :
# ./mysql-slave-check -v
The slave is running, successfully.
Replication lag: 0 seconds
Exigences:
Un simple serveur HTTP Python, qui a été mis à jour pour lui permettre de se lier à des adresses IP arbitraires, notamment pour vous permettre de vous lier à localhost.
Exemple:
$ ./pyhttpd 127.0.0.1:8080
Serving HTTP on 127.0.0.1 port 8080 ...
ou
$ ./pyhttpd 8080
Serving HTTP on 0.0.0.0 port 8080 ...
Générez un seul mot de passe aléatoire via /dev/urandom
.
Exemple:
$ ./randpass
cT3j7Zp6
$ ./randpass -n 10
ulHrNvYLaa
$ ./randpass -n 20 -f
oe[d7+e.{Uw=L'RO~[]{
(L'ajout de "-f" utilise l'alphabet complet des symboles possibles, sinon seules les valeurs alphanumériques sont affichées. "-n" définit la longueur du mot de passe généré.)
Alternatives existantes :
Afficher la nouvelle sortie depuis la lecture précédente d'un fichier. Ceci est utile pour suivre les mises à jour des fichiers journaux.
Exemple:
$ ./since /var/log/messages >/dev/null
$ logger "testing the log"
$ ./since /var/log/messages
Apr 20 11:24:37 precious skx: testing the log
Alternatives existantes :
Afficher les types d'authentification présentés par un serveur SSH distant.
Exemple:
$ ./ssh-auth-types precious
publickey password
$ ./ssh-auth-types ssh.example.com
publickey
Testez si les connexions ssh
à une liste d'hôtes réussiront, en testant chacune dans l'ordre.
Exemple:
$ ./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
Le format du fichier d'entrée est :
[user@]hostname1[:port]
[user@]hostname2[:port]
..
Dormez pendant une durée aléatoire, limitée par la valeur maximale donnée. (La valeur par défaut est de 5 minutes).
Exemple:
$ ./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
Alternatives existantes :
Indiquez la date et le nombre de jours jusqu'à l'expiration du certificat SSL donné. Plusieurs noms de domaine peuvent être acceptés et chacun est testé tour à tour.
La sortie par défaut est "noisy", mais vous pouvez ajouter "-d" pour simplifier cela au nom de domaine et au nombre de jours restant sur le certificat.
Exemple:
./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
Timeout vous permet d'exécuter une commande qui sera supprimée après le nombre de secondes donné.
Exemple:
# 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
Répétez la commande spécifique jusqu'à ce qu'elle réussisse - exécutez-la toujours au moins une fois.
Exemple:
./until-success ssh example.com -l root -i ~/.ssh/example.com.key
Alternatives triviales (ba)sh :
Attend qu'un hôte donné soit en ligne, déterminé par ping, jusqu'à l'exécution d'une commande donnée.
Exemple:
$ ./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]:~#
Alternatives :
until-success ping -c 1 1.2.3.4; ssh [email protected]
Répétez la commande spécifique jusqu'à ce qu'elle échoue - exécutez-la toujours au moins une fois.
Exemple:
./until-error ssh example.com -l root -i ~/.ssh/example.com.key
Alternatives triviales (ba)sh :
Attend qu'un hôte donné soit en panne
Exemple:
$ ./when-down 1.2.3.4 echo "down"
Waiting for 1.2.3.4 to get down...
down
Alternatives :
until-error ping -c 1 -W 1 1.2.3.4; echo "down"
Identifiez le shell sous lequel nous fonctionnons.
Par exemple:
$ which-shell
dash
Alternatives existantes :
ls -l /bin/sh
Exécutez une commande, à moins qu'une copie existante de cette commande ne soit déjà en cours d'exécution, via la création d'un fichier de verrouillage temporaire.
Par exemple:
with-lock rsync ...
Le nom du fichier de verrouillage est basé sur le hachage SHA1 de la commande à exécuter et sur l'ID utilisateur actuel.
Alternatives existantes :
Veuillez signaler tout problème/suggestion via le référentiel github :
Steve Kemp [email protected]