Este repositório contém uma pequena coleção de scripts que podem ser úteis para administradores de sistemas. Eu mesmo montei tudo para centralizar as pequenas ferramentas que considero úteis e parece ser popular.
Eu costumava solicitar a inclusão de novas ferramentas, mas aos poucos fui percebendo que “menos é mais”. Adoro a ideia de administradores de sistemas, desenvolvedores e outras pessoas criarem seus próprios kits de ferramentas, mas também acho que as pessoas enviam coisas cujo apelo simplesmente não entendo.
Faz sentido que as ferramentas pessoais sejam muito pessoais, mas significa que a rejeição é quase sempre o comportamento padrão e isso me faz sentir mal.
Em vez de adicionar coisas aqui, considere este repositório uma pequena coleção de coisas que eu uso, e se você quiser usar alguns/todos os utilitários para seu próprio uso, faça-o. Caso contrário, eu o encorajaria fortemente a considerar quais ferramentas tornariam sua vida diária mais útil e então coletá-las, documentá- las e publicá-las você mesmo.
Resumindo, o valor aqui é a ideia de coletar os utilitários mais comuns e torná-los fáceis de instalar e atualizar a partir de uma fonte central. Não as ferramentas específicas em si.
Existe um repositório substituto que ainda está aberto e onde novas adições podem ser feitas com mais liberdade:
Mostre há quanto tempo um arquivo/diretório foi modificado de uma forma legível por humanos.
Exemplo:
$ ./ago /etc/passwd
/etc/passwd 15 weeks ago
Alternativas:
stat
e ls
mostram idades, mas não de uma forma legível por humanos. Execute um comando, ocultando STDOUT e STDERR se for concluído com êxito.
Exemplo:
./chronic cp /etc/passwd /tmp/not/found
Isso foi projetado para ser usado em cron-jobs, onde a saída geralmente é ignorada em caso de sucesso.
Isto foi escrito por Joey Hess e faz parte do moreutils.
Dado um conjunto de intervalos CIDR, produza os IPs individuais no(s) intervalo(s).
Exemplo:
$ ./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
..
Remova espaços em branco estranhos das linhas e remova totalmente as linhas vazias.
Exemplo:
$ echo -e "Test1n f nnTest2nnnn" | ./collapse
Test1
f
Test2
Alternativas:
tr
Relatório sobre arquivos duplicados, por meio de um hash SHA1 do conteúdo, de forma recursiva.
Exemplo:
$ dupes
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/refs/heads/master
./.git/refs/remotes/origin/master
Alternativas:
Indica, via código de retorno, se determinado diretório está vazio ou não.
Exemplo:
if empty-dir /etc; then echo "We're broken" ; fi
Expanda um endereço IPv6 abreviado/compactado para o formato completo.
Exemplo:
./expand-ipv6 fe80::1 2001:41c8:10b:103::111
fe80:0000:0000:0000:0000:0000:0001
2001:41c8:010b:0103:0000:0000:0111
Alternativas:
sipcalc
Um script simples para enviar um conjunto consistente de métricas e valores para uma instância remota de grafite.
As métricas podem ser estendidas através de pequenos "plugins", que nada mais são do que scripts shell/perl/ruby/python em um diretório específico.
Exemplo:
graphite_send -v
NOTA Algumas métricas só serão enviadas se o usuário invocador for root.
Alternativas
Obtenha endereços IP facilmente, sejam todos IPs, todos aqueles que são IPv4/IPv6 ou aqueles de um dispositivo. Projetado principalmente para scripts.
Exemplo:
$ ./ips -4
lo 127.0.0.1
eth0 80.68.84.102
eth0 80.68.84.104
Ou para ver todos os endereços IPv6 na eth0:
$ ipaddr -6 -d eth0
eth0 2001:41c8:10b:102::10
eth0 fe80::216:3eff:fe08:16a4
NOTA Requer compilação via make build
.
Alternativas:
ip -[46] addr show
ifconfig -a
De maneira semelhante a true
e false
o comando maybe
sai com um código de status zero ou um, dependendo de um número aleatório.
Pode ser útil em scripts que precisam testar falhas ou que se beneficiam da aleatoriedade:
Exemplo:
maybe && echo "I pass"
maybe || echo "I fail"
Faça ping em um host, independentemente de ser um host IPv6 ou IPv4.
Exemplo:
$ 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
Por conveniência você também pode especificar URIs como argumentos, por exemplo:
$ 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
Requisitos:
Net::DNS
.ping
+ ping6
. Se o host atual for um escravo MySQL, este script testará se a replicação escrava ainda está funcionando.
A replicação é considerada OK se as três condições a seguir forem verdadeiras:
Exemplo:
# ./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
..
O script sai silenciosamente se tudo estiver bem, a menos que você adicione " --verbose
":
# ./mysql-slave-check -v
The slave is running, successfully.
Replication lag: 0 seconds
Requisitos:
Um servidor HTTP Python simples, que foi atualizado para permitir a ligação a endereços IP arbitrários, especificamente para permitir a ligação ao host local.
Exemplo:
$ ./pyhttpd 127.0.0.1:8080
Serving HTTP on 127.0.0.1 port 8080 ...
ou
$ ./pyhttpd 8080
Serving HTTP on 0.0.0.0 port 8080 ...
Gere uma única senha aleatória via /dev/urandom
.
Exemplo:
$ ./randpass
cT3j7Zp6
$ ./randpass -n 10
ulHrNvYLaa
$ ./randpass -n 20 -f
oe[d7+e.{Uw=L'RO~[]{
(A adição de "-f" usa o alfabeto completo de símbolos possíveis, caso contrário, apenas valores alfanuméricos são mostrados. "-n" define o comprimento da senha gerada.)
Alternativas existentes:
Mostra a nova saída desde a leitura anterior de um arquivo. Isso é útil para acompanhar as atualizações do arquivo de log.
Exemplo:
$ ./since /var/log/messages >/dev/null
$ logger "testing the log"
$ ./since /var/log/messages
Apr 20 11:24:37 precious skx: testing the log
Alternativas existentes:
Mostre os tipos de autenticação apresentados por um servidor SSH remoto.
Exemplo:
$ ./ssh-auth-types precious
publickey password
$ ./ssh-auth-types ssh.example.com
publickey
Teste se as conexões ssh
com uma lista de hosts serão bem-sucedidas, testando cada uma em ordem.
Exemplo:
$ ./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
O formato do arquivo de entrada é:
[user@]hostname1[:port]
[user@]hostname2[:port]
..
Durma por um período de tempo aleatório, limitado pelo valor máximo fornecido. (O padrão é 5 minutos).
Exemplo:
$ ./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
Alternativas existentes:
Relate a data e o número de dias até que o certificado SSL fornecido expire. Vários nomes de domínio podem ser aceitos e cada um é testado por vez.
A saída padrão é "ruído", mas você pode adicionar "-d" para simplificar isso ao nome de domínio e ao número de dias restantes no certificado.
Exemplo:
./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
O tempo limite permite que você execute um comando que será eliminado após um determinado número de segundos.
Exemplo:
# 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
Repita o comando específico até obter sucesso - execute pelo menos uma vez sempre.
Exemplo:
./until-success ssh example.com -l root -i ~/.ssh/example.com.key
Alternativas triviais (ba)sh:
Espera até que um determinado host esteja online, determinado pelo ping, até executar um determinado comando.
Exemplo:
$ ./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]:~#
Alternativas:
until-success ping -c 1 1.2.3.4; ssh [email protected]
Repita o comando específico até que ele falhe - execute pelo menos uma vez sempre.
Exemplo:
./until-error ssh example.com -l root -i ~/.ssh/example.com.key
Alternativas triviais (ba)sh:
Espera até que um determinado host esteja inativo
Exemplo:
$ ./when-down 1.2.3.4 echo "down"
Waiting for 1.2.3.4 to get down...
down
Alternativas:
until-error ping -c 1 -W 1 1.2.3.4; echo "down"
Identifique o shell sob o qual estamos executando.
Por exemplo:
$ which-shell
dash
Alternativas existentes:
ls -l /bin/sh
Execute um comando, a menos que uma cópia existente desse comando já esteja em execução, por meio da criação de um arquivo de bloqueio temporário.
Por exemplo:
with-lock rsync ...
O nome do arquivo de bloqueio é baseado no hash SHA1 do comando a ser executado e no ID do usuário atual.
Alternativas existentes:
Por favor, relate qualquer problema/sugestão através do repositório do github:
Steve Kemp [email protected]