此儲存庫包含一小部分可能對系統管理員有用的腳本。我自己把它集中起來,把我覺得有用的小工具集中起來,看起來很受歡迎。
我曾經要求加入新工具,但慢慢意識到「少即是多」。我喜歡系統管理員、開發人員和其他人建立自己的工具包的想法,但也發現人們提交的東西我只是不明白其吸引力。
個人工具非常個人化,這是有道理的,但這確實意味著拒絕幾乎總是默認行為,這讓我感覺很糟糕。
不要在此處添加內容,請將此存儲庫視為我使用的一小部分內容的集合,如果您想將部分/全部實用程式用於您自己的使用,請這樣做。如果沒有,那麼我強烈鼓勵您考慮哪些工具可以讓您的日常生活變得更有用,然後收集它們、記錄它們並自行發布它們。
簡而言之,這裡的價值在於收集最常用的實用程式並使其易於從一個中央來源安裝和更新。不是特定工具本身。
有一個仍然開放的替換存儲庫,可以更自由地添加新內容:
顯示檔案/目錄多久以前以人類可讀的方式被修改。
例子:
$ ./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 位址,可以是所有 IP、所有 IPv4/IPv6 或裝置的 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"
Ping 主機,無論它是 IPv6 還是 IPv4 主機。
例子:
$ 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 從機,此腳本將測試從機複製是否仍在運作。
如果滿足以下三個條件,則認為複製正常:
例子:
# ./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 位址,特別是允許您綁定到 localhost。
例子:
$ ./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
重複特定命令直到成功 - 始終至少運行一次。
例子:
./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]
重複特定命令直到失敗 - 始終至少運行一次。
例子:
./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 ...
鎖定檔案名稱是基於要執行的命令的 SHA1 雜湊值和目前使用者 ID。
現有替代方案:
請透過 github 儲存庫報告任何問題/建議:
史蒂夫·坎普 [email protected]