글타래: GeekTool - 책상 화면 위의 정보 표시자
GeekTool은 preference pane으로 책상 위의 화면에 정보들을 전달해서 뿌려주는 기능이 있는데, 이것은 아무래도 Mac OS X의 Dashboard와 그 성격이 닮았습니다.
다음은 GeektTool에서 표시될 수 있는 세 가지 종류의 정보 형태들입니다:
* Log 파일 - log 파일을 선택해서 (보통 /var/log 디렉토리에 위치합니다.) 해당 파일의 내용을 화면 위에 실시간으로 뿌려 줍니다. 보통 여기에 사용되는 파일들로는 /var/log/system.log, /Library/Logs/501/console.log, 그리고 /var/log/httpd/* 등이 있습니다.
* 명령어 - 실행될 Unix의 shell 명령어를 지정해 주면, 그 결과를 화면 위에 표시해 줍니다. 또한, 여기에는 재실행 시간(초)도 함께 입력해 주어야 합니다. 자주 쓰이는 명령들로는 uptime(컴퓨터 가동 시간과 사용 부하 표시), df(디스크 빈 용량 표시), netstat(네트웍 상태 표시), vm_stat(Mach 커널의 가상 메모리 사용 현황), ifconfig(네크웍 인터페이스의 현재 설정 상태 표시) 등이 사용될 수 있겠으며 sed 혹은 awk 스크립트 명령을 사용해 그 결과를 간추려서 보이게 할 수도 있습니다.
shell 명령어 사용 예:
- CPU 사용량
top -cd -l2 | grep 'CPU usage' | cut -c 33-88 | tail -1
- 가장 많이 CPU를 소모하고 있는 작업
top=$(ps -acx -o %cpu,command | sort -rin | head -n1);
echo "CPU-intensive: $top"
- 시스템 메모리 사용량과 가상 메모리 크기
sm=$(top -ocpu -Otime -R -l1 | grep 'PhysMem' | cut -c 11-75);
vm=$(top -ocpu -Otime -R -l1 | grep 'VM' | cut -c 5-9);
echo "SM Usage: $sm VM Size: $vm"
- Swap 파일들의 전체 크기
size=$(/usr/bin/du -hc /var/vm/swap* | grep 'total' | awk {'print $1'});
echo "Total size of swap files: $size"
- Page out된 메모리 용량
po=$(vm_stat | grep 'Pageouts' | awk '{print $2"*4096/1048576"}' | bc);
echo "Size of Page outs: $po MB"
- 현재 네트웍 접속 상태
netstat -na -f inet | grep -i established | sort +4
- (loopback 주소들을 제외한) 모든 내부 IP 주소들
ifconfig | grep netmask | grep -v 127.0.0.1 | awk {'print $2'}
- 외부 인터넷 IP 주소 (3가지 방법)
ip=$(curl -s whatsmyip.islayer.net | awk {'print $0'});
echo "External IP: $ip"
ip=$(curl -s http://www.whatismyip.com/automation/n09230945.asp);
echo "External IP: $ip"
echo External IP: `curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'`
- 내부적으로 마운트 된 디스크들의 빈 공간
df -hl
- 달력
echo `date "+%d %B %Y"` | awk \
'{ print substr(" ",1,(21-length($0))/2) $0; }'; \
cal | awk '{ getline; print " Mo Tu We Th Fr Sa Su"; getline; \
if (substr($0,1,2) == " 1") print " 1 "; \
do { prevline=$0; if (getline == 0) exit; print " "\
substr(prevline,4,17) " " substr($0,1,2) " "; } while (1) }' | \
awk -v cday=`date "+%d"` '{ fill=(int(cday)>9?"":" "); \
a=$0; sub(" "fill int(cday)" ","["fill int(cday)"]",a); print a }'
netstat -na -f inet | grep -i established | sort +4
- 과거 오늘의 사건
grep -h "^$(date '+%m/%d')" /usr/share/calendar/calendar.{holiday,history,computer}|cut -f2
- Mail에 등록된 계정들 중에서 아직 읽지 않은 전자우편들의 갯수
echo 'tell application "Mail" to return unread count of mailboxes of accounts' | \
osascript | perl -e "@a=split ',',<STDIN>; foreach (@a) {\$n += \$_}; \
print \"Unread Mails: \$n\n\";"
* 그림 - 인터넷 위에 떠 있는 그림들을 URL, 그림틀 형태, 투명도 등의 설정들과 함께 화면 위에 띄울 수도 있답니다.
이것들과 더불어서, 표시 정보 창을 다른 화면들보다 항상 앞에 표시해 주게끔 할 수도 있고, 이 창은 마우스 클릭을 방해하지도 않습니다.
참고로, 표시 정보들은 설정 내용과 사용 목적에 따라 따로 묶어서 분류 관리할 수도 있으며, 메뉴 막대에 올려놓고 묶음별 표시 전환이 가능합니다. (이 메뉴 기능 사용 시, 프로그램을 삭제할 때는 꼭 따라오는 uninstaller를 사용해야 깨끗하게 지우실 수 있답니다.)
GeekTool 사용 그림. (그림을 누르면 더 큰 그림을 보실 수 있습니다)
현재 GeekTool의 최신 버전은 2.1이지만 갱신된 지도 오래되었고, Tiger에선 다음과 같은 오류를 나타내는 log를 보여주며, 결과적으로 시스템의 성능을 저하시키는 부작용 보이고 있습니다:
GeekTool: The function ..... is obsolete and will be removed in a Tiger update. Unfortunately, this app, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.
이 문제는 아직 정식적으로는 고쳐지질 않았으나, 다른 사용자가 공개된 GeekTool의 소스 코드를 수정한 GeekTool 2.1jaw1(DB)를 배포하고 있답니다. 이것은 위에 나타났던, Tiger에서 더는 지원하지 않는 함수를 사용하면서 시스템에 부하를 주었던 문제를 수정했으며, 또한 log 창 표시 속도와 CPU 사용량을 절약하는 기능의 개선이 있었다고 합니다. 차기 정식 버전이 발표되기 전까지는 안심하고 쓰실 수 있을듯 합니다.