พื้นที่เก็บข้อมูลนี้มีคอลเลกชันเล็กๆ ของสคริปต์ที่อาจเป็นประโยชน์กับผู้ดูแลระบบ ฉันรวบรวมมันเข้าด้วยกันเพื่อรวมเครื่องมือเล็กๆ ที่ฉันพบว่ามีประโยชน์ไว้ที่ศูนย์กลาง และดูเหมือนว่าจะเป็นที่นิยม
ฉันเคยเรียกร้องให้มีการรวมเครื่องมือใหม่ๆ เข้ามา แต่ก็ค่อยๆ ตระหนักได้ว่า "น้อยแต่มาก" ฉัน ชอบ แนวคิดของผู้ดูแลระบบ นักพัฒนา และบุคคลอื่นที่สร้างชุดเครื่องมือของตนเอง แต่ยังพบว่าผู้คนส่งสิ่งที่ฉันไม่เข้าใจถึงความน่าดึงดูดใจ
มันสมเหตุสมผลแล้วที่เครื่องมือส่วนตัวเป็นเรื่องส่วนตัวมาก แต่ก็หมายความว่าการปฏิเสธมักจะเป็นพฤติกรรมเริ่มต้นเสมอและนั่นทำให้ฉันรู้สึกแย่
แทนที่จะเพิ่มสิ่งต่าง ๆ ที่นี่ ให้พิจารณาว่าพื้นที่เก็บข้อมูลนี้เป็นคอลเลกชันเล็กๆ น้อยๆ ที่ฉันใช้ และหากคุณต้องการนำยูทิลิตี้บางส่วน/ทั้งหมดไปใช้ของคุณเอง โปรดดำเนินการดังกล่าว ถ้าไม่เช่นนั้น ฉัน ขอ แนะนำให้คุณพิจารณาว่าเครื่องมือใดที่จะทำให้ชีวิตประจำวันของคุณมีประโยชน์มากขึ้น จากนั้นจึงรวบรวม จัด ทำเอกสาร และเผยแพร่ด้วยตนเอง
กล่าวโดยสรุป ค่าที่นี่คือ แนวคิด ในการรวบรวมยูทิลิตี้ทั่วไปของคุณ และทำให้ติดตั้งและอัปเดตได้ง่ายจากแหล่งกลางแหล่งเดียว ไม่ใช่เครื่องมือเฉพาะของตัวเอง
มีที่เก็บทดแทนซึ่งยังคงเปิดอยู่ และส่วนใดที่สามารถเพิ่มใหม่ได้อย่างอิสระมากขึ้น:
แสดงว่าไฟล์/ไดเร็กทอรีได้รับการแก้ไขมานานแค่ไหนแล้วในแบบที่มนุษย์สามารถอ่านได้
ตัวอย่าง:
$ ./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
สคริปต์ง่ายๆ สำหรับส่งชุดเมตริกและค่าที่สอดคล้องกันไปยังอินสแตนซ์กราไฟท์ระยะไกล
หน่วยวัดอาจขยายผ่าน "ปลั๊กอิน" ขนาดเล็ก ซึ่งไม่มีอะไรมากไปกว่าสคริปต์เชลล์/perl/ruby/python ในไดเร็กทอรีเฉพาะ
ตัวอย่าง:
graphite_send -v
หมายเหตุ เมตริกบางตัวจะถูกส่งเฉพาะในกรณีที่ผู้ใช้ที่เรียกใช้เป็นรูท
ทางเลือก
รับที่อยู่ IP ได้อย่างง่ายดาย ไม่ว่าจะเป็น IP ทั้งหมด ทั้งหมดที่เป็น IPv4/IPv6 หรือที่อยู่สำหรับอุปกรณ์ ออกแบบมาเพื่อการเขียนสคริปต์เป็นหลัก
ตัวอย่าง:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
หรือหากต้องการดูที่อยู่ IPv6 ทั้งหมดบน eth0:
$ 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
ออกด้วยรหัสสถานะเป็นศูนย์หรือหนึ่ง ขึ้นอยู่กับตัวเลขสุ่ม
มันจะมีประโยชน์ในสคริปต์ที่ต้องทดสอบความล้มเหลวหรือได้รับประโยชน์จากการสุ่ม:
ตัวอย่าง:
maybe && echo "I pass"
maybe || echo "I fail"
ปิงโฮสต์ ไม่ว่าจะเป็นโฮสต์ 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
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]