يحتوي هذا المستودع على مجموعة صغيرة من البرامج النصية التي قد تكون مفيدة لمسؤولي النظام. لقد قمت بتجميعها بنفسي لتجميع الأدوات الصغيرة التي أجدها مفيدة، ويبدو أنها تحظى بشعبية كبيرة.
لقد كنت أطلب إدراج أدوات جديدة، ولكنني بدأت أدرك ببطء أن "الأقل هو الأكثر". تعجبني فكرة قيام مسؤولي النظام والمطورين وغيرهم من الأشخاص ببناء مجموعات الأدوات الخاصة بهم، ولكنني أجد أيضًا أن الأشخاص يقدمون أشياء لا أفهم مدى جاذبيتها.
من المنطقي أن تكون الأدوات الشخصية شخصية للغاية، ولكن هذا يعني أن الرفض هو السلوك الافتراضي دائمًا تقريبًا وهذا ما يجعلني أشعر بالسوء.
بدلاً من إضافة أشياء هنا، اعتبر هذا المستودع مجموعة صغيرة من الأشياء التي أستخدمها، وإذا كنت تريد استخدام بعض/كل الأدوات المساعدة لاستخدامك الخاص، فيرجى القيام بذلك. إذا لم يكن الأمر كذلك، فأنا أشجعك بشدة على التفكير في الأدوات التي من شأنها أن تجعل حياتك اليومية أكثر فائدة ومن ثم جمعها وتوثيقها ونشرها بنفسك.
باختصار، القيمة هنا هي فكرة جمع الأدوات المساعدة الأكثر شيوعًا لديك وجعلها سهلة التثبيت والتحديث من مصدر مركزي واحد. وليس الأدوات المحددة نفسها.
يوجد مستودع بديل لا يزال مفتوحًا، وأي الإضافات الجديدة يمكن إجراؤها بحرية أكبر:
أظهر المدة التي مضت منذ تم تعديل الملف/الدليل بطريقة يمكن للإنسان قراءتها.
مثال:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
البدائل:
stat
و ls
الأعمار، ولكن ليس بطريقة يمكن للإنسان قراءتها. قم بتشغيل أمر، وإخفاء STDOUT وSTDERR إذا اكتمل بنجاح.
مثال:
./chronic cp /etc/passwd /tmp/not/found
تم تصميم هذا لاستخدامه في وظائف cron، حيث يتم تجاهل المخرجات عمومًا في حالة النجاح.
كتب هذا بواسطة جوي هيس وهو جزء من المزيد من الأدوات.
نظرًا لمجموعة من نطاقات 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
ملاحظة: لن يتم إرسال بعض المقاييس إلا إذا كان المستخدم الذي قام بالاستدعاء هو الجذر.
البدائل
احصل على عناوين 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
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 التعسفية، وعلى وجه التحديد للسماح لك بالربط بالمضيف المحلي.
مثال:
$ ./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 المحددة. يمكن قبول أسماء نطاقات متعددة ويتم اختبار كل منها على حدة.
الإخراج الافتراضي هو "صاخب"، ولكن يمكنك إضافة "-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
يتيح لك Timeout تشغيل أمر سيتم إيقافه بعد عدد معين من الثواني.
مثال:
# 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
بدائل (ب)ش التافهة:
ينتظر حتى يصبح مضيف معين متصلاً بالإنترنت، وهو ما يحدده اختبار الاتصال (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
بدائل (ب)ش التافهة:
ينتظر حتى يتعطل مضيف معين
مثال:
$ ./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 للأمر الذي سيتم تنفيذه ومعرف المستخدم الحالي.
البدائل الموجودة:
الرجاء الإبلاغ عن أي مشكلة/اقتراحات عبر مستودع جيثب:
ستيف كيمب [email protected]