이 저장소에는 시스템 관리자에게 유용할 수 있는 작은 스크립트 모음이 포함되어 있습니다. 제가 유용하다고 생각하는 작은 도구들을 중앙집중화하기 위해 직접 정리했는데, 인기가 많은 것 같습니다.
나는 새로운 도구를 포함시켜 달라고 간청하곤 했지만, "적은 것이 더 좋다"는 사실을 천천히 깨닫게 되었습니다. 저는 시스템 관리자, 개발자 및 기타 사람들이 자신만의 툴킷을 구축한다는 아이디어를 좋아 하지만, 사람들이 제가 이해하지 못하는 것들을 제출한다는 사실도 알고 있습니다.
개인 도구가 매우 개인적인 것이라는 점은 이해가 되지만 거절이 거의 항상 기본 행동이고 그로 인해 기분이 나빠진다는 의미입니다.
여기에 항목을 추가하는 대신 이 저장소를 제가 사용하는 항목의 작은 모음으로 간주하고, 유틸리티의 일부/전체를 직접 사용하려면 그렇게 하십시오. 그렇지 않다면 어떤 도구가 일상 생활을 더 유용하게 만들 수 있는지 생각해 보고 이를 수집하고 문서화 하여 직접 출판하시기를 강력히 권합니다.
간단히 말해서 여기서의 가치는 가장 일반적인 유틸리티를 수집하고 이를 하나의 중앙 소스에서 쉽게 설치하고 업데이트할 수 있도록 한다는 아이디어 입니다. 특정 도구 자체가 아닙니다.
아직 열려 있고 더 자유롭게 추가할 수 있는 대체 저장소가 있습니다.
사람이 읽을 수 있는 방식으로 파일/디렉토리가 얼마나 오래 전에 수정되었는지 표시합니다.
예:
$ ./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
일관된 측정항목 및 값 세트를 원격 Graphite 인스턴스로 보내는 간단한 스크립트입니다.
측정항목은 특정 디렉토리의 shell/perl/ruby/python 스크립트에 불과한 작은 "플러그인"을 통해 확장될 수 있습니다.
예:
graphite_send -v
참고 일부 메트릭은 호출하는 사용자가 루트인 경우에만 전송됩니다.
대안
모든 IP, 모든 IPv4/IPv6 IP 또는 장치용 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"
IPv6 또는 IPv4 호스트인지 여부에 관계없이 호스트를 ping합니다.
예:
$ 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
요구사항:
임의의 IP 주소에 바인딩할 수 있도록, 특히 로컬 호스트에 바인딩할 수 있도록 업데이트된 간단한 Python HTTP 서버입니다.
예:
$ ./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
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
간단한 (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 ...
lockfile-name은 실행할 명령의 SHA1 해시와 현재 User-ID를 기반으로 합니다.
기존 대안:
문제/제안 사항이 있으면 Github 저장소를 통해 보고해 주세요.
스티브 켐프 [email protected]