このリポジトリには、システム管理者にとって役立つ可能性のあるスクリプトの小さなコレクションが含まれています。便利だと思った小さなツールを一元化するために自分で組み立てたのですが、好評のようです。
以前は新しいツールの導入を求めていましたが、徐々に「少ないほど良い」と認識するようになりました。私は、システム管理者、開発者、その他の人々が独自のツールキットを構築するというアイデアが大好きですが、一方で、私にはその魅力が理解できないものを提出する人々もいると感じています。
個人用ツールが非常に個人的なものであることは理解できますが、拒否されることがほとんどの場合デフォルトの動作であることを意味し、それは私を不快にさせます。
ここに何かを追加する代わりに、このリポジトリは私が使用するものの小さなコレクションであると考えてください。ユーティリティの一部またはすべてを自分で使用したい場合は、そうしてください。そうでない場合は、どのようなツールが日常生活をより便利にするかを検討し、それらを収集し、文書化し、ご自身で公開することを強くお勧めします。
つまり、ここでの価値は、最も一般的なユーティリティを収集し、それらを 1 つの中央ソースから簡単にインストールおよび更新できるようにするというアイデアです。特定のツール自体ではありません。
代替リポジトリがまだオープンしており、新しいリポジトリをより自由に追加できます。
ファイル/ディレクトリがどれくらい前に人間が判読できる形式で変更されたかを示します。
例:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
代替案:
stat
とls
どちらも年齢を示しますが、人間が判読できる形式ではありません。 コマンドを実行し、正常に完了した場合は STDOUT と STDERR を非表示にします。
例:
./chronic cp /etc/passwd /tmp/not/found
これは cron ジョブで使用するように設計されており、通常、成功した場合には出力が無視されます。
これは Joey Hess によって書かれ、moreutils の一部です。
CIDR 範囲のセットを指定すると、その範囲内の個々の IP が出力されます。
例:
$ ./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
..
行から無関係な空白を削除し、空行を完全に削除します。
例:
$ echo -e "Test1n f nnTest2nnnn" | ./collapse
Test1
f
Test2
代替案:
tr
コンテンツの SHA1 ハッシュを介して重複ファイルを再帰的にレポートします。
例:
$ dupes
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/refs/heads/master
./.git/refs/remotes/origin/master
代替案:
戻りコードを介して、指定されたディレクトリが空かどうかを示します。
例:
if empty-dir /etc; then echo "We're broken" ; fi
短縮/圧縮された IPv6 アドレスを完全形式に展開します。
例:
./expand-ipv6 fe80::1 2001:41c8:10b:103::111
fe80:0000:0000:0000:0000:0000:0001
2001:41c8:010b:0103:0000:0000:0111
代替案:
sipcalc
一貫したメトリクスと値のセットをリモートのグラファイト インスタンスに送信する単純なスクリプト。
メトリクスは、特定のディレクトリ内のshell/perl/ruby/pythonスクリプトにすぎない小さな「プラグイン」を介して拡張できます。
例:
graphite_send -v
注意一部のメトリクスは、呼び出し元のユーザーが root である場合にのみ送信されます。
代替案
すべての IP、IPv4/IPv6 のすべての IP、またはデバイスの IP アドレスを簡単に取得します。主にスクリプト用に設計されています。
例:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
または、eth0 上のすべての IPv6 アドレスを表示するには:
$ ipaddr -6 -d eth0
eth0 2001:41c8:10b:102::10
eth0 fe80::216:3eff:fe08:16a4
注: make build
によるコンパイルが必要です。
代替案:
ip -[46] addr show
ifconfig -a
true
とfalse
と同様に、 maybe
コマンドは乱数に応じて 0 または 1 のステータス コードで終了します。
これは、失敗をテストする必要があるスクリプトや、ランダム性の恩恵を受けるスクリプトで役立ちます。
例:
maybe && echo "I pass"
maybe || echo "I fail"
IPv6 ホストか IPv4 ホストかに関係なく、ホストに ping を実行します。
例:
$ 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
便宜上、次のように URI を引数として指定することもできます。
$ 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
要件:
Net::DNS
perl モジュール。ping
+ ping6
バイナリ。 現在のホストが MySQL スレーブである場合、このスクリプトはスレーブ レプリケーションがまだ動作しているかどうかをテストします。
次の 3 つの条件が当てはまる場合、レプリケーションは正常であるとみなされます。
例:
# ./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
..
「 --verbose
」を追加しない限り、すべてが正常であればスクリプトはサイレントに終了します。
# ./mysql-slave-check -v
The slave is running, successfully.
Replication lag: 0 seconds
要件:
シンプルな Python HTTP サーバー。任意の IP アドレスにバインドできるように、特にローカルホストにバインドできるように更新されました。
例:
$ ./pyhttpd 127.0.0.1:8080
Serving HTTP on 127.0.0.1 port 8080 ...
または
$ ./pyhttpd 8080
Serving HTTP on 0.0.0.0 port 8080 ...
/dev/urandom
経由で単一のランダムなパスワードを生成します。
例:
$ ./randpass
cT3j7Zp6
$ ./randpass -n 10
ulHrNvYLaa
$ ./randpass -n 20 -f
oe[d7+e.{Uw=L'RO~[]{
(「-f」を追加すると、使用可能な記号の完全なアルファベットが使用されます。それ以外の場合は、英数字のみが表示されます。「-n」は、生成されるパスワードの長さを設定します。)
既存の代替案:
以前にファイルを読み取ってからの新しい出力を表示します。これは、ログファイルの更新を追跡するのに役立ちます。
例:
$ ./since /var/log/messages >/dev/null
$ logger "testing the log"
$ ./since /var/log/messages
Apr 20 11:24:37 precious skx: testing the log
既存の代替案:
リモート SSH サーバーによって提示される認証タイプを表示します。
例:
$ ./ssh-auth-types precious
publickey password
$ ./ssh-auth-types ssh.example.com
publickey
ホストのリストへのssh
接続が成功するかどうかを、それぞれを順番にテストしてテストします。
例:
$ ./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
入力ファイルの形式は次のとおりです。
[user@]hostname1[:port]
[user@]hostname2[:port]
..
指定された最大値によって制限された、ランダムな時間スリープします。 (デフォルトは 5 分です)。
例:
$ ./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
既存の代替案:
指定された SSL 証明書の有効期限が切れるまでの日付と日数を報告します。複数のドメイン名を受け入れることができ、それぞれが順番にテストされます。
デフォルトの出力は「noisy」ですが、ドメイン名と証明書の残り日数に「-d」を追加して簡略化することもできます。
例:
./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
タイムアウトを使用すると、指定した秒数が経過すると強制終了されるコマンドを実行できます。
例:
# 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
特定のコマンドを成功するまで繰り返します。常に少なくとも 1 回実行します。
例:
./until-success ssh example.com -l root -i ~/.ssh/example.com.key
簡単な (ba)sh の代替案:
指定されたコマンドが実行されるまで、ping によって特定のホストがオンラインになるまで待機します。
例:
$ ./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]:~#
代替案:
until-success ping -c 1 1.2.3.4; ssh [email protected]
特定のコマンドを失敗するまで繰り返します。常に少なくとも 1 回実行します。
例:
./until-error ssh example.com -l root -i ~/.ssh/example.com.key
簡単な (ba)sh の代替案:
指定されたホストがダウンするまで待機します
例:
$ ./when-down 1.2.3.4 echo "down"
Waiting for 1.2.3.4 to get down...
down
代替案:
until-error ping -c 1 -W 1 1.2.3.4; echo "down"
実行しているシェルを特定します。
例えば:
$ which-shell
dash
既存の代替案:
ls -l /bin/sh
コマンドの既存のコピーがすでに実行されている場合を除き、一時ロックファイルを作成してコマンドを実行します。
例えば:
with-lock rsync ...
lockfile-name は、実行されるコマンドの SHA1 ハッシュと現在のユーザー ID に基づいています。
既存の代替案:
問題や提案がある場合は、github リポジトリ経由で報告してください。
スティーブ・ケンプ [email protected]