Этот репозиторий содержит небольшую коллекцию скриптов, которые могут быть полезны системным администраторам. Я собрал его сам, чтобы централизовать небольшие инструменты, которые считаю полезными, и, кажется, он популярен.
Раньше я просил включить новые инструменты, но постепенно пришел к выводу, что «меньше значит лучше». Мне нравится идея, что системные администраторы, разработчики и другие люди создают свои собственные наборы инструментов, но я также обнаруживаю, что люди присылают вещи, привлекательность которых я просто не понимаю.
То, что личные инструменты очень личные, имеет смысл, но это означает, что отказ почти всегда является поведением по умолчанию, и это заставляет меня чувствовать себя плохо.
Вместо того, чтобы добавлять что-то сюда, считайте этот репозиторий небольшой коллекцией вещей, которые я использую, и если вы хотите использовать некоторые/все утилиты для собственного использования, сделайте это. Если нет, то я настоятельно рекомендую вам подумать, какие инструменты сделают вашу повседневную жизнь более полезной, а затем собрать их, задокументировать и опубликовать самостоятельно.
Короче говоря, ценностью здесь является идея собрать наиболее распространенные утилиты и упростить их установку и обновление из одного центрального источника. А не сами конкретные инструменты.
Существует запасной репозиторий, который все еще открыт, и в который новые дополнения можно вносить более свободно:
Покажите, как давно файл/каталог был изменен в удобочитаемой форме.
Пример:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
Альтернативы:
stat
и ls
показывают возраст, но не в удобочитаемой форме. Запустите команду, скрывая STDOUT и STDERR, если она завершится успешно.
Пример:
./chronic cp /etc/passwd /tmp/not/found
Это предназначено для использования в заданиях cron, где в случае успеха выходные данные обычно игнорируются.
Это было написано Джоуи Хессом и является частью 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
Простой скрипт для отправки согласованного набора метрик и значений в удаленный экземпляр Graphite.
Метрики могут быть расширены с помощью небольших «плагинов», которые представляют собой не что иное, как сценарии оболочки/perl/ruby/python в определенном каталоге.
Пример:
graphite_send -v
ПРИМЕЧАНИЕ. Некоторые метрики будут отправлены только в том случае, если вызывающий пользователь является пользователем root.
Альтернативы
Легко получайте 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
Требования:
Простой HTTP-сервер Python, который был обновлен, чтобы позволить ему привязываться к произвольным 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
Тайм-аут позволяет вам запустить команду, которая будет уничтожена через заданное количество секунд.
Пример:
# 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
Тривиальные (ба)ш альтернативы:
Ожидает, пока данный хост не окажется в сети, что определяется пингом, до выполнения заданной команды.
Пример:
$ ./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 выполняемой команды и текущем идентификаторе пользователя.
Существующие альтернативы:
Пожалуйста, сообщайте о любых проблемах/предложениях через репозиторий github:
Стив Кемп [email protected]