쉘 소스 분석좀 부탁드리겠습니다 ^^
글쓴이: slayermen / 작성시간: 월, 2008/05/26 - 11:01오후
#!/bin/bash
CUID=500
CHECK=`cat /etc/passwd | sed -e 's/::/:nothing:/g' | sed -e 's/ //g' | sed -e 's
/:/ /g' | awk '{print $6}'`
if [ "$CHECK" != "" ];
then
for i in $CHECK;
do
UIDS=`cat /etc/passwd | grep $i | sed -e 's/::/:nothing:/g' | sed -e 's/
//g' | sed -e 's/:/ /g' | awk '{print $3}'`
UIDS=`echo $UIDS | sed -e 's/ /00000000/g'`
if [ "$UIDS" -ge "$CUID" ] && [ "$UIDS" -lt 1000000 ]; then
du -sh $i >> /tmp/du_result.txt
fi
done
echo "space bar를 누르면 다음페이지를, q를 누르면 종료가 됩니다."
echo ""
cat /tmp/du_result.txt | sed -e 's/\/home\///g' | less
#rm -rf /tmp/du_result.txt
fi
코드는 위와 같습니다.. 시스템관리자로서 사용자별로 어느정도의 용량을 사용하고 있는지
체크하는 프로그램인데 ㅡ 가독이 너무 힘들군요..
한줄한줄 어떤식으로 이루어진 프로그램인지 가독좀 부탁드립니다 ^^
Forums:
#!/bin/bash CUID=500 CHECK=
이해가 안가는 부분이, 유저 아이디를 구할 때 awk print를 했기 때문에 어차피 공백이 없지 않나요?;
지금 윈도우라 확인이 안되네요 '~';;;
간단히
1. /etc/passwd 파일 각 줄의 6번째 필드(각 사용자의 홈디렉토리 path)를 뽑아서 나열하여 CHECK 변수에 저장한다.
2. CHECK 변수가 빈 문자열이 아니면, CHECK 변수에 나열된 홈디렉토리를 사용하는 UID들(/etc/passwd 파일 각 줄의 3번째 필드들)을 알아내어 UIDS 변수에 저장한다.
3. UIDS의 값이 500 이상이면 그 홈디렉토리의 용량을 체크하여 /tmp/du_result.txt에 저장한다.
4. CHECK 변수에 나열된 홈디렉토리 각각에 대해 모두 다 용량 체크한 후, 결과를 한꺼번에 출력한다.
근데 썩 잘짜인 로직이 아닌것 같네요. 저라면 약간 달리 접근해서 짜겠습니다. 기왕이면 perl이나 python을 써서.
--
http://dongsupark.de/
--
http://dongsupark.de/
파이썬으로 잠깐 만들어봤습니다.
뭐 대충 만들어봤어요 -_-;;
-------------------------------------------------------------------------------------------------------
Life ... http://iz4u.net/blog/
------------------------------------------------------------------------------------------------
Life is in 다즐링
Perl one-liner
저도 간단한 것들은 shell script를 쓰기도 하지만...
위에서 처럼 저렇게 shell 스크립트에서 외부명령의 결과를 가지고 조작을 해야할 일이 많으면
그냥 Perl 씁니다.