该存储库包含一小部分可能对系统管理员有用的脚本。我自己把它集中起来,把我觉得有用的小工具集中起来,看起来很受欢迎。
我曾经请求加入新工具,但慢慢意识到“少即是多”。我喜欢系统管理员、开发人员和其他人构建自己的工具包的想法,但也发现人们提交的东西我只是不明白其吸引力。
个人工具非常个人化,这是有道理的,但这确实意味着拒绝几乎总是默认行为,这让我感觉很糟糕。
不要在此处添加内容,请将此存储库视为我使用的一小部分内容的集合,如果您想将部分/全部实用程序用于您自己的使用,请这样做。如果没有,那么我强烈鼓励您考虑哪些工具可以让您的日常生活变得更有用,然后收集它们、记录它们并自己发布它们。
简而言之,这里的价值在于收集最常用的实用程序并使其易于从一个中央源安装和更新。不是特定工具本身。
有一个仍然开放的替换存储库,可以更自由地添加新内容:
显示文件/目录多久以前以人类可读的方式被修改。
例子:
$ ./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]