Dieses Repository enthält eine kleine Sammlung von Skripten, die für Systemadministratoren nützlich sein können. Ich habe es selbst zusammengestellt, um die kleinen Tools, die ich nützlich finde, zu zentralisieren, und es scheint beliebt zu sein.
Früher habe ich die Einbeziehung neuer Tools gefordert, bin aber langsam zu der Erkenntnis gelangt, dass „weniger mehr ist“. Ich liebe die Idee, dass Systemadministratoren, Entwickler und andere Leute ihre eigenen Toolkits erstellen, finde aber auch, dass Leute Dinge einreichen, deren Reiz ich einfach nicht verstehe.
Es macht Sinn, dass persönliche Tools sehr persönlich sind, aber es bedeutet, dass Ablehnung fast immer das Standardverhalten ist und ich mich deshalb schlecht fühle.
Anstatt hier Dinge hinzuzufügen, betrachten Sie dieses Repository als eine kleine Sammlung von Dingen, die ich verwende, und wenn Sie einige oder alle Dienstprogramme für Ihren eigenen Gebrauch nutzen möchten, dann tun Sie dies bitte. Wenn nicht, würde ich Sie dringend dazu ermutigen, darüber nachzudenken, welche Tools Ihr tägliches Leben nützlicher machen würden, und diese dann zu sammeln, zu dokumentieren und selbst zu veröffentlichen.
Kurz gesagt liegt der Wert hier in der Idee , Ihre gängigsten Dienstprogramme zu sammeln und sie einfach von einer zentralen Quelle aus installieren und aktualisieren zu können. Nicht die spezifischen Werkzeuge selbst.
Es gibt ein Ersatz-Repository, das noch offen ist und in dem neue Ergänzungen freier vorgenommen werden können:
Zeigen Sie an, wie lange es her ist, dass eine Datei/ein Verzeichnis für Menschen lesbar geändert wurde.
Beispiel:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
Alternativen:
stat
und ls
zeigen beide das Alter an, jedoch nicht in einer für Menschen lesbaren Weise. Führen Sie einen Befehl aus und verbergen Sie STDOUT und STDERR, wenn er erfolgreich abgeschlossen wurde.
Beispiel:
./chronic cp /etc/passwd /tmp/not/found
Dies ist für Cron-Jobs gedacht, bei denen die Ausgabe im Erfolgsfall generell ignoriert wird.
Dies wurde von Joey Hess geschrieben und ist Teil von moreutils.
Bei einer Reihe von CIDR-Bereichen werden die einzelnen IPs in den Bereichen ausgegeben.
Beispiel:
$ ./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
..
Entfernen Sie überflüssige Leerzeichen aus Zeilen und entfernen Sie Leerzeilen vollständig.
Beispiel:
$ echo -e "Test1n f nnTest2nnnn" | ./collapse
Test1
f
Test2
Alternativen:
tr
Berichten Sie über doppelte Dateien über einen SHA1-Hash des Inhalts rekursiv.
Beispiel:
$ dupes
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/refs/heads/master
./.git/refs/remotes/origin/master
Alternativen:
Geben Sie über den Rückgabecode an, ob ein bestimmtes Verzeichnis leer ist oder nicht.
Beispiel:
if empty-dir /etc; then echo "We're broken" ; fi
Erweitern Sie eine abgekürzte/komprimierte IPv6-Adresse auf die vollständige Form.
Beispiel:
./expand-ipv6 fe80::1 2001:41c8:10b:103::111
fe80:0000:0000:0000:0000:0000:0001
2001:41c8:010b:0103:0000:0000:0111
Alternativen:
sipcalc
Ein einfaches Skript zum Senden eines konsistenten Satzes von Metriken und Werten an eine Remote-Graphit-Instanz.
Die Metriken können über kleine „Plugins“ erweitert werden, bei denen es sich lediglich um Shell-/Perl-/Ruby-/Python-Skripte in einem bestimmten Verzeichnis handelt.
Beispiel:
graphite_send -v
HINWEIS Einige Metriken werden nur gesendet, wenn der aufrufende Benutzer Root ist.
Alternativen
Erhalten Sie ganz einfach IP-Adressen, entweder alle IPs, alle IPv4/IPv6 oder die für ein Gerät. In erster Linie für die Skripterstellung konzipiert.
Beispiel:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
Oder um alle IPv6-Adressen auf eth0 anzuzeigen:
$ ipaddr -6 -d eth0
eth0 2001:41c8:10b:102::10
eth0 fe80::216:3eff:fe08:16a4
HINWEIS Erfordert eine Kompilierung über make build
.
Alternativen:
ip -[46] addr show
ifconfig -a
Ähnlich wie bei true
und false
wird der Befehl maybe
abhängig von einer Zufallszahl mit dem Statuscode Null oder Eins beendet.
Dies kann in Skripten nützlich sein, die Testfehler erfordern oder von Zufälligkeit profitieren:
Beispiel:
maybe && echo "I pass"
maybe || echo "I fail"
Pingen Sie einen Host, unabhängig davon, ob es sich um einen IPv6- oder IPv4-Host handelt.
Beispiel:
$ 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
Der Einfachheit halber können Sie auch URIs als Argumente angeben, zum Beispiel:
$ 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
Anforderungen:
Net::DNS
Perl-Modul.ping
+ ping6
-Binärdateien. Wenn der aktuelle Host ein MySQL-Slave ist, testet dieses Skript, ob die Slave-Replikation noch funktioniert.
Die Replikation gilt als in Ordnung, wenn die folgenden drei Bedingungen zutreffen:
Beispiel:
# ./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
..
Das Skript wird stillschweigend beendet, wenn alles in Ordnung ist, es sei denn, Sie fügen „ --verbose
“ hinzu:
# ./mysql-slave-check -v
The slave is running, successfully.
Replication lag: 0 seconds
Anforderungen:
Ein einfacher Python-HTTP-Server, der aktualisiert wurde, um die Bindung an beliebige IP-Adressen zu ermöglichen, insbesondere um Ihnen die Bindung an localhost zu ermöglichen.
Beispiel:
$ ./pyhttpd 127.0.0.1:8080
Serving HTTP on 127.0.0.1 port 8080 ...
oder
$ ./pyhttpd 8080
Serving HTTP on 0.0.0.0 port 8080 ...
Generieren Sie ein einzelnes zufälliges Passwort über /dev/urandom
.
Beispiel:
$ ./randpass
cT3j7Zp6
$ ./randpass -n 10
ulHrNvYLaa
$ ./randpass -n 20 -f
oe[d7+e.{Uw=L'RO~[]{
(Durch das Hinzufügen von „-f“ wird das vollständige Alphabet möglicher Symbole verwendet, andernfalls werden nur alphanumerische Werte angezeigt. „-n“ legt die Länge des generierten Passworts fest.)
Bestehende Alternativen:
Zeigt die neue Ausgabe seit dem vorherigen Lesen einer Datei an. Dies ist nützlich, um Protokolldateiaktualisierungen zu verfolgen.
Beispiel:
$ ./since /var/log/messages >/dev/null
$ logger "testing the log"
$ ./since /var/log/messages
Apr 20 11:24:37 precious skx: testing the log
Bestehende Alternativen:
Zeigt die von einem Remote-SSH-Server bereitgestellten Authentifizierungstypen an.
Beispiel:
$ ./ssh-auth-types precious
publickey password
$ ./ssh-auth-types ssh.example.com
publickey
Testen Sie, ob ssh
Verbindungen zu einer Liste von Hosts erfolgreich sind, indem Sie die einzelnen Hosts der Reihe nach testen.
Beispiel:
$ ./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
Das Format der Eingabedatei ist:
[user@]hostname1[:port]
[user@]hostname2[:port]
..
Schlafen Sie für eine zufällige Zeitspanne, begrenzt durch den angegebenen Maximalwert. (Standard ist 5 Minuten).
Beispiel:
$ ./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
Bestehende Alternativen:
Geben Sie das Datum und die Anzahl der Tage an, bis das angegebene SSL-Zertifikat abläuft. Es können mehrere Domänennamen akzeptiert werden, die nacheinander getestet werden.
Die Standardausgabe ist „noisy“, aber Sie können „-d“ hinzufügen, um dies für den Domänennamen und die Anzahl der auf dem Zertifikat verbleibenden Tage zu vereinfachen.
Beispiel:
./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
Mit Timeout können Sie einen Befehl ausführen, der nach der angegebenen Anzahl von Sekunden abgebrochen wird.
Beispiel:
# 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
Wiederholen Sie den jeweiligen Befehl, bis er erfolgreich ist – führen Sie ihn immer mindestens einmal aus.
Beispiel:
./until-success ssh example.com -l root -i ~/.ssh/example.com.key
Triviale (ba)sh-Alternativen:
Wartet, bis ein bestimmter Host online ist (bestimmt durch Ping), bis ein bestimmter Befehl ausgeführt wird.
Beispiel:
$ ./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]:~#
Alternativen:
until-success ping -c 1 1.2.3.4; ssh [email protected]
Wiederholen Sie den jeweiligen Befehl, bis er fehlschlägt – führen Sie ihn immer mindestens einmal aus.
Beispiel:
./until-error ssh example.com -l root -i ~/.ssh/example.com.key
Triviale (ba)sh-Alternativen:
Wartet, bis ein bestimmter Host ausgefallen ist
Beispiel:
$ ./when-down 1.2.3.4 echo "down"
Waiting for 1.2.3.4 to get down...
down
Alternativen:
until-error ping -c 1 -W 1 1.2.3.4; echo "down"
Identifizieren Sie die Shell, unter der wir laufen.
Zum Beispiel:
$ which-shell
dash
Bestehende Alternativen:
ls -l /bin/sh
Führen Sie einen Befehl über die Erstellung einer temporären Sperrdatei aus, es sei denn, es wird bereits eine Kopie dieses Befehls ausgeführt.
Zum Beispiel:
with-lock rsync ...
Der Sperrdateiname basiert auf dem SHA1-Hash des auszuführenden Befehls und der aktuellen Benutzer-ID.
Bestehende Alternativen:
Bitte melden Sie alle Probleme/Vorschläge über das Github-Repository:
Steve Kemp [email protected]