스 크 립 트 작성 유 틸 리 티
상위 10 명의 디스크 공간 사용 자 를 보고 11 줄 까지 sed 는 목록 의 나머지 부분 을 삭제 한 다음 목록 의 줄 마다 번 호 를 줍 니 다.줄 번호 와 디스크 공간 텍스트 를 같은 줄 에 두 려 면 N 명령 으로 텍스트 줄 을 한 줄 에 합 쳐 야 합 니 다.그 다음 에 gawk 명령 으로 정리 하고 줄 번호 뒤에 콜론 (:) 을 추가 하 며 줄 마다 텍스트 의 출력 줄 에 있 는 필드 에 탭 문 자 를 넣 었 습 니 다.이렇게 해서 10 위 권 의 디스크 공간 사용자 목록 을 정교 하 게 만 들 었 습 니 다.
[root@digitcube-test1 qingyun]# du -Sh /home/*| sort -rn | sed '{11,$D;=}' | sed 'N;s/
/ /' | gawk '{print $1":""\t" $2"\t" $3"
"}'
1: 1020K /home/nexus/sonatype-work/nexus/storage/central/org/springframework/spring-context/2.5.6
2: 1020K /home/nexus/sonatype-work/nexus/storage/central/ant/ant/1.6.5
3: 1012K /home/nexus/sonatype-work/nexus/storage/central/org/springframework/spring-beans/2.5.6
4: 1012K /home/maven/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1
5: 1008K /home/home/hadoop/jstorm/dc_topology/tmp/org/apache/hadoop/hdfs/server/namenode
6: 1008K /home/home/hadoop/hadoop-1.0.4/docs/api/org/apache/hadoop/mapreduce
7: 1008K /home/hadoop/sam/datatask/doubixiyou_1290
8: 1008K /home/hadoop/hadoop-1.0.4/docs/api/org/apache/hadoop/mapreduce
9: 1004K /home/home/hadoop/jstorm/dc_topology/tmp/kafka/log
10: 1000K /home/maven/.m2/repository/org/xerial/snappy/snappy-java/1.0.3.2
2. 날짜 가 추 가 된 10 위 권 의 디스크 공간 사용자 보고 스 크 립 트 를 만 듭 니 다.
[root@digitcube-test1 tmp]# vim file_siz.sh
#!/bin/bash
#Big_User - find big disk space users in various direcotries
#Parameters for Script
#
CHECK_DIRECTORIES="/var/log /home" #direcotries to check
#
######################Main Script###########################
#
DATE=`date +%m%d%y` #Date for report file
exec > space_file_$DATA.rpt
#
#
echo "Top Ten Disk Space Usage" #Report header for whole report
echo "for $CHECK_DIRECTORIES Direcotries"
#
for DIR_CHECK in $CHECK_DIRECTORIES #loop to du directories
do
echo ""
echo "The $DID_CHECK Directory:" #Title header for each direcotry
#
#Create a listing of top ten disk space users
du -S $DIR_CHECK 2>/dev/null|sort -rn|sed '{11,$D;=}'|sed 'N;s/
/ /'|gawk '{printf $1":""\t" $2"\t" $3"
"}'
#
done
exec > /tmp/test.txt
2. 날짜 에 따라 압축 파일 을 만 드 는 스 크 립 트
압축 파일, 스 크 립 트 로 file 읽 기to_backup 에 있 는 모든 디 렉 터 리 나 파일 은 간단 한 read 명령 을 사용 하여 이 파일 의 모든 기록 을 읽 습 니 다.
exec
read FILE_NAME
압축 파일 설정 파일 및 fileto_backup 에서 모든 기록 을 읽 는 데 변 수 를 사 용 했 습 니 다. read 명령 이 설정 파일 에서 읽 을 기록 이 있 는 것 을 발견 하면?변수 에서 종료 상태 코드 0 을 되 돌려 성공 을 표시 합 니 다. while 순환 테스트 조건 으로 file 을 읽 습 니 다.to_백업 의 모든 기록
while [ $? -eq 0 ]
do
....
read FILE_NAME
done
read 명령 이 끝 날 때 까지 0 이 아 닌 상태 코드 를 되 돌려 주면 스 크 립 트 는 while 순환 을 종료 합 니 다.
[root@digitcube-test1 tmp]# cat /home/qingyun/file_to_backup
/home/qingyun/test1
/home/qingyun/test2
/home/qingyun/test3
/home/qingyun/love
[root@digitcube-test1 tmp]# vim Daily_Archive.sh
#
#Set Configuration and Destination File
#
CONFIG_FILE=/home/qingyun/file_to_backup
DESTINATION=/home/qingyun/$FILE
#
##############Main Script######################
#
#Check Backup Config file exists
#
if [ -f $CONFIG_FILE ] #Make sure the config file still exits
then
echo
else
echo
echo "$CONFIG_FILE does not exist"
echo "Backup not completed due to missting Configuration file"
echo
exit
fi
#
#Build the name of all the files to backup
#
FILE_NO=1 #Start on line 1 of Config File
exec /dev/null
시간 별로 압축 된 스 크 립 트
압축 파일 디 렉 터 리 는 1 년 동안 의 각 달 에 대응 하 는 디 렉 터 리 를 포함 하고 달의 번 호 를 디 렉 터 리 이름 으로 합 니 다.매달 디 렉 터 리 에는 한 달 동안 의 각 일과 대응 하 는 디 렉 터 리 가 포함 되 어 있다.이렇게 하면 모든 압축 파일 에 시간 도장 을 찍 은 후에 그들 을 일과 달 에 대응 하 는 디 렉 터 리 에 넣 으 면 된다.
[root@digitcube-test1 tmp]# vim Hourly_Archive.sh
#!/bin/bash
#
#Hourly_Archive - Every hour create an arhive
##############################################
#
#Set Configureation File
#
CONFIG_FILE=/home/qingyun/hourly/file_to_backup
#
#Set Base Archive Destination Location
#
BASEDEST=/home/qingyun/hourly
#
#Gather Current Day.Month & Time
#
DAY=`date +%d`
MONTH=`date +%m`
TIME=`date +%k%M`
#
#Create Archive Destination Directory
#
mkdir -p $BASEDEST/$MONTH/$DAY
DESTINATION=$BASEDEST/$MONTH/$DAY/archive.$TIME.tar.gz
#
#Build Archvie Destination file Name
#
###############MAIN Script#####################################
#Check Backup Config file exists
#
if [ -f $CONFIG_FILE ] #Make sure the config file still exits
then
echo
else
echo
echo "$CONFIG_FILE does not exist"
echo "Backup not completed due to missting Configuration file"
echo
exit
fi
#
#Build the name of all the files to backup
#
FILE_NO=1 #Start on line 1 of Config File
exec /dev/null
3. 사용자 계 정 관리
스 크 립 트 삭제 에 들 어간 사용자 4 단계 집합:
1. 사용자 계 정 이름 을 획득 하고 확인,
2. 사용자 의 프로 세 스 를 찾 고 종료 합 니 다.
3. 이 사용자 계 정 에 속 하 는 모든 파일 보고 서 를 만 듭 니 다.
4. 최종 사용자 계 정 삭제
판단 매개 변수 사용
- z: 문자 길이 0, 진짜
- n: 문자 길이 가 0 이 아 닌 것 이 사실 입 니 다.
unset: 변수 와 함수 삭제
[root@logicserver tmp]# vim Delte_user.sh
#!/bin/bash
#
#Delte_User - Automates the 4 step to remove an account
#
#Defin Functions
#
##########################################################
function get_answer {
unset ANSWER
ASK_COUNT=0
#
while [ -z "$ANSWER" ] # while no anwser is given.keeip asking
do
ASK_COUNT=$[ $ASK_COUNT + 1 ]
#
case $ASK_COUNT in #If user gives no answer in time allotted
2)
echo
echo "Please answer the question"
echo
;;
3)
echo
echo "One last try.....please answer the question."
echo
;;
4)
echo
echo "Since you refuse to answer the question.."
echo "exiting program."
#
exit
;;
esac
#
echo
#
if [ -n "$LINE2" ]
then #print 2 lines
echo $LINE1
echo -e $LINE2" \c"
else
echo -e $LINE1"\c"
fi
#
# Allow 60 second to answer befor time-out
read -t 60 ANSWER
done
#Do a littel variable clean-up
unset LINE1
unset LINE2
#
} #End of get_answer function
#
#####################################################################
function process_answer {
#
case $ANSWER in
y|Y|YES|yes|Yes|yEs|yeS|YEs|yES)
#If user answer "yes".do noting
;;
*)
#If user answer anything but "yes".exit script
echo
echo $EXIT_LINE1
echo $EXIT_LINE2
echo
exit
;;
esac
#
#Do a little variable clean-up
#
unset EXIT_LINE1
unset EXIT_LINE2
#
} #End of process_answer funtion
#
###################################################################
#End of Function Definitions
#
######################Mian Script#################################
#Get name of User Account to check
#
echo "Step $1 - Determin User Account name to Delete "
echo
LINE1="please enter the username of the user "
LINE2="Account you wish to delete from system:"
get_answer
USER_ACCOUNT=$ANSWER
#
#Double check with script user that this is the coreect User Account
#
LINE1="Is $USER_ACCOUNT the user account "
LINE2="You wish to delete from the system?[y/n]"
get_answer
#
#Call process_answer funtion:
# If user answer anything but "yes".exit script
#
EXIT_LINE1="Because the account,$USER_ACCOUNT,is not"
EXIT_LINE2="The one you wish to delete.we are leaving the script..."
process_answer
#
############################################################################
#
USER_ACCOUNT_RECORD=$(cat /etc/passwd | grep -w $USER_ACCOUNT)
#
if [ $? -eq 1] #If the account is not found.exit script
then
echo
echo "Account,$USER_ACCOUNT.not found"
echo "Leaving the script..."
echo
exit
fi
#
echo "I found this record:"
echo $USER_ACCOUNT_RECORD
echo
#
LINE1="Is this the correct User Account?[y/n]"
get_answer
#
#
#Call process_answer function:
# If user answers anything but "yes",exit script
#
EXIT_LINE1="Because the account,$USER_ACCOUNT,is not"
EXIT_LINE2="The one you wish to delete.we are leaving the script...."
process_answer
#
#####################################################################
#Search for any running processes that belong to the User Account
#
echo
echo "Step #2 - Find process on system beloging to user account"
echo
echo "$USER_ACCOUNT has the following process running:"
echo
#
ps -u $USER_ACCOUNT #List user processes running.
case $? in
1) #No processes running for this User Account
#
echo "There are no processes for this account currently running."
echo
;;
0) #Processes running for this User Account.
#Ask Script User if wants us to kill the processes.
#
unset ANSWER
LINE1="Would you like me to kill me process(es)?[y/n]"
get_answer
#
case $ANSWER in
y|Y|YES|yes|Yes|yEs|yeS|YEs|yES) #If user answers "yes"
#Kill User Account processes.
#
echo
#
#Clean-up temp file upon signals
trap "rm $USER_ACCOUNT_Running_Process.rpt" SIGTERM SIGINT SIGQUIT
#
#List user processes running
ps -u $USER_ACCOUNT > $USER_ACCOUNT_Running_Process.rpt
#
exec $REPORT_FILE 2> /dev/null
#
echo
echo "Report is commlete."
echo "Name of report: $REPORT_FILE"
echo "Location of report: `pwd`"
echo
############################################
#Remove User Account
echo
echo "Step #4 - Remove user account"
echo
#
LINE1="Do you wish to remove $USER_ACCOUNT account from system?[y/n]"
get_answer
#
#Call process_answer function:
# if user answer anythin but "yes".exit script
#
EXIT_LINE1="Since you do not wish to remove the user account."
EXIT_LINE2="$USER_ACCOUNT at this time.exiting the script... "
process_answer
#
userdel $USER_ACCOUNT #delete user account
echo
echo "User account.$USER_ACCOUNT.has been removed"
echo