Managed Shell

Shell sample

유용한 Shell script

파일을 찾아서 변경하는 shell

조회한 파일리스트를 잘라내서 저장 - 전체 class 와 java 파일을 비교(diff)하기 위해서 사용함

jeus WAS 배포 - 전체 배포

Jeus WAS 개별 배포

Webtob 전체 배포

Webtob 개별 배포

port check

HomePlus


CategoryHomepage

Linux Core 수 확인

grep -c processor /proc/cpuinfo 코어 수 확인

Linux Memory 확인

cat /proc/meminfo | grep MemTotal 메모리 확인

Tomcat instance 운용 shell

Backup Shell

Crontab에 걸어서 실행 여부를 체크하고 실행하지 않았으면 실행 - ELK 적용 사례

Port Check

port check

Crontab

VirturalBox 관리용 스크립트 

0 1 1,10,14,20,30 * * /home/hyunsu/BackUpCenter/20221014-snapshot/001-snapshotAllVM.sh > /home/hyunsu/BackUpCenter/snapshot.log
0 0 5,25 * * /home/hyunsu/BackUpCenter/20221014-exportVM/001-exportAllVm.sh > /home/hyunsu/BackUpCenter/export.log
*/30 * * * * /home/hyunsu/dynamicDNS.sh > /home/hyunsu/dynamicDNS.log

 

VI

 

vi, vim ^M 제거
:%s/^M//g

위에서 ^M는 ^+M 이 아니고 Ctrl + v + m 이다.

 

주기적 폴더 복제

폴더 복제 

중요한 사진 백업 

0 2 * * * /home/hyunsu/BackUpCenter/backUpPicture.sh /data/ext/WD4TB/Pictures4T /data/ext/2TB/backup > /home/hyunsu/BackUpCenter/backupPictures.log

"/data/ext/WD4TB/Pictures4T" 폴더의 모든 파일을 "/data/ext/2TB/backup/Pictures4T"에 일단위로 복제함 

#!/bin/sh

export _SDATE=$(date +"%Y-%m-%d %H")
OrgDirectory=$1
BackUpDirectory=$2
DirectoryFound=$(find $OrgDirectory -type d )
countfiles=0

MakeList()
{
    echo "Make List !"
    find $OrgDirectory -type f > $BackUpDirectory/pictureList.list
}

checkFileExist()
{
    Orgfilename="$1"
    filename=`echo "$1" | cut -d'/' -f5-`
        #echo ">> " $BackUpDirectory/$filename
        if [ -f "$BackUpDirectory/$filename" ]; then
                printf "."
        else
                echo -e "\nNOT EXIST --> Copy " $Orgfilename " --> " $BackUpDirectory "/" $filename
                cp "$Orgfilename" "$BackUpDirectory/$filename"
        fi
}

checkDirectoryExist()
{
    dirname=`dirname "$1"`
        if [ -d "$BackUpDirectory/$dirname" ]; then
                printf "-"
        else
                echo -e "\nNOT EXIST --> Makedirectory " $BackUpDirectory/$dirname
                mkdir -p "$BackUpDirectory/$dirname"
        fi
}



#echo -e "\n\n##########################################"
echo "START "$_SDATE
if [ $# -ne 2 ];then
        echo "ERROR 1.target folder, 2. backup folder!"
        echo " ex : /home/hyunsu/BackUpCenter/backUpPicture.sh /data/ext/WD4TB/Pictures /data/ext/2TB/backup/Pictures"
        exit 1
fi

# 목록 파일을 만든다 .
MakeList

LINE_NO=$(cat $BackUpDirectory/pictureList.list | wc -l) # 몇 줄 라인인지 읽음
echo Total source file count : $LINE_NO line
while read line
do
    dirname=`echo $line | cut -d'/' -f5-`
    checkDirectoryExist "${dirname}"
    checkFileExist "${line}"
    countfiles=$(($countfiles+1))
done < $BackUpDirectory/pictureList.list

echo -e "\n Total check file count : " $countfiles " line"

_SDATE=$(date +"%Y-%m-%d %H")
echo -e "\nFINISH "$_SDATE
echo "##########################################"
exit 0

NAS에서 : 특정 폴더 Tar로 묶어 원격지에 복사

특정 폴더 Tar로 묶어 원격지에 복사 

#!/bin/sh

export FinalBackupCnt=5
export FinalBackupDueDay=60
export BaseBackupTarget=$1
export BackupTarget=$2
export NOW=`date +%Y%m%d%H%M`
export FinalBackupDay=`date +%Y%m%d%H%m --date="$FinalBackupDueDay days ago"`
export DestinationBackupFolder=$3




# Make Backup file
MakeBackUp()
{
  echo -n "\n ### Start Archiving folder ###"
  echo "Backup date is " $NOW
  echo "Base backup folder is " $BackupTarget
  echo "tar cfP $DestinationBackupFolder/$NOW-$BackupTarget.tar $BaseBackupTarget/$BackupTarget"
  tar cfP $DestinationBackupFolder/$NOW-$BackupTarget.tar $BaseBackupTarget/$BackupTarget

}

# Copy to Remote Backup Server 
CopyRemoteServer()
{
  echo -n "\n ### Start Copy Remote Server ###"
  echo "Target Server 192.168.0.10 "
  echo "scp $DestinationBackupFolder/$NOW-$BackupTarget.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS"
  scp $DestinationBackupFolder/$NOW-$BackupTarget.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS
}


# Delete Backup File 
ClearBackupFile()
{
  echo -n "\n ### Delete Back file ###"
  echo "Delete backup file = $DestinationBackupFolder/$NOW-$BackupTarget.tar "
  echo "rm -rf $DestinationBackupFolder/$NOW-$BackupTarget.tar"
  rm -rf $DestinationBackupFolder/$NOW-$BackupTarget.tar
}



if [ $# -ne 3 ];then
        echo "ERROR 1.target backup folder, 2.target folder, 2. base folder parameters !"
	echo " ex : /data/shared/remoteBackup.sh /data/shared/common bookstack /data/backup "
        exit 1
fi
echo "\n\n"
echo "=========== Backup START ! =============\n"
echo ">> Backup Base Folder : $BaseBackupTarget"
echo ">> Backup Target Folder : $BackupTarget"
echo ">> Backup Destination : $DestinationBackupFolder"
echo ">> DATE : $NOW"

MakeBackUp
CopyRemoteServer
ClearBackupFile


echo -n "\n =========== Backup FINISHED ! =============\n\n"

Departures  -->  Destination

Departures 에서 인증서를 만들어 Destination에 복사 

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hyunsu@192.168.0.10

NAS에서 : 매일 변경 파일을 Tar 로 원격지에 적재 / 일자를 정한 날짜를 원격지 적재

매일 변경된 내용을 Tar 원격지에 적재 

meta 시스템의 파일을 공유 

#!/bin/sh

export FinalBackupCnt=5
export FinalBackupDueDay=60
export BaseBackupTarget=$1
export BackupTargetYear=`date +%Y --date="1 days ago"`
export BackupTargetMonth=`date +%m --date="1 days ago"`
export BackupTargetDay=`date +%d --date="1 days ago"`
export NOW=`date +%Y%m%d%H%M`
export DestinationBackupFolder=$2
export DestinationRemoteBackupFolder=$3




# Make Backup file
MakeBackUp()
{
  echo -n "\n ### Start Archiving folder ###"
  echo "Backup date is " $NOW
  echo "Base backup folder is " $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay 
  echo "tar cfP $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay"
  tar cfP $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay
}

# Copy to Remote Backup Server
CopyRemoteServer()
{
  echo -n "\n ### Start Copy Remote Server ###"
  echo "Target Server 192.168.0.10 "
  echo "scp $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS"
  scp $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar hyunsu@192.168.0.10:$DestinationRemoteBackupFolder
}

# Delete Backup File
ClearBackupFile()
{
  echo -n "\n ### Delete Back file ###"
  echo "Delete backup file = $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar "
  rm -rf $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar
}



if [ $# -ne 3 ];then
        echo "ERROR 1.target backup folder, 2. base folder parameters 3. remote backup folder!"
        echo " ex : /data/shared/remoteBackupDaily.sh /data/shared/meta /home/hyunsu /data/ext/4TB/backup/NAS/meta"
        exit 1
fi
echo -n "\n\n"
echo "=========== Backup START ! =============\n"
echo ">> Backup Base Folder : $BaseBackupTarget"
echo ">> Backup Target Folder : $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay"
echo ">> Backup Destination : $DestinationBackupFolder"
echo ">> Backup Remote Destination : $DestinationRemoteBackupFolder"
echo ">> DATE : $NOW"
  if [ -d $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay ]; then
    echo "EXIST"
    MakeBackUp
    CopyRemoteServer
    ClearBackupFile
  else
    echo "NOT EXIST --> " $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay
  fi


echo -n "\n =========== Backup FINISHED ! =============\n\n"

메뉴얼하게 일자를 정할 때 

#!/bin/sh

export FinalBackupCnt=5
export FinalBackupDueDay=60
export BaseBackupTarget=$1
export BackupTargetYear=$4
export BackupTargetMonth=$5
export BackupTargetDay=$6
export NOW=`date +%Y%m%d%H%M`
export DestinationBackupFolder=$2
export DestinationRemoteBackupFolder=$3




# Make Backup file
MakeBackUp()
{
  echo -n "\n ### Start Archiving folder ###"
  echo "Backup date is " $NOW
  echo "Base backup folder is " $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay 
  echo "tar cfP $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay"
  tar cfP $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay
}

# Copy to Remote Backup Server
CopyRemoteServer()
{
  echo -n "\n ### Start Copy Remote Server ###"
  echo "Target Server 192.168.0.10 "
  echo "scp $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS"
  scp $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar hyunsu@192.168.0.10:$DestinationRemoteBackupFolder
}

# Delete Backup File
ClearBackupFile()
{
  echo -n "\n ### Delete Back file ###"
  echo "Delete backup file = $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar "
  rm -rf $DestinationBackupFolder/meta-$BackupTargetYear-$BackupTargetMonth-$BackupTargetDay.tar
}



if [ $# -ne 6 ];then
        echo "ERROR 1.target backup folder, 2. base folder parameters 3. remote backup folder!"
        echo " ex : /data/shared/remoteBackupDaily.sh /data/shared/meta /home/hyunsu /data/ext/4TB/backup/NAS/meta 2024 9 3"
        echo " ex : /data/shared/remoteBackupDaily.sh /data/shared/backup/meta /home/hyunsu /data/ext/4TB/backup/NAS/backup/meta 2024 9 3"
        exit 1
fi
echo -n "\n\n"
echo "=========== Backup START ! =============\n"
echo ">> Backup Base Folder : $BaseBackupTarget"
echo ">> Backup Target Folder : $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay"
echo ">> Backup Destination : $DestinationBackupFolder"
echo ">> Backup Remote Destination : $DestinationRemoteBackupFolder"
echo ">> DATE : $NOW"
  if [ -d $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay ]; then
    echo "EXIST"
    MakeBackUp
    CopyRemoteServer
    ClearBackupFile
  else
    echo "NOT EXIST --> " $BaseBackupTarget/$BackupTargetYear/$BackupTargetMonth/$BackupTargetDay
  fi


echo -n "\n =========== Backup FINISHED ! =============\n\n"

HOST에서 : 적재된 파일을 주기적으로 삭제

적재된 파일을 주기적으로 삭제 

0 6 * * * /data/ext/4TB/backup/NAS/delBackupFile.sh /data/ext/4TB/backup/NAS common
0 7 * * * /data/ext/4TB/backup/NAS/delBackupFile.sh /data/ext/4TB/backup/NAS devops
0 11 * * * /data/ext/4TB/backup/NAS/delBackupFile.sh /data/ext/4TB/backup/NAS showcase1
0 12 * * * /data/ext/4TB/backup/NAS/delBackupFile.sh /data/ext/4TB/backup/NAS scm

delBackupFile.sh

#!/bin/bash

export FinalBackupCnt=120
export FinalBackupDueDay=120
export BackupTarget=$2
export BackupFolder=$1
export NOW=`date +%Y%m%d%H%m`
export FinalBackupDay=`date +%Y%m%d%H%m --date="$FinalBackupDueDay days ago"`



# Backup Delete
DeleteBackupTar()
{
  
  echo "## Old $BackupTarget.tar backup file delete ! ##"
  TotalBackupCnt=`find $BackupFolder -name "*$BackupTarget.tar" | wc -l`
  echo ' >> Total backup files count = ' $TotalBackupCnt
  echo ' >> Final backup files remain count = ' $FinalBackupCnt
  TargetDeleteBackupCnt=`expr $TotalBackupCnt - $FinalBackupCnt`
  if [ $TargetDeleteBackupCnt -lt 0 ]; then
    TargetDeleteBackupCnt=0
  fi
  echo ' > Total backup files count - Final backup files count =' $TargetDeleteBackupCnt
  cd $BackupFolder
  BackupAllFiles=$(find ./ -name "*$BackupTarget.tar" | awk -F "/" '{print $2}' | sort -n)


  cnt=1
  echo ' > ' $FinalBackupDueDay ' day before delete target snapshot list'
  for i in $BackupAllFiles
  do
    backupFileDate=`echo $i | awk -F "-" '{print $1}'`
    echo $cnt " : " $i , $backupFileDate , $FinalBackupDay 
    if [ $backupFileDate -le $FinalBackupDay ]
    then
      echo "     DELETE!"
      if [ $TargetDeleteBackupCnt -ge $cnt ]
      then
           echo "     DELETEED! " $BackupFolder/$i
           echo 'rm $BackupFolder/$i'
      else
           echo "     DELETE SKIP!"
      fi
    else
      echo "     NOtyet Delete date "
    fi
  cnt=$(expr $cnt + 1)
  done
}


if [ $# -ne 2 ];then
        echo "ERROR 1. backup base folder, 2. delete target tar name !"
        echo " ex : /data/ext/4TB/backup/NAS/delBackupFile.sh /data/ext/4TB/backup/NAS devops "
        exit 1
fi
echo -e "\n\n=========== Delete START ! ============="
echo ">> Backup Target : $BackupTarget"
echo ">> DATE : $NOW"
echo ">> Final Backup Due Day : $FinalBackupDueDay"
echo ">> Final Backup Day : $FinalBackupDay\n"

DeleteBackupTar 

echo -e "\n============== $1 Delete Finished  ! ===========\n"

Kube Master에서 생성 yaml을 원격에 백업

10 08 * * * /home/hyunsu/remoteBackup.sh /home/hyunsu scm /home/hyunsu

remoteBackup.sh

#!/bin/bash

export FinalBackupCnt=5
export FinalBackupDueDay=60
export BaseBackupTarget=$1
export BackupTarget=$2
export NOW=`date +%Y%m%d%H%M`
export FinalBackupDay=`date +%Y%m%d%H%m --date="$FinalBackupDueDay days ago"`
export DestinationBackupFolder=$3




# Make Backup file
MakeBackUp()
{
  echo -e "\n ### Start Archiving folder ###"
  echo "Backup date is " $NOW
  echo "Base backup folder is " $BackupTarget
  echo "tar cfP $DestinationBackupFolder/$NOW-$BackupTarget.tar $BaseBackupTarget/$BackupTarget"
  tar cfP $DestinationBackupFolder/$NOW-$BackupTarget.tar $BaseBackupTarget/$BackupTarget

}

# Copy to Remote Backup Server
CopyRemoteServer()
{
  echo -e "\n ### Start Copy Remote Server ###"
  echo "Target Server 192.168.0.10 "
  echo "scp $DestinationBackupFolder/$NOW-$BackupTarget.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS"
  scp $DestinationBackupFolder/$NOW-$BackupTarget.tar hyunsu@192.168.0.10:/data/ext/4TB/backup/NAS
}


# Delete Backup File
ClearBackupFile()
{
  echo -e "\n ### Delete Back file ###"
  echo "Delete backup file = $DestinationBackupFolder/$NOW-$BackupTarget.tar "
  echo "rm -rf $DestinationBackupFolder/$NOW-$BackupTarget.tar"
  rm -rf $DestinationBackupFolder/$NOW-$BackupTarget.tar
}



if [ $# -ne 3 ];then
        echo "ERROR 1.target backup folder, 2.target folder, 2. base folder parameters !"
        echo " ex : /data/shared/remoteBackup.sh /data/shared/common bookstack /data/backup "
        exit 1
fi
echo -e "\n"
echo "=========== Backup START ! =============\n"
echo ">> Backup Base Folder : $BaseBackupTarget"
echo ">> Backup Target Folder : $BackupTarget"
echo ">> Backup Destination : $DestinationBackupFolder"
echo ">> DATE : $NOW"

MakeBackUp
CopyRemoteServer
ClearBackupFile


echo -e "\n =========== Backup FINISHED ! =============\n\n"